

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# Amazon Redshift의 보안
<a name="iam-redshift-user-mgmt"></a>

AWS은 클라우드 보안을 가장 중요하게 생각합니다. AWS 고객으로서 여러분은 가장 높은 보안 요구 사항을 충족하기 위해 설계된 데이터 센터 및 네트워크 아키텍처의 혜택을 받게 됩니다.

보안은 AWS과 사용자의 공동 책임입니다. [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)은 이 사항을 클라우드 *내* 보안 및 클라우드*의* 보안으로 설명합니다.
+ **클라우드의 보안** - AWS는 AWS 클라우드 내에서 AWS 서비스를 실행하는 인프라를 보호할 책임이 있습니다. AWS 또한 안전하게 사용할 수 있는 서비스를 제공합니다. 제3자 감사자는 정기적으로 [AWS 규정 준수 프로그램](https://aws.amazon.com/compliance/programs/)의 일환으로 보안 효과를 테스트하고 검증합니다. Amazon Redshift에 적용되는 규정 준수 프로그램에 대한 자세한 내용은 [AWS규정 준수 프로그램 제공 범위 내 서비스](https://aws.amazon.com/compliance/services-in-scope/)를 참조하세요.
+ **클라우드 내 보안** – 귀하의 책임은 귀하가 사용하는 AWS 서비스에 의해 결정됩니다. 또한 데이터의 민감도, 조직의 요구 사항, 관련 법률 및 규정을 비롯한 기타 요소에 대해서도 책임이 있습니다.

Amazon Redshift 리소스에 대한 액세스는 4가지 수준에서 제어됩니다.
+ **클러스터 관리 –** 클러스터의 생성, 구성 및 삭제는 AWS 보안 자격 증명과 연결되어 있는 사용자 또는 계정에게 부여된 권한을 통해 제어됩니다. 적합한 권한을 가진 사용자라면 누구나 AWS Management Console, AWS Command Line Interface(CLI) 또는 Amazon Redshift 애플리케이션 프로그램 인터페이스(API)를 사용하여 클러스터를 관리할 수 있습니다. 이러한 액세스는 IAM 정책을 통해 관리됩니다.
**중요**  
Amazon Redshift에는 권한, ID 및 보안 액세스를 관리하기 위한 모범 사례 모음이 포함되어 있습니다. Amazon Redshift를 처음 사용하면서 이러한 내용을 숙지하는 것이 좋습니다. 자세한 내용은 [Amazon Redshift의 Identity and Access Management](redshift-iam-authentication-access-control.md) 섹션을 참조하세요.
+ **클러스터 연결 -** Amazon Redshift 보안 그룹이 CIDR(Classless Inter-Domain Routing) 형식으로 Amazon Redshift 클러스터 연결 권한을 부여할 AWS 인스턴스를 지정합니다. Amazon Redshift, Amazon EC2 및 Amazon VPC 보안 그룹을 생성하고 클러스터와 연결하는 방법에 대한 자세한 내용은 [Amazon Redshift 보안 그룹](security-network-isolation.md#working-with-security-groups) 섹션을 참조하세요.
+  **데이터베이스 액세스 –** 테이블이나 뷰 같은 데이터베이스 객체에 대한 액세스는 Amazon Redshift 데이터베이스의 사용자 계정에서 제어합니다. 사용자는 자신의 계정에 액세스 권한이 부여된 경우에 한해 데이터베이스 리소스에 액세스할 수 있습니다. 이러한 Amazon Redshift 사용자 계정과 관리 권한은 [CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html), [CREATE GROUP](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_GROUP.html), [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html) 및 [REVOKE](https://docs.aws.amazon.com/redshift/latest/dg/r_REVOKE.html) SQL 문을 사용하여 생성합니다. 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서의 [데이터베이스 보안 관리](https://docs.aws.amazon.com/redshift/latest/dg/r_Database_objects.html)를 참조하세요.
+ **임시 데이터 자격 증명과 통합 인증 –** CREATE USER 및 ALTER USER 등과 같은 SQL 명령으로 데이터베이스 사용자를 생성하고 관리하는 일 외에도, 사용자 정의 Amazon Redshift JDBC 또는 ODBC 드라이버로 SQL 클라이언트를 구성할 수 있습니다. 이러한 드라이버는 데이터베이스 로그온 프로세스의 일환으로 데이터베이스 사용자 및 임시 암호 생성 프로세스를 관리합니다.

  드라이버는 AWS Identity and Access Management(IAM) 인증을 바탕으로 데이터베이스 사용자를 인증합니다. 이미 AWS 밖에서 사용자 자격 증명을 관리하고 있는 경우 SAML 2.0을 준수하는 자격 증명 공급자(IdP)를 통해 Amazon Redshift 리소스에 대한 액세스를 관리할 수 있습니다. IAM 역할을 사용해 IdP 및 AWS를 구성하고 페더레이션 사용자가 임시 데이터베이스 자격 증명을 새로 만들고 Amazon Redshift 데이터베이스에 로그온하도록 허용할 수 있습니다. 자세한 내용은 [IAM 인증을 이용한 데이터베이스 사용자 자격 증명 생성](generating-user-credentials.md) 섹션을 참조하세요.

이 설명서는 Amazon Redshift를 사용할 때 공동 책임 모델을 적용하는 방법을 이해하는 데 도움이 됩니다. 다음 주제에서는 보안 및 규정 준수 목적에 맞게 Amazon Redshift를 구성하는 방법을 보여줍니다. 또한 Amazon Redshift 리소스를 모니터링하고 보호하는 데 도움이 되는 다른 AWS 서비스를 사용하는 방법을 배우게 됩니다.

**Topics**
+ [

# Amazon Redshift에서 데이터 보호
](security-data-protection.md)
+ [

# Amazon Redshift의 Identity and Access Management
](redshift-iam-authentication-access-control.md)
+ [

# AWS Secrets Manager를 사용하여 Amazon Redshift 관리자 암호를 관리하는 방법
](redshift-secrets-manager-integration.md)
+ [

# Amazon Redshift의 로깅 및 모니터링
](security-incident-response.md)
+ [

# Amazon Redshift의 규정 준수 확인
](security-compliance.md)
+ [

# Amazon Redshift의 복원성
](security-disaster-recovery-resiliency.md)
+ [

# Amazon Redshift의 인프라 보안
](security-network-isolation.md)
+ [

# Amazon Redshift의 구성 및 취약성 분석
](security-vulnerability-analysis-and-management.md)

# Amazon Redshift에서 데이터 보호
<a name="security-data-protection"></a>

AWS [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/)은 Amazon Redshift의 데이터 보호에 적용됩니다. 이 모델에서 설명하는 것처럼 AWS는 모든 AWS 클라우드를 실행하는 글로벌 인프라를 보호할 책임이 있습니다. 사용자는 이 인프라에 호스팅되는 콘텐츠에 대한 통제 권한을 유지할 책임이 있습니다. 사용하는 AWS 서비스의 보안 구성과 관리 태스크에 대한 책임도 사용자에게 있습니다. 데이터 프라이버시에 관한 자세한 내용은 [데이터 프라이버시 FAQ](https://aws.amazon.com/compliance/data-privacy-faq/)를 참조하세요. 유럽의 데이터 보호에 대한 자세한 내용은 *AWS 보안 블로그*의 [AWS 공동 책임 모델 및 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 블로그 게시물을 참조하세요.

데이터를 보호하려면 AWS 계정자격 증명을 보호하고 AWS IAM Identity Center또는 AWS Identity and Access Management(IAM)를 통해 개별 사용자 계정을 설정하는 것이 좋습니다. 이렇게 하면 개별 사용자에게 자신의 직무를 충실히 이행하는 데 필요한 권한만 부여됩니다. 또한 다음과 같은 방법으로 데이터를 보호하는 것이 좋습니다.
+ 각 계정에 다중 인증(MFA)을 사용합니다.
+ SSL/TLS를 사용하여 AWS 리소스와 통신합니다. TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ AWS CloudTrail로 API 및 사용자 활동 로깅을 설정합니다. CloudTrail 추적을 사용하여 AWS 활동을 캡처하는 방법에 대한 자세한 내용은 *AWS CloudTrail 사용자 안내서*의 [CloudTrail 추적 작업](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)을 참조하세요.
+ AWS 암호화 솔루션을 AWS 서비스 내의 모든 기본 보안 제어와 함께 사용합니다.
+ Amazon S3에 저장된 민감한 데이터를 검색하고 보호하는 데 도움이 되는 Amazon Macie와 같은 고급 관리형 보안 서비스를 사용합니다.
+ 명령줄 인터페이스 또는 API를 통해 AWS에 액세스할 때 FIPS 140-3 검증된 암호화 모듈이 필요한 경우, FIPS 엔드포인트를 사용합니다. 사용 가능한 FIPS 엔드포인트에 대한 자세한 내용은 [연방 정보 처리 표준(FIPS) 140-3](https://aws.amazon.com/compliance/fips/)을 참조하세요.

고객의 이메일 주소와 같은 기밀 정보나 중요한 정보는 태그나 **이름** 필드와 같은 자유 형식 텍스트 필드에 입력하지 않는 것이 좋습니다. 여기에는 Amazon Redshift 또는 기타 AWS 서비스에서 콘솔, API, AWS CLI 또는 AWS를 사용하여 작업하는 경우가 포함됩니다. 이름에 사용되는 태그 또는 자유 형식 텍스트 필드에 입력하는 모든 데이터는 청구 또는 진단 로그에 사용될 수 있습니다. 외부 서버에 URL을 제공할 때 해당 서버에 대한 요청을 검증하기 위해 자격 증명을 URL에 포함해서는 안 됩니다.

# 데이터 암호화
<a name="security-encryption"></a>

데이터 보호란 전송 중인 데이터(Amazon Redshift 안팎으로 데이터가 이동 중)와 저장된 데이터(Amazon Redshift 데이터 센터의 디스크에 데이터가 저장됨)를 보호하는 것을 말합니다. SSL을 사용하거나 클라이언트 측 암호화를 사용하여 전송 중에도 데이터를 보호할 수 있습니다. Amazon Redshift에서 저장된 데이터를 보호하는 방법은 다음과 같습니다.
+ **서버 측 암호화 사용** – 데이터 센터의 디스크에 저장하기 전에 데이터를 암호화하고 객체를 다운로드할 때 이를 복호화하도록 Amazon Redshift에 요청합니다.
+ **클라이언트 측 암호화 사용** – 클라이언트 측에서 데이터를 암호화하여 암호화된 데이터를 Amazon Redshift에 업로드할 수 있습니다. 이 경우 사용자가 암호화 프로세스, 암호화 키 및 관련 도구를 관리합니다.

# 저장 시 암호화
<a name="security-server-side-encryption"></a>

서버 측 암호화는 저장 시의 데이터 암호화에 관한 것으로 즉, Amazon Redshift에서는 필요에 따라 데이터 센터에 기록할 때 데이터를 암호화하고 해당 데이터에 액세스할 때 이를 복호화합니다. 요청을 인증하기만 하면 액세스 권한을 갖게 되며, 데이터의 암호화 여부와 관계없이 액세스 방식에는 차이가 없습니다.

Amazon Redshift는 암호화를 통해 저장된 데이터를 보호합니다. 필요한 경우 고급 암호화 표준(AES-256)으로 클러스터 내 디스크 상에 저장된 모든 데이터와 Amazon S3의 모든 백업을 보호할 수 있습니다.

Amazon Redshift 리소스의 암호화 및 복호화에 사용되는 키를 관리하려면 [AWS Key Management Service(AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/)를 사용합니다. AWS KMS는 클라우드에 맞게 조정된 키 관리 시스템을 제공하기 위해 안전하고 가용성이 높은 하드웨어 및 소프트웨어를 결합합니다. AWS KMS를 사용하면 암호화 키를 생성하고 이 키를 사용할 수 있는 방법을 제어하는 정책을 정의할 수 있습니다. AWS KMS는 AWS CloudTrail를 지원하므로 키가 적절하게 사용되고 있는지 확인하기 위해 키 사용을 감사할 수 있습니다. AWS KMS 키는 Amazon Redshift 및 지원되는 AWS 서비스와 함께 사용할 수 있습니다. AWS KMS를 지원하는 서비스 목록을 보려면 *AWS Key Management Service Developer Guide*의 [How AWS Services Use AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services.html)를 참조하세요.

AWS Secrets Manager를 사용하여 프로비저닝된 클러스터 또는 서버리스 네임스페이스의 관리자 암호를 관리하기로 선택한 경우 Amazon Redshift는 AWS Secrets Manager가 보안 인증 정보를 암호화하는 데 사용하는 추가 AWS KMS 키도 허용합니다. 이 추가 키는 AWS Secrets Manager에서 자동으로 생성된 키이거나 사용자가 제공하는 사용자 지정 키일 수 있습니다.

Amazon Redshift 쿼리 편집기 v2는 쿼리 편집기에 입력한 정보를 다음과 같이 안전하게 저장합니다.
+ 쿼리 편집기 v2 데이터를 암호화하는 데 사용되는 KMS 키의 Amazon 리소스 이름(ARN).
+ 데이터베이스 연결 정보.
+ 파일 및 폴더의 이름 및 내용.

Amazon Redshift 쿼리 편집기 v2는 KMS 키 또는 서비스 계정 KMS 키로 블록 수준 암호화를 사용하여 정보를 암호화합니다. Amazon Redshift 데이터의 암호화는 Amazon Redshift 클러스터 속성에 의해 제어됩니다.

**Topics**
+ [

# Amazon Redshift 데이터베이스 암호화
](working-with-db-encryption.md)

# Amazon Redshift 데이터베이스 암호화
<a name="working-with-db-encryption"></a>

Amazon Redshift에서는 저장 데이터를 보호하기 위해 데이터베이스가 기본적으로 암호화됩니다. 데이터베이스 암호화는 클러스터뿐만 아니라 해당 스냅샷에도 적용됩니다.

AWS Key Management Service(AWS KMS) 암호화를 사용하도록 암호화되지 않은 클러스터를 수정할 수 있습니다. 이렇게 하려면 AWS 소유 키나 고객 관리형 키를 사용합니다. AWS KMS 암호화를 사용하도록 클러스터를 수정하면 Amazon Redshift에서 암호화된 새 클러스터로 데이터를 자동으로 마이그레이션합니다. 암호화된 클러스터에서 생성한 스냅샷 역시 암호화됩니다. 클러스터를 수정하고 **데이터베이스 암호화(Encrypt database)** 옵션을 변경해 암호화된 클러스터를 암호화되지 않은 클러스터로 마이그레이션할 수도 있습니다. 자세한 내용은 [클러스터 암호화 변경](changing-cluster-encryption.md) 섹션을 참조하세요.

클러스터를 생성한 후에도 기본 암호화된 클러스터를 암호화되지 않은 상태로 변환할 수 있지만 민감한 데이터가 포함된 클러스터는 암호화된 상태로 유지하는 것이 좋습니다. 또한 데이터 통합 관리 지침 또는 규정에 따라 암호화를 사용해야 하는 경우도 있습니다. 예를 들어 미국 신용카드협회 데이터 보안 표준(PCI DSS), 사베인스-옥슬리 법(SOX), 건강보험 이전 및 책임법(HIPAA) 및 기타 관련 규정 등은 특정 유형의 데이터 취급에 대한 지침 준수를 요구합니다.

Amazon Redshift는 암호화 키 계층을 통해 데이터베이스를 암호화합니다. 이 계층에서 최상위 암호화 키는 AWS Key Management Service(AWS KMS) 또는 하드웨어 보안 모듈(HSM)을 사용하여 관리할 수 있습니다. Amazon Redshift가 암호화에 사용하는 프로세스는 키 관리 방식에 따라 다릅니다. Amazon Redshift는 AWS KMS와 자동으로 통합되지만 HSM과는 통합되지 않습니다. HSM을 사용할 때는 클라이언트 및 서버 인증서를 통해 Amazon Redshift와 HSM 사이에 신뢰할 수 있는 연결을 구성해야 합니다.

**중요**  
 고객 관리형 KMS 키를 비활성화하면 Amazon Redshift가 프로비저닝된 클러스터 또는 서버리스 네임스페이스의 KMS 키에 액세스하지 못할 수 있습니다. 이러한 경우 Amazon Redshift는 Amazon Redshift 데이터 웨어하우스의 백업을 가져와 14일 동안 `inaccessible-kms-key` 상태로 둡니다. 해당 기간 내에 KMS 키를 복원하면 Amazon Redshift의 액세스가 복원되고 웨어하우스가 정상적으로 작동합니다. KMS 키를 복원하지 않고 14일 기간이 종료될 경우 Amazon Redshift는 데이터 웨어하우스를 삭제합니다. 웨어하우스가 `inaccessible-kms-key` 상태인 동안에는 다음과 같은 특성이 있습니다.  
 데이터 웨어하우스에서 쿼리를 실행할 수 없습니다.
 데이터 웨어하우스가 데이터 공유의 생산자 웨어하우스인 경우 소비자 웨어하우스에서 그에 대해 데이터 공유 쿼리를 실행할 수 없습니다.
 교차 리전 스냅샷 복사본을 생성할 수 없습니다.
비활성화된 KMS 키 복원에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [키 활성화 및 비활성화](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html)를 참조하세요. 웨어하우스의 KMS 키가 삭제된 경우 `inaccessible-kms-key` 상태 웨어하우스가 삭제되기 전에 백업을 사용하여 새 데이터 웨어하우스를 생성할 수 있습니다.

## 성능 및 가용성 향상을 위해 암호화 프로세스 개선
<a name="resize-classic-encryption"></a>

### RA3 노드를 사용한 암호화
<a name="resize-classic-encryption-ra3"></a>

 RA3 노드의 암호화 프로세스가 업데이트되어 경험이 훨씬 개선되었습니다. 암호화로 인한 성능 영향을 줄이면서 프로세스 중에 읽기 및 쓰기 쿼리를 모두 실행할 수 있습니다. 또한 암호화가 훨씬 빠르게 완료됩니다. 업데이트된 프로세스 단계에는 복원 작업과 클러스터 메타데이터를 타깃 클러스터로 마이그레이션하는 작업이 포함됩니다. 향상된 경험은 예를 들어 AWS KMS와 같은 암호화 유형에 적용됩니다. 페타바이트 규모의 데이터 볼륨이 있는 경우 작업 시간이 몇 주에서 며칠로 단축되었습니다.

클러스터를 암호화하기 전에 데이터베이스 워크로드를 계속 실행하려는 경우 탄력적 크기 조정이 가능한 노드를 추가하여 성능을 개선하고 프로세스 속도를 높일 수 있습니다. 암호화가 진행 중일 때는 탄력적 크기 조정을 사용할 수 없으므로 암호화하기 전에 사용하세요. 일반적으로 노드를 추가하면 비용이 더 많이 든다는 점을 참고하세요.

### 다른 노드 유형과의 암호화
<a name="resize-classic-encryption-ds2"></a>

DC2 노드로 클러스터를 암호화하면 RA3 노드에서와 같이 쓰기 쿼리를 실행할 수 없습니다. 읽기 쿼리만 실행할 수 있습니다.

### RA3 노드를 사용한 암호화에 대한 사용 참고 사항
<a name="resize-classic-encryption-usage"></a>

다음 인사이트와 리소스는 암호화를 준비하고 프로세스를 모니터링하는 데 도움이 됩니다.
+ **암호화 시작 후 쿼리 실행** - 암호화가 시작된 후 약 15분 이내에 읽기 및 쓰기가 가능합니다. 전체 암호화 프로세스를 완료하는 데 걸리는 시간은 클러스터 데이터의 양과 워크로드 수준에 따라 달라집니다.
+ **암호화에는 시간이 얼마나 걸리나요?** - 데이터를 암호화하는 데 걸리는 시간은 실행 중인 워크로드 수, 사용 중인 컴퓨팅 리소스, 노드 수, 노드 유형 등 여러 요인에 따라 달라집니다. 처음에는 테스트 환경에서 암호화를 수행하는 것이 좋습니다. 일반적으로 페타바이트 단위의 데이터 볼륨으로 작업하는 경우 암호화가 완료되는 데 1\$13일이 걸릴 수 있습니다.
+ **암호화가 완료되었는지 어떻게 알 수 있나요?** - 암호화를 활성화한 후 첫 번째 스냅샷이 완료되면 암호화가 완료된 것입니다.
+ **암호화 롤백** - 암호화 작업을 롤백해야 하는 경우 가장 좋은 방법은 암호화가 시작되기 전에 만든 가장 최근의 백업에서 복원하는 것입니다. 마지막 백업 이후의 새 업데이트(업데이트/삭제/삽입)은 다시 적용해야 합니다.
+ **테이블 복원 수행** - 암호화되지 않은 클러스터에서 암호화된 클러스터로는 테이블을 복원할 수 없습니다.
+ **단일 노드 클러스터 암호화** - 단일 노드 클러스터를 암호화하면 성능 제한이 있습니다. 다중 노드 클러스터 암호화보다 시간이 오래 걸립니다.
+ **암호화 후 백업 생성** - 클러스터의 데이터를 암호화하면 클러스터가 완전히 암호화될 때까지 백업이 생성되지 않습니다. 소요 시간은 다를 수 있습니다. 백업에 소요되는 시간은 클러스터 크기에 따라 몇 시간에서 며칠이 될 수 있습니다. 암호화가 완료된 후 백업을 생성하기까지 지연이 발생할 수 있습니다.

  참고로, 암호화 프로세스 중에 백업 및 복원 작업이 이루어지기 때문에 `BACKUP NO`에서 생성한 테이블 또는 구체화된 뷰는 보존되지 않습니다. 자세한 내용은 [테이블 생성](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html) 또는 [구체화된 뷰 생성](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-create-sql-command.html)을 참조하십시오.

**Topics**
+ [

## 성능 및 가용성 향상을 위해 암호화 프로세스 개선
](#resize-classic-encryption)
+ [

## AWS KMS로 암호화
](#working-with-aws-kms)
+ [

## 하드웨어 보안 모듈을 사용한 암호화
](#working-with-HSM)
+ [

## 키 교체 암호화
](#working-with-key-rotation)
+ [

# 클러스터 암호화 변경
](changing-cluster-encryption.md)
+ [

# HSM 암호화 클러스터로 마이그레이션
](migrating-to-an-encrypted-cluster.md)
+ [

# 암호화 키 교체
](manage-key-rotation-console.md)

## AWS KMS로 암호화
<a name="working-with-aws-kms"></a>

Amazon Redshift에서 AWS KMS를 선택하여 키를 관리할 때는 4개 티어의 암호화 키 계층으로 구성됩니다. 이들 키는 계층 순서에 따라 루트 키, 클러스터 암호화 키(CEK), 데이터베이스 암호화 키(DEK) 및 데이터 암호화 키입니다.

클러스터를 시작하면 Amazon Redshift가 Amazon Redshift 또는 AWS 계정이 AWS KMS에서 생성했거나 사용 권한이 있는 AWS KMS keys 목록을 반환합니다. 암호화 계층에서 루트 키로 사용할 KMS 키를 선택합니다.

기본적으로 Amazon Redshift는 자동으로 생성된 AWS 소유 키를 Amazon Redshift에서 사용할 AWS 계정의 루트 키로 선택합니다.

기본 키를 사용하지 않으려면 Amazon Redshift에서 클러스터를 시작하기 전에 AWS KMS에서 고객 관리형 KMS 키를 별도로 가지고 있거나 생성해야 합니다. 고객 관리형 키에는 액세스 제어 권한에 대한 생성, 순환, 비활성화 및 정의 기능을 비롯해 데이터 보호에 사용되는 암호화 키에 대한 감사 기능까지 포함되어 유연성을 높여주는 효과가 있습니다. KMS 키 생성에 대한 자세한 내용은 *AWS Key Management Service 개발자 안내서*의 [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)을 참조하세요.

다른 AWS 계정에서 AWS KMS 키를 사용하려면 먼저 키에 대한 사용 권한이 있어야 하며, 또한 Amazon Redshift에서 Amazon 리소스 이름(ARN)을 지정해야 합니다. AWS KMS의 키 액세스에 대한 자세한 내용은 *AWS Key Management Service Developer Guide*의 [Controlling Access to Your Keys](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)를 참조하세요.

루트 키를 선택하면 Amazon Redshift가 AWS KMS에 데이터 키를 생성한 후 선택한 루트 키를 사용해 데이터 키를 암호화하도록 요청합니다. 이 데이터 키는 Amazon Redshift에서 CEK로 사용됩니다. AWS KMS가 암호화된 CEK를 Amazon Redshift로 내보내면 여기에서 CEK의 암호화 컨텍스트와 KMS 키에 대한 권한이 부여되어 클러스터와 분리되어 있는 네트워크 디스크에 저장됩니다. 암호화된 CEK만 Amazon Redshift로 내보내집니다. KMS 키는 AWS KMS에 남아 있습니다. 또한 Amazon Redshift는 암호화된 CEK를 보안 채널을 통해 클러스터로 전달하고 이를 메모리에 로드합니다. 그런 다음 Amazon Redshift는 AWS KMS를 호출하여 CEK를 복호화한 후 복호화된 CEK를 메모리에 로드합니다. 권한 부여, 암호화 컨텍스트 및 기타 AWS KMS 관련 개념에 대한 자세한 내용은 *AWS Key Management Service Developer Guide*의 [Concepts](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html) 섹션을 참조하세요.

그런 다음 Amazon Redshift가 DEK로 사용할 키를 무작위로 생성하여 클러스터의 메모리에 로드합니다. 복호화된 CEK는 DEK를 암호화하는 데 사용되며, 이후 암호화된 DEK는 클러스터에서 보안 채널을 통해 전송되어 Amazon Redshift에서 내부적으로 클러스터와 분리되어 있는 네트워크 디스크에 저장합니다. CEK와 마찬가지로 암호화 버전과 복호화 버전의 DEK 모두 클러스터의 메모리에 로드됩니다. 이후 복호화 버전의 DEK는 데이터베이스의 데이터 블록마다 무작위로 생성되는 개별 암호화 키를 암호화하는 데 사용됩니다.

클러스터가 재부팅되면 Amazon Redshift가 내부에 저장된 암호화 버전의 CEK와 DEK를 통해 시작되면서 두 키를 메모리에 다시 로드합니다. 그런 다음 AWS KMS를 호출하여 다시 KMS 키를 사용해 메모리에 로드할 수 있도록 CEK를 복호화합니다. 이후 복호화된 CEK가 다시 DEK를 복호화하는 데 사용되고, 이렇게 복호화된 DEK는 메모리에 로드되어 필요할 때마다 데이터 블록 키를 암호화하거나 복호화하는 역할을 합니다.

AWS KMS 키를 사용하여 암호화되는 Amazon Redshift 클러스터 생성에 대한 자세한 정보는 [클러스터 생성](create-cluster.md) 섹션을 참조하세요.

### AWS KMS로 암호화된 스냅샷을 다른 AWS 리전으로 복사
<a name="configure-snapshot-copy-grant"></a>

AWS KMS 키는 AWS 리전마다 고유합니다. Amazon Redshift 스냅샷을 암호화된 소스 클러스터에서 다른 AWS 리전으로 복사하려 하지만 대상의 스냅샷에 자체 AWS KMS 키를 사용하려는 경우, Amazon Redshift가 대상 AWS 리전의 사용자 계정에서 루트 키를 사용할 수 있는 권한 부여를 구성해야 합니다. 이 권한을 부여하면 Amazon Redshift가 대상 AWS 리전의 스냅샷을 암호화할 수 있습니다. 대상의 스냅샷을 AWS 리전 소유 키로 암호화하려는 경우 대상 AWS 리전에서 권한 부여를 구성할 필요가 없습니다. 리전 간 스냅샷 복사에 대한 자세한 내용은 [다른 AWS 리전에 스냅샷 복사](cross-region-snapshot-copy.md) 단원을 참조하십시오.

**참고**  
암호화된 클러스터의 스냅샷 복사 기능을 활성화하고 루트 키로 AWS KMS를 사용하는 경우에는 클러스터 이름이 암호화 컨텍스트에 포함되어 클러스터 이름을 변경할 수 없습니다. 이때 클러스터 이름을 변경해야 한다면 원본 AWS 리전의 스냅샷 복사 기능을 사용 중지하여 클러스터 이름을 변경한 후 스냅샷 복사 기능을 다시 구성하여 사용하는 방법이 있습니다.

스냅샷 복사 권한의 구성 프로세스는 다음과 같습니다.

1. 대상 AWS 리전에서 다음과 같은 방법으로 스냅샷 복사 권한을 생성합니다.
   +  사용할 AWS KMS 키가 아직 없으면 생성합니다. AWS KMS 키 생성에 대한 자세한 내용은 *AWS Key Management Service Developer Guide*의 [Creating Keys](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)를 참조하세요.
   + 스냅샷 복사 권한 이름을 지정합니다. 이름은 AWS 계정이 속한 AWS 리전에서 고유해야 합니다.
   + 권한을 생성할 AWS KMS 키 ID를 지정합니다. 키 ID르르 지정하지 않으면 권한이 기본 키에 적용됩니다.

1. 원본 AWS 리전에서 스냅샷 복사 기능을 사용한 후 대상 AWS 리전에서 생성한 스냅샷 복사 권한 이름을 지정합니다.

위의 선행 프로세스는 AWS CLI, Amazon Redshift API 또는 SDK를 사용하여 스냅샷 복사 기능을 사용하는 경우에만 필요합니다. 콘솔을 사용하면 리전 간 스냅샷 복사 기능을 사용할 때 Amazon Redshift가 권한을 구성하기 위한 적절한 워크플로를 제공합니다. AWS KMS로 암호화된 클러스터에서 콘솔을 사용해 리전 간 스냅샷 복사 기능을 구성하는 방법에 대한 자세한 내용은 [AWS KMS 암호화 클러스터에 대한 리전 간 스냅샷 복사 구성](xregioncopy-kms-encrypted-snapshot.md) 단원을 참조하십시오.

스냅샷이 대상 AWS 리전에 복사되기 전에 Amazon Redshift는 원본 AWS 리전의 루트 키를 사용하여 스냅샷을 복호화하고 Amazon Redshift가 내부적으로 관리하는 무작위로 생성된 RSA 키를 사용하여 임시로 다시 암호화합니다. 그런 다음 Amazon Redshift는 보안 채널을 통해 대상 AWS 리전으로 스냅샷을 복사하고 내부 관리형 RSA 키를 사용하여 스냅샷을 복호화한 다음 대상 AWS 리전의 루트 키를 사용하여 스냅샷을 다시 암호화합니다.

## 하드웨어 보안 모듈을 사용한 암호화
<a name="working-with-HSM"></a>

키 관리에 AWS KMS를 사용하지 않는 경우에는 Amazon Redshift에서 하드웨어 보안 모듈(HSM)을 키 관리에 사용할 수 있습니다.

**중요**  
HSM 암호화는 DC2 및 RA3 노드 유형에 대해 지원되지 않습니다.

HSM이란 키 생성 및 관리를 직접 제어하는 디바이스를 말합니다. 이 디바이스들은 키 관리를 애플리케이션 및 데이터베이스 레이어와 분리함으로써 보안을 강화하는 역할을 합니다. Amazon Redshift는 키 관리를 위해 AWS CloudHSM Classic을 지원합니다. AWS KMS 대신 HSM을 사용하여 암호화 키를 관리할 때는 암호화 프로세스가 다릅니다.

**중요**  
Amazon Redshift는 AWS CloudHSM Classic만 지원합니다. 새로운 AWS CloudHSM 서비스는 지원되지 않습니다.  
AWS CloudHSM신규 고객은 Classic을 이용할 수 없습니다. 자세한 내용은 [CloudHSM Classic 요금](https://aws.amazon.com/cloudhsm/pricing-classic/)을 참조하세요. AWS CloudHSM Classic은 일부 AWS 리전에서는 사용할 수 없습니다. 사용 가능한 AWS 리전에 대한 자세한 내용은 [AWS 리전 표](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)를 참조하세요.

HSM을 사용하도록 클러스터를 구성하면 Amazon Redshift가 CEK로 사용할 키를 생성하여 저장하라는 요청을 HSM으로 보냅니다. 하지만 AWS KMS와 달리 HSM은 CEK를 Amazon Redshift로 내보내지 않습니다. 대신에 Amazon Redshift가 클러스터에서 무작위로 DEK를 생성한 후 CEK로 암호화할 수 있도록 HSM으로 전송합니다. HSM은 암호화된 DEK를 Amazon Redshift로 반환하며, 여기서 무작위로 생성된 내부 루트 키를 사용하여 추가로 암호화되고 클러스터와 별도의 네트워크에 있는 디스크에 내부적으로 저장됩니다. Amazon Redshift는 또한 DEK의 복호화된 버전을 클러스터의 메모리에 로드하므로 DEK를 사용하여 데이터 블록의 개별 키를 암호화하고 복호화할 수 있습니다.

클러스터가 재부팅되는 경우에는 Amazon Redshift가 내부 루트 키를 사용해 내부적으로 저장되어 있는 이중 암호화 DEK를 복호화하여 내부에 저장되어 있는 DEK를 CEK 암호화 상태로 반환합니다. 그런 다음 CEK 암호화 상태의 DEK가 HSM으로 전송되어 복호화된 후 다시 Amazon Redshift로 보내집니다. 여기에서 개별 데이터 블록 키에 사용할 수 있도록 다시 메모리에 로드됩니다.

### Amazon Redshift와 HSM 사이에 신뢰할 수 있는 연결 구성
<a name="configure-trusted-connection"></a>

클러스터 키 관리에 HSM을 사용하는 경우에는 Amazon Redshift와 HSM 사이에 신뢰할 수 있는 네트워크 연결을 구성해야 합니다. 이를 위해서는 클라이언트 및 서버 인증서의 구성이 필요합니다. 신뢰할 수 있는 연결은 암호화 및 복호화 작업 도중 HSM과 Amazon Redshift 사이에 암호화 키를 전송하는 데 사용됩니다.

Amazon Redshift는 무작위로 생성되는 비공개/공개 키 페어에서 퍼블릭 클라이언트 인증서를 생성합니다. 이 두 키는 암호화를 통해 내부에 저장됩니다. 퍼블릭 클라이언트 인증서는 다운로드하여 HSM에서 등록한 후 해당하는 HSM 파티션에 할당합니다.

Amazon Redshift에 HSM IP 주소, HSM 파티션 이름, HSM 파티션 암호 및 내부 루트 키를 사용하여 암호화된 퍼블릭 HSM 서버 인증서를 제공합니다. Amazon Redshift가 구성 프로세스를 완료하고 HSM에 연결할 수 있는지 확인합니다. 이때 연결이 되지 않으면 클러스터가 INCOMPATIBLE\$1HSM 상태로 바뀌면서 생성되지 않습니다. 이러한 경우에는 불완전한 클러스터를 삭제한 후 다시 시도해야 합니다.

**중요**  
클러스터를 수정하여 다른 HSM 파티션을 사용할 때는 Amazon Redshift가 새로운 파티션에 대한 연결 가능성을 확인하지만 유효한 암호화 키의 존재 유무까지 확인하지는 않습니다. 따라서 새로운 파티션을 사용하기 전에 반드시 암호화 키를 새로운 파티션으로 복제해야 합니다. 클러스터가 다시 시작될 때 Amazon Redshift가 유효한 키를 찾지 못하면 재시작이 중단됩니다. 자세한 내용은 [HSM에 키 복제](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cli-clone-hapg.html) 단원을 참조하십시오.

초기 구성 이후 Amazon Redshift가 HSM에 연결하지 못하면 이벤트가 기록됩니다. 이러한 이벤트에 대한 자세한 내용은 [Amazon Redshift 이벤트 알림](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-event-notifications.html)을 참조하세요.

## 키 교체 암호화
<a name="working-with-key-rotation"></a>

Amazon Redshift에서는 암호화된 클러스터에 대한 암호화 키를 교체할 수 있습니다. 키 교체 프로세스를 시작하면 Amazon Redshift가 지정된 클러스터와 클러스터의 자동 또는 수동 스냅샷에 대해 CEK를 교체합니다. Amazon Redshift는 지정된 클러스터에 대한 DEK도 교체하지만 스냅샷이 Amazon Simple Storage Service(Amazon S3)에 내부적으로 저장되고 기존 DEK를 사용하여 암호화되는 동안에는 스냅샷에 대한 DEK를 교체할 수 없습니다.

교체가 진행 중일 때는 클러스터가 ROTATING\$1KEYS 상태로 바뀌고, 교체가 끝나면 클러스터가 AVAILABLE 상태로 돌아옵니다. Amazon Redshift는 키 교체 프로세스 중에 복호화 및 재암호화를 처리합니다.

**참고**  
원본 클러스터가 없는 스냅샷에서는 키를 순환시키며 사용할 수 없습니다. 따라서 클러스터를 삭제하려면 먼저 스냅샷이 키 순환을 이용하는지 확인해야 합니다.

키 순환 프로세스에서는 클러스터를 잠시 사용할 수 없기 때문에 데이터 요건에 따라 필요하거나, 혹은 키의 손상 여부가 의심될 때만 가끔씩 키를 순환시켜야 합니다. 가장 좋은 방법은 저장되는 데이터 유형을 먼저 살펴본 후 이를 기준으로 데이터의 암호화 키 순환 주기를 계획하는 것입니다. 키 순환 주기는 기업의 데이터 보안 정책이나 민감한 데이터 및 규정 준수에 대한 업계 표준에 따라 달라질 수 있습니다. 하지만 보안 요건과 클러스터의 가용성의 밸런스를 맞춰서 계획을 세우는 것이 중요합니다.

키 교체에 대한 자세한 내용은 [암호화 키 교체](manage-key-rotation-console.md) 섹션을 참조하세요.

# 클러스터 암호화 변경
<a name="changing-cluster-encryption"></a>

AWS 소유 키 또는 고객 관리형 키를 사용하여 AWS Key Management Service(AWS KMS) 암호화를 사용하도록 암호화되지 않은 클러스터를 수정할 수 있습니다. AWS KMS 암호화를 사용하도록 클러스터를 수정하면 Amazon Redshift에서 암호화된 새 클러스터로 데이터를 자동으로 마이그레이션합니다. 또한 AWS Management Console이 아닌 AWS CLI를 통해 클러스터를 수정하여 암호화되지 않은 클러스터를 암호화된 클러스터로 마이그레이션할 수도 있습니다.

마이그레이션 작업 중에는 클러스터를 읽기 전용 모드로 사용할 수 있으며 클러스터 상태는 **크기 조정 중**으로 표시됩니다.

교차 AWS 리전 스냅샷 복사가 가능하도록 클러스터가 구성된 경우 암호화를 변경하기 전에 이 옵션을 사용 중지해야 합니다. 자세한 내용은 [다른 AWS 리전에 스냅샷 복사](cross-region-snapshot-copy.md) 및 [AWS KMS 암호화 클러스터에 대한 리전 간 스냅샷 복사 구성](xregioncopy-kms-encrypted-snapshot.md) 섹션을 참조하세요. 클러스터를 수정해 하드웨어 보안 모듈(HSM)을 활성화할 수는 없습니다. 대신에 새 HSM 암호화 클러스터를 생성해 데이터를 새 클러스터로 마이그레이션합니다. 자세한 내용은 [HSM 암호화 클러스터로 마이그레이션](migrating-to-an-encrypted-cluster.md) 섹션을 참조하세요.

------
#### [ Amazon Redshift console ]

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. 탐색 메뉴에서 **클러스터(Clusters)**를 선택한 후 암호화를 수정할 클러스터를 선택합니다.

1. **속성(Properties)**을 선택합니다.

1. [**데이터베이스 구성(Database configurations)**] 섹션에서 [**편집(Edit)**]을 선택하고 [**암호화 편집(Edit encryption)**]을 선택합니다.

1. 암호화 옵션 중 하나를 선택하고 [**변경 사항 저장(Save changes)**]을 선택합니다.

------
#### [ AWS CLI ]

AWS KMS를 사용하도록 암호화되지 않은 클러스터를 수정하려면 `modify-cluster` CLI 명령을 실행하고 다음에 표시된 것처럼 `–-encrypted`를 지정합니다. 기본적으로 기본 KMS 키가 사용됩니다. 고객 관리형 키를 지정하려면 `--kms-key-id` 옵션을 포함합니다.

```
aws redshift modify-cluster --cluster-identifier <value> --encrypted --kms-key-id <value>
```

클러스터에서 암호화를 제거하려면 다음 CLI 명령을 실행합니다.

```
aws redshift modify-cluster --cluster-identifier <value> --no-encrypted
```

------

# HSM 암호화 클러스터로 마이그레이션
<a name="migrating-to-an-encrypted-cluster"></a>

하드웨어 보안 모듈(HSM)로 암호화된 클러스터로 암호화되지 않은 클러스터를 마이그레이션하려면 암호화된 새 클러스터를 생성해 데이터를 새 클러스터로 이전합니다. 클러스터를 수정하여 HSM 암호화 클러스터로 마이그레이션할 수는 없습니다.

암호화되지 않은 클러스터에서 HSM 암호화 클러스터로 마이그레이션하려면 먼저 데이터를 기존 원본 클러스터에서 언로드합니다. 그런 다음 데이터를 선택한 암호화 설정과 함께 새로운 대상 클러스터에 다시 로드합니다. 암호화된 클러스터 시작에 대한 자세한 내용은 [Amazon Redshift 데이터베이스 암호화](working-with-db-encryption.md) 단원을 참조하십시오.

마이그레이션 프로세스에서 원본 클러스터는 마지막 단계까지 읽기 전용 쿼리에 사용할 수 있습니다. 마지막 단계는 대상 및 원본 클러스터의 이름을 변경하는 것입니다. 그러면 모든 트래픽이 새로운 대상 클러스터로 라우팅되도록 엔드포인트가 전환됩니다. 대상 클러스터는 이름 변경 이후 재부팅할 때까지 사용할 수 없습니다. 데이터가 전송되는 동안 원본 클러스터에서 모든 데이터 로드 및 기타 쓰기 작업을 일시 중지합니다.<a name="prepare-for-migration"></a>

**마이그레이션을 준비하려면**

1. Amazon Redshift와 상호 작용하는 종속 시스템(예: 비즈니스 인텔리전스(BI) 도구)을 모두 식별하여 시스템을 추출, 변환, 로드(ETL)합니다.

1. 마이그레이션을 테스트할 검증 쿼리를 식별합니다.

   예를 들어 다음 쿼리를 사용하여 사용자 정의 테이블의 수를 확인할 수 있습니다.

   ```
   select count(*)
   from pg_table_def
   where schemaname != 'pg_catalog';
   ```

   다음 쿼리는 모든 사용자 정의 테이블의 목록과 각 테이블의 행 수를 반환합니다.

   ```
   select "table", tbl_rows
   from svv_table_info;
   ```

1. 마이그레이션에 적합한 시간을 선택합니다. 클러스터 사용량이 가장 낮은 시간대를 찾으려면 CPU 사용량, 데이터베이스 연결 수와 같은 클러스터 지표를 모니터링합니다. 자세한 내용은 [클러스터 성능 데이터 보기](performance-metrics-perf.md) 섹션을 참조하세요.

1. 사용되지 않는 테이블을 삭제합니다.

   테이블 목록 및 각 테이블이 쿼리된 횟수를 생성하려면 다음 쿼리를 실행합니다.

   ```
   select database,
   schema,
   table_id,
   "table",
   round(size::float/(1024*1024)::float,2) as size,
   sortkey1,
   nvl(s.num_qs,0) num_qs
   from svv_table_info t
   left join (select tbl,
   perm_table_name,
   count(distinct query) num_qs
   from stl_scan s
   where s.userid > 1
   and   s.perm_table_name not in ('Internal worktable','S3')
   group by tbl,
   perm_table_name) s on s.tbl = t.table_id
   where t."schema" not in ('pg_internal');
   ```

1. 새로운 암호화된 클러스터를 시작합니다.

   원본 클러스터에 대상 클러스터와 동일한 포트 번호를 사용합니다. 암호화된 클러스터 시작에 대한 자세한 내용은 [Amazon Redshift 데이터베이스 암호화](working-with-db-encryption.md) 단원을 참조하십시오.

1. 언로드 및 로드 프로세스를 설정합니다.

   클러스터 간 데이터 마이그레이션에 [Amazon Redshift 언로드/복사 유틸리티](https://github.com/awslabs/amazon-redshift-utils/tree/master/src/UnloadCopyUtility)를 사용할 수 있습니다. 이 유틸리티는 원본 클러스터의 데이터를 Amazon S3 상의 한 위치로 내보냅니다. 데이터는 AWS KMS를 사용하여 암호화됩니다. 그런 다음 이 유틸리티가 자동으로 데이터를 대상으로 가져옵니다. 선택적으로, 마이그레이션 완료 후 유틸리티를 사용하여 Amazon S3를 정리할 수 있습니다.

1. 테스트를 실행하여 프로세스를 확인하고 쓰기 작업을 일시 중지해야 하는 시간을 추정합니다.

   언로드 및 로드 작업 도중 데이터 로드 및 기타 쓰기 작업을 일시 중지하여 데이터 일관성을 유지합니다. 가장 대규모 테이블 중 하나를 사용하여 언로드 및 로드 프로세스를 실행하면 시간을 추정하는 데 도움이 됩니다.

1. 스키마, 뷰, 테이블과 같은 데이터베이스 객체를 생성합니다. 간편하게 필요한 데이터 정의 언어(DDL) 문을 생성하려면 AWS GitHub 리포지토리의 [AdminViews](https://github.com/awslabs/amazon-redshift-utils/tree/master/src/AdminViews) 내 스크립트를 사용할 수 있습니다.<a name="migration-your-cluster"></a>

**클러스터를 마이그레이션하려면**

1. 원본 클러스터에서 모든 ETL 프로세스를 중단합니다.

   진행 중인 쓰기 작업이 없는지 확인하려면 Amazon Redshift 관리 콘솔을 사용하여 쓰기 IOPS를 모니터링합니다. 자세한 내용은 [클러스터 성능 데이터 보기](performance-metrics-perf.md) 섹션을 참조하세요.

1. 앞서 식별한 검증 쿼리를 실행하여 마이그레이션 전에 암호화된 원본 클러스터에 대한 정보를 수집합니다.

1. (선택 사항) 원본 및 대상 클러스터 모두에서 최대 가용 리소스를 사용하려면 워크로드 관리(WLM) 대기열을 하나 생성합니다. 예를 들어 `data_migrate`라는 이름의 대기열을 생성하고 메모리 95%, 동시성 4를 사용하여 대기열을 구성합니다. 자세한 내용은 *Amazon Redshift 데이터베이스 개발자 안내서*의 [사용자 그룹 및 쿼리 그룹에 따른 쿼리의 대기열 라우팅](https://docs.aws.amazon.com/redshift/latest/dg/tutorial-wlm-routing-queries-to-queues.html)을 참조하세요.

1. `data_migrate` 대기열을 사용하여 UnloadCopyUtility를 실행합니다.

   Amazon Redshift 콘솔을 사용하여 UNLOAD 및 COPY 프로세서를 모니터링합니다.

1. 검증 쿼리를 다시 실행하여 결과가 원본 클러스터의 결과와 일치하는지 확인합니다.

1. 원본 클러스터 및 대상 클러스터의 이름을 변경하여 엔드포인트를 스왑합니다. 중단을 방지하려면 업무 시간을 피해 이 작업을 수행하십시오.

1. 모든 SQL 클라이언트(예: ETL) 및 보고 도구를 사용하여 대상 클라이언트에 연결할 수 있는지 확인합니다.

1. 암호화되지 않은 원본 클러스터를 종료합니다.

# 암호화 키 교체
<a name="manage-key-rotation-console"></a>

다음 절차를 통해 Amazon Redshift 콘솔을 사용하여 암호화 키를 교체할 수 있습니다.

**클러스터의 암호화 키를 교체하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. 탐색 메뉴에서 **클러스터(Clusters)**를 선택한 후 암호화 키를 업데이트할 클러스터를 선택합니다.

1. **작업**에서 **Rotate encryption(암호화 교체)**을 선택하여 **암호화 키 교체** 페이지를 표시합니다.

1. **암호화 키 교체** 페이지에서 **암호화 키 교체**를 선택합니다.

# 전송 중 암호화
<a name="security-encryption-in-transit"></a>

전송 중 데이터의 기밀성과 무결성을 보호하도록 환경을 구성할 수 있습니다.

JDBC/ODBC를 통해 Amazon Redshift 클러스터와 SQL 클라이언트 간에 전송 중인 데이터의 암호화에는 다음 사항이 적용됩니다.
+ JDBC(Java Database Connectivity) 및 ODBC(Open Database Connectivity) 연결을 통해 SQL 클라이언트 도구에서 Amazon Redshift 클러스터로 연결할 수 있습니다.
+ Amazon Redshift는 데이터와 서버 인증서 암호화를 위한 보안 소켓 계층(SSL) 연결을 지원하여 클라이언트에서 연결할 서버 인증서를 검증합니다. 클라이언트는 Amazon Redshift 클러스터의 리더 노드에 연결됩니다. 자세한 내용은 [연결을 위한 보안 옵션 구성](connecting-ssl-support.md) 섹션을 참조하세요.
+ SSL 연결을 지원하기 위해 Amazon Redshift는 AWS Certificate Manager(ACM)가 발급한 인증서를 생성해 각 클러스터에 설치합니다. 자세한 내용은 [SSL 연결을 위해 ACM 인증서로 이전](connecting-transitioning-to-acm-certs.md) 섹션을 참조하세요.
+ AWS 클라우드 내에서 전송 중인 데이터를 보호하기 위해 Amazon Redshift는 COPY, UNLOAD, 백업 및 복원 작업을 위해 하드웨어 가속 SSL을 사용하여 Amazon S3 또는 Amazon DynamoDB와 통신합니다.

Amazon Redshift 클러스터와 Amazon S3 또는 DynamoDB 간에 전송 중인 데이터의 암호화에는 다음 사항이 적용됩니다.
+ Amazon Redshift는 하드웨어 가속화 SSL을 사용하여 COPY, UNLOAD, 백업 및 복원 작업을 위해 Amazon S3 또는 DynamoDB와 통신합니다.
+ Redshift Spectrum은 AWS Key Management Service(KMS)에서 관리되는 계정 기본 키를 사용한 Amazon S3 서버 측 암호화(SSE)를 지원합니다.
+ Amazon S3 및 AWS KMS로 Amazon Redshift 로드를 암호화할 수 있습니다. 자세한 내용은 [Amazon S3 및 AWS KMS로 Amazon Redshift 로드 암호화](https://aws.amazon.com/blogs/big-data/encrypt-your-amazon-redshift-loads-with-amazon-s3-and-aws-kms/)를 참조하세요.

AWS CLI, SDK 또는 API 클라이언트와 Amazon Redshift 엔드포인트 간에 전송 중인 데이터의 암호화와 서명에는 다음 사항이 적용됩니다.
+ Amazon Redshift는 전송 중인 데이터를 암호화하기 위한 HTTPS 엔드포인트를 제공합니다.
+ Amazon Redshift에 대한 API 요청의 무결성을 보호하려면 호출자가 API 호출에 서명해야 합니다. 호출은 서명 버전 4 서명 프로세스(Sigv4)에 따라 X.509 인증서 또는 고객의 AWS 비밀 액세스 키로 서명됩니다. 자세한 정보는 *AWS 일반 참조*의 [서명 버전 4 서명 프로세스](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)를 참조하세요.
+ AWS CLI 또는 AWS SDK 중 하나를 사용하여 AWS에 요청합니다. 이들 도구는 도구를 구성할 때 지정한 액세스 키를 사용하여 사용자의 요청에 자동으로 서명합니다.

Amazon Redshift 클러스터와 Amazon Redshift Query Editor V2 간에 전송 중인 데이터의 암호화에는 다음 사항이 적용됩니다.
+ 데이터는 TLS 암호화 채널을 통해 쿼리 편집기 v2와 Amazon Redshift 클러스터 간에 전송됩니다.

# Amazon Redshift를 사용한 VPC 암호화 제어
<a name="security-vpc-encryption-controls"></a>

Amazon Redshift는 리전의 VPC 내부 및 VPC 간 모든 트래픽에 대해 전송 중 암호화를 적용하는 데 도움이 되는 보안 기능인 [VPC 암호화 제어](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-encryption-controls.html)를 지원합니다. 이 문서에서는 Amazon Redshift 클러스터 및 서버리스 작업 그룹에서 VPC 암호화 제어를 사용하는 방법을 설명합니다.

VPC 암호화 제어는 중앙 집중식 제어를 제공하여 VPC 내에서 전송 중 암호화를 모니터링하고 적용합니다. 적용 모드에서 활성화하면 모든 네트워크 트래픽이 하드웨어 계층(AWS Nitro 시스템 사용) 또는 애플리케이션 계층(TLS/SSL 사용)에서 암호화됩니다.

Amazon Redshift는 VPC 암호화 제어와 통합되어 의료(HIPAA), 정부(FedRAMP) 및 금융(PCI DSS)과 같은 산업의 규정 준수 요구 사항을 충족하는 데 도움이 됩니다.

## Amazon Redshift로 VPC 암호화를 제어하는 방식
<a name="security-vpc-encryption-controls-sypnosis"></a>

VPC 암호화 제어는 다음 두 가지 모드로 작동합니다.
+ 모니터링 모드: 트래픽 흐름의 암호화 상태에 대한 가시성을 제공하고 암호화되지 않은 트래픽을 허용하는 리소스를 식별하는 데 도움이 됩니다.
+ 적용 모드: VPC 내에서 암호화되지 않은 트래픽을 허용하는 리소스의 생성 또는 사용을 방지합니다. 모든 트래픽은 하드웨어 계층(Nitro 기반 인스턴스) 또는 애플리케이션 계층(TLS/SSL)에서 암호화되어야 합니다.

## VPC 암호화 제어 사용 요구 사항
<a name="security-vpc-encryption-controls-requirements"></a>

**인스턴스 유형 요구 사항**

Amazon Redshift를 사용하려면 VPC 암호화 제어를 지원하는 Nitro 기반 인스턴스가 필요합니다. 모든 최신 Redshift 인스턴스 유형은 필요한 암호화 기능을 지원합니다.

**SSL/TLS 요구 사항**

적용 모드에서 VPC 암호화 제어가 활성화된 경우 require\$1ssl 파라미터를 true로 설정해야 하며 비활성화할 수 없습니다. 이렇게 하면 모든 클라이언트 연결이 암호화된 TLS 연결을 사용할 수 있습니다.

## VPC 암호화 제어로 마이그레이션
<a name="security-vpc-encryption-controls-migration"></a>

**기존 클러스터 및 작업 그룹의 경우**

기존 Redshift 클러스터 또는 서버리스 작업 그룹이 포함된 VPC에서는 적용 모드에서 VPC 암호화 제어를 활성화할 수 없습니다. 기존 클러스터 또는 작업 그룹이 있는 경우 암호화 제어를 사용하려면 다음 단계를 참조하세요.

1. 기존 클러스터 또는 네임스페이스의 스냅샷 생성

1. 적용 모드에서 VPC 암호화 제어가 활성화된 새 VPC 생성

1. 다음 작업 중 하나를 사용하여 스냅샷에서 새 VPC로 복원합니다.
   + 프로비저닝된 클러스터: `restore-from-cluster-snapshot` 작업 사용
   + 서버리스: 작업 그룹에서 `restore-from-snapshot` 작업 사용

**암호화 제어가 활성화된 VPC에서 새 클러스터 또는 작업 그룹을 생성할 때는 require\$1ssl 파라미터를 true로 설정해야 합니다.**

Amazon Redshift를 사용하려면 VPC 암호화 제어를 지원하는 Nitro 기반 인스턴스가 필요합니다. 모든 최신 Redshift 인스턴스 유형은 필요한 암호화 기능을 지원합니다.

**SSL/TLS 요구 사항**

적용 모드에서 VPC 암호화 제어가 활성화된 경우 require\$1ssl 파라미터를 true로 설정해야 하며 비활성화할 수 없습니다. 이렇게 하면 모든 클라이언트 연결이 암호화된 TLS 연결을 사용할 수 있습니다.

## 고려 사항 및 제한
<a name="security-vpc-encryption-controls-limitations"></a>

Amazon Redshift에서 VPC 암호화 제어를 사용할 때는 다음 사항을 고려하세요.

**VPC 상태 제한**
+ VPC 암호화 제어가 `enforce-in-progress` 상태이면 클러스터 및 작업 그룹 생성이 차단됩니다.
+ 새 리소스를 생성하려면 먼저 VPC가 `enforce` 모드가 될 때까지 기다려야 합니다.

**SSL 구성**
+ require\$1ssl 파라미터: 암호화가 적용된 VPC에서 생성된 클러스터 및 작업 그룹의 경우 항상 `true`여야 합니다.
+ 암호화가 적용된 VPC에서 클러스터 또는 작업 그룹이 생성되면 수명 동안 `require_ssl`을 비활성화할 수 없습니다.

**리전 가용성**

다음 리전에서는 Amazon Redshift Serverless의 적용 모드에서 이 기능을 사용할 수 없습니다.
+ 남아메리카(상파울루)
+ 유럽(취리히)

# 키 관리
<a name="security-key-management"></a>

키를 통해 데이터를 보호하도록 환경을 구성할 수 있습니다.
+ Amazon Redshift는 키 관리를 위해 AWS Key Management Service(AWS KMS)와 자동으로 통합됩니다. AWS KMS는 봉투 암호화를 사용합니다. 자세한 내용은 [봉투 암호화](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping)를 참조하십시오.
+ AWS KMS에서 암호화 키가 관리될 때 Amazon Redshift는 암호화를 위해 4단계 키 기반 아키텍처를 사용합니다. 이 아키텍처는 임의로 생성된 AES-256 데이터 암호화 키, 데이터베이스 키, 클러스터 키, 루트 키로 구성됩니다. 자세한 내용은 [Amazon Redshift가 AWS KMS를 사용하는 방법](https://docs.aws.amazon.com/kms/latest/developerguide/services-redshift.html)을 참조하세요.
+ AWS KMS에서 자체 고객 관리형 키를 생성할 수 있습니다. 자세한 내용은 [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)을 참조하십시오.
+ 새 AWS KMS keys에 대한 자체 키 구성 요소를 가져올 수도 있습니다. 자세한 내용은 [AWS Key Management Service(AWS KMS)에서 키 구성 요소 가져오기](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html)를 참조하세요.
+ Amazon Redshift는 외부 하드웨어 보안 모듈(HSM)에서 암호화 키 관리를 지원합니다. HSM은 온프레미스 모듈일 수도 있고, AWS CloudHSM일 수도 있습니다. HSM을 사용할 때는 클라이언트 및 서버 인증서를 통해 Amazon Redshift와 HSM 사이에 신뢰할 수 있는 연결을 구성해야 합니다. Amazon Redshift는 키 관리를 위해 AWS CloudHSM Classic만 지원합니다. 자세한 내용은 [하드웨어 보안 모듈을 사용한 암호화](working-with-db-encryption.md#working-with-HSM) 섹션을 참조하세요. AWS CloudHSM에 대한 자세한 내용은 [AWS CloudHSM이란 무엇입니까?](https://docs.aws.amazon.com/cloudhsm/latest/userguide/introduction.html)를 참조하세요.
+ 클러스터 암호화를 위해 암호화 키를 순환 사용할 수 있습니다. 자세한 내용은 [키 교체 암호화](working-with-db-encryption.md#working-with-key-rotation) 섹션을 참조하세요.

# 데이터 토큰화
<a name="data-tokenization"></a>

*토큰화*는 데이터 보안을 위해 실제 값을 불투명한 값으로 바꾸는 프로세스입니다. 보안에 민감한 애플리케이션은 토큰화로 개인 식별 정보(PII) 또는 보호 대상 건강 정보(PHI)와 같은 민감한 데이터를 토큰으로 대체하여 보안 위험을 줄입니다. *역토큰화*는 적절한 보안 정책을 사용하여 권한이 부여된 사용자에 대해 실제 값으로 토큰을 되돌립니다.

서드 파티 토큰화 서비스와의 통합을 위해 [AWS Lambda](https://aws.amazon.com/lambda/)를 사용하여 생성한 Amazon Redshift 사용자 정의 함수(UDF)를 사용할 수 있습니다. 자세한 내용은 *Amazon Redshift 데이터베이스 개발자 안내서*의 [Lambda 사용자 정의 함수](https://docs.aws.amazon.com/redshift/latest/dg/udf-creating-a-lambda-sql-udf.html)를 참조하세요. 예를 들어 [Protegrity](https://www.protegrity.com/how-we-work/partners/aws-data-protection)를 참조하세요.

Amazon Redshift는 REST API 또는 사전 정의된 엔드포인트를 통해 액세스되는 토큰화 서버에 토큰화 요청을 전송합니다. 2개 이상의 무료 Lambda 함수가 토큰화 및 역토큰화 요청을 처리합니다. 이 처리를 위해 서드 파티 토큰화 공급자가 제공하는 Lambda 함수를 사용할 수 있습니다. Amazon Redshift에서 Lambda UDF로 등록한 Lambda 함수를 사용할 수도 있습니다.

예를 들어 열에서 토큰화 또는 역토큰화 UDF를 호출하는 쿼리가 제출되었다고 가정합니다. Amazon Redshift 클러스터는 적용 가능한 인수 행을 스풀링하고 이러한 행을 일괄적으로 Lambda 함수에 병렬로 전송합니다. 클라이언트가 액세스할 수 없는 별도의 격리된 네트워크 연결에서 Amazon Redshift 컴퓨팅 노드와 Lambda 간에 데이터가 전송됩니다. Lambda 함수는 데이터를 토큰화 서버 엔드포인트로 전달합니다. 토큰화 서버는 필요에 따라 데이터를 토큰화하거나 역토큰화하여 반환합니다. 그런 다음 Lambda 함수는 필요한 경우 추가 처리를 위해 결과를 Amazon Redshift 클러스터로 전송한 다음 쿼리 결과를 반환합니다.

# Amazon Redshift에서 인터네트워크 트래픽 라우팅
<a name="network-isolation"></a>

알려진 사설 네트워크 경로를 통해 Amazon Redshift에서 트래픽을 라우팅할 수 있습니다. 이 페이지에서는 회사 네트워크에서 트래픽을 라우팅하는 방법과 동일한 AWS 리전의 리소스 간에 트래픽을 라우팅하는 방법을 다룹니다.

Amazon Redshift와 기업 네트워크의 클라이언트 및 애플리케이션 간에 트래픽을 라우팅하는 방법은 다음과 같습니다.
+ Virtual Private Cloud(VPC)와 회사 네트워크 간에 프라이빗 연결을 설정합니다. 인터넷을 통해 IPsec VPN 연결을 설정하거나 Direct Connect 연결을 사용하여 프라이빗 물리적 연결을 설정합니다. Direct Connect를 사용하여 온프레미스 네트워크에서 Amazon VPC로 직접 연결되는 프라이빗 가상 인터페이스를 설정함으로써 네트워크와 VPC 간에 고대역폭의 사설 네트워크 연결을 제공할 수 있습니다. 여러 개의 가상 인터페이스를 사용하면 네트워크 격리를 유지하면서 여러 VPC로 프라이빗 연결을 설정할 수 있습니다. 자세한 내용은 [AWS Site-to-Site VPN이란 무엇입니까?](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html) 및 [Direct Connect란 무엇입니까?](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)를 참조하세요.

VPC의 Amazon Redshift 클러스터와 같은 AWS 리전의 Amazon S3 버킷 간에 트래픽을 라우팅하는 방법은 다음과 같습니다.
+ ETL 로드 또는 언로드로부터 Amazon S3 데이터에 개인적으로 액세스할 수 있도록 Amazon S3 프라이빗 VPC 엔드포인트를 설정합니다. 자세한 내용은 [Amazon S3용 엔드포인트](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html)를 참조하세요.
+ Amazon Redshift 클러스터에 대한 “Enhanced VPC routing”을 사용하여 목표하는 Amazon S3 VPC 엔드포인트를 지정합니다. Amazon Redshift COPY, UNLOAD 또는 CREATE LIBRARY 명령을 통해 생성된 트래픽은 프라이빗 엔드포인트를 통해 라우팅됩니다. 자세한 내용은 [향상된 VPC 라우팅 켜기](enhanced-vpc-enabling-cluster.md) 섹션을 참조하세요.

# Amazon Redshift의 Identity and Access Management
<a name="redshift-iam-authentication-access-control"></a>

Amazon Redshift에 액세스하려면 AWS가 요청을 인증하는 데 사용할 수 있는 자격 증명이 필요합니다. 이 자격 증명에는 Amazon Redshift 클러스터와 같은 AWS 리소스에 액세스할 수 있는 권한이 있어야 합니다. 다음 섹션에서는 리소스에 액세스할 수 있는지 대상을 제어하여 리소스를 보호할 수 있도록 [AWS Identity and Access Management(IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 및 Amazon Redshift를 사용하는 방법에 대한 세부 정보를 제공합니다.
+ [ID를 사용한 인증](#security_iam_authentication)
+ [액세스 관리](#redshift-iam-accesscontrol)

**중요**  
이 주제에는 권한, ID 및 보안 액세스를 관리하기 위한 모범 사례 모음이 포함되어 있습니다. Amazon Redshift에서 IAM을 사용하기 위한 모범 사례를 숙지하는 것이 좋습니다. 여기에는 권한 적용을 위한 IAM 역할 사용이 포함됩니다. 이러한 섹션을 잘 이해하면 보다 안전한 Amazon Redshift 데이터 웨어하우스를 유지 관리하는 데 도움이 됩니다.

## ID를 사용한 인증
<a name="security_iam_authentication"></a>

인증은 ID 자격 증명을 사용하여 AWS에 로그인하는 방식입니다. AWS 계정 루트 사용자이나 IAM 사용자로, 또는 IAM 역할을 수임하여 인증(에 로그인)받아야 합니다.

AWS IAM Identity Center(IAM Identity Center), Single Sign-On 인증 또는 Google/Facebook 자격 증명과 같은 자격 증명 소스의 자격 증명을 사용하여 페더레이션 ID로 로그인할 수 있습니다. 로그인하는 방법에 대한 자세한 내용은 *AWS Sign-In사용 설명서*의 [AWS 계정에 로그인하는 방법](https://docs.aws.amazon.com/signin/latest/userguide/how-to-sign-in.html) 섹션을 참조하세요.

프로그래밍 방식 액세스를 위해 AWS는 요청에 암호화 방식으로 서명할 수 있는 SDK 및 CLI를 제공합니다. 자세한 내용은 *IAM 사용 설명서*의 [API 요청용 AWS Signature Version 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) 섹션을 참조하세요.

### AWS 계정 루트 사용자
<a name="security_iam_authentication-rootuser"></a>

 AWS 계정을 생성하는 경우에는 모든 AWS 서비스 서비스와 리소스에 대한 완전한 액세스 권한이 있는 AWS 계정 *루트 사용자*라는 단일 로그인 ID로 시작합니다. 일상적인 태스크에 루트 사용자를 사용하지 않을 것을 강력히 권장합니다. 루트 사용자가 필요한 작업 목록은 *IAM 사용자 설명서*의 [루트 사용자 자격 증명이 필요한 작업](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)을 참조하세요.

### IAM 사용자 및 그룹
<a name="security_iam_authentication-iamuser"></a>

*[IAM 사용자](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)*는 단일 개인 또는 애플리케이션에 대한 특정 권한을 가진 ID입니다. 장기 자격 증명이 있는 IAM 사용자 대신 임시 자격 증명을 사용하는 것이 좋습니다. 자세한 내용은 *IAM 사용 설명서*에서 [임시 자격 증명을 사용하여 AWS에 액세스하려면 인간 사용자가 ID 제공업체와의 페더레이션을 사용하도록 요구](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#bp-users-federation-idp)를 참조하세요.

[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)은 IAM 사용자 모음을 지정하고 대규모 사용자 집합에 대한 관리 권한을 더 쉽게 만듭니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 사용자 사용 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/gs-identities-iam-users.html) 섹션을 참조하세요.

### IAM 역할
<a name="security_iam_authentication-iamrole"></a>

*[IAM 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)*은 임시 자격 증명을 제공하는 특정 권한이 있는 자격 증명입니다. [사용자에서 IAM 역할(콘솔)로 전환](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)하거나 AWS CLI 또는 AWS API 작업을 직접적으로 호출하여 역할을 수임할 수 있습니다. 자세한 내용은 *IAM 사용 설명서*의 [역할 수임 방법](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)을 참조하세요.

IAM 역할은 페더레이션 사용자 액세스, 임시 IAM 사용자 권한, 교차 계정 액세스, 교차 서비스 액세스 및 Amazon EC2에서 실행되는 애플리케이션에 유용합니다. 자세한 내용은 *IAM 사용 설명서*의 [교차 계정 리소스 액세스](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)를 참조하세요.

**참고**  
Redshift의 액세스 전달 세션(FAS)은 12시간 동안만 유효합니다. 이 기간이 지나면 다른 서비스와 통합하기 위해 FAS를 사용하는 모든 연결 세션은 다시 설정해야 합니다.

# 교차 서비스 혼동된 대리인 방지
<a name="cross-service-confused-deputy-prevention"></a>

혼동된 대리자 문제는 작업을 수행할 권한이 없는 엔터티가 권한이 더 많은 엔터티에게 작업을 수행하도록 강요할 수 있는 보안 문제입니다. AWS에서는 교차 서비스 가장으로 인해 혼동된 대리자 문제가 발생할 수 있습니다. 교차 서비스 가장은 한 서비스(*직접 호출하는 서비스*)가 다른 서비스(*직접 호출되는 서비스*)를 직접 호출할 때 발생할 수 있습니다. 직접 호출하는 서비스는 다른 고객의 리소스에 대해 액세스 권한이 없는 방식으로 작동하게 권한을 사용하도록 조작될 수 있습니다. 이를 방지하기 위해 AWS에서는 계정의 리소스에 대한 액세스 권한이 부여된 서비스 위탁자를 사용하여 모든 서비스에 대한 데이터를 보호하는 데 도움이 되는 도구를 제공합니다. 자세한 내용은 *IAM 사용 설명서*의 [서비스 간 혼동된 대리자 방지](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html#cross-service-confused-deputy-prevention)를 참조하세요.

Amazon Redshift가 리소스에 다른 서비스를 제공하는 권한을 제한하려면 리소스 기반 정책에서 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 및 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 글로벌 조건 컨텍스트 키를 사용하는 것이 좋습니다. 만약 `aws:SourceArn` 값에 Amazon S3 버킷 ARN과 같은 계정 ID가 포함되어 있지 않은 경우 권한을 제한하려면 두 전역 조건 컨텍스트 키를 모두 사용해야 합니다. 두 전역 조건 컨텍스트 키와 계정을 포함한 `aws:SourceArn` 값을 모두 사용하는 경우, `aws:SourceAccount` 값 및 `aws:SourceArn` 값의 계정은 동일한 정책 명령문에서 사용할 경우 반드시 동일한 계정 ID를 사용해야 합니다.

다음 예제에서는 Amazon Redshift의 혼동된 대리자 문제를 제한하기 위해 적용할 수 있는 정책을 보여줍니다.

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": {
    "Sid": "ConfusedDeputyPreventionForRedshift",
    "Effect": "Allow",
    "Principal": {
      "Service": "redshift.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {
      "ArnLike": {
        "aws:SourceArn": "arn:aws:redshift:us-east-1:123456789012:cluster:my-cluster"
      },
      "StringEquals": {
        "aws:SourceAccount": "123456789012"
      }
    }
  }
}
```

## 액세스 관리
<a name="redshift-iam-accesscontrol"></a>

요청을 인증하는 데 유효한 자격 증명이 있더라도 권한이 없다면 Amazon Redshift 리소스를 생성하거나 액세스할 수 없습니다. 예를 들어 Amazon Redshift 클러스터를 생성하거나, 스냅샷을 생성하거나, 이벤트 구독을 추가할 수 있는 권한이 있어야 합니다.

다음 섹션에서는 Amazon Redshift에 대한 권한을 관리하는 방법을 설명합니다. 먼저 개요를 읽어보면 도움이 됩니다.
+ [Amazon Redshift 리소스에 대한 액세스 권한 관리 개요](redshift-iam-access-control-overview.md)
+  [Amazon Redshift에 대한 자격 증명 기반 정책(IAM 정책) 사용](redshift-iam-access-control-identity-based.md) 

# Amazon Redshift 리소스에 대한 액세스 권한 관리 개요
<a name="redshift-iam-access-control-overview"></a>

모든 AWS 리소스는 AWS 계정의 소유이고 리소스 생성 또는 액세스 권한은 권한 정책에 따라 결정됩니다. 계정 관리자는 IAM ID(즉, 사용자, 그룹, 역할)에 권한 정책을 연결할 수 있고, 일부 서비스(예: AWS Lambda)에서는 리소스에 대한 권한 정책 연결도 지원합니다.

**참고**  
*계정 관리자* 또는 관리자 사용자는 관리자 권한이 있는 사용자입니다. 자세한 내용은 *IAM 사용 설명서*의 [IAM 모범 사례](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)를 참조하세요.

권한을 부여하려면 권한을 부여 받을 사용자, 권한 대상이 되는 리소스, 해당 리소스에 허용되는 특정 작업을 결정합니다.

## Amazon Redshift 리소스 및 작업
<a name="redshift-iam-accesscontrol.actions-and-resources"></a>

Amazon Redshif에서는 IAM 권한 정책에 사용할 수 있는 서비스별 리소스, 작업 및 조건 컨텍스트 키를 제공합니다.

### Amazon Redshift, Amazon Redshift Serverless, Amazon Redshift Data API 및 Amazon Redshift 쿼리 에디터 v2 액세스 권한
<a name="redshift-policy-resources.resource-permissions"></a>

[액세스 관리](redshift-iam-authentication-access-control.md#redshift-iam-accesscontrol)을 설정하면 IAM 자격 증명에 연결할 수 있는 권한 정책(자격 증명 기반 정책)을 작성할 수 있습니다. 자세한 참조 정보는 *서비스 권한 부여 참조*의 다음 주제를 참조하세요.
+ Amazon Redshift의 경우 `redshift:` 접두사를 사용하며 [Amazon Redshift에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html)를 참조하세요.
+ Amazon Redshift Serverless의 경우 `redshift-serverless:` 접두사를 사용하며 [Amazon Redshift Serverless에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftserverless.html)를 참조하세요.
+ Amazon Redshift Data API의 경우 `redshift-data:` 접두사를 사용하며 [Amazon Redshift Data API에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshiftdataapi.html)를 참조하세요.
+ Amazon Redshift 쿼리 에디터 v2의 경우 `sqlworkbench:` 접두사를 사용하며 [AWS SQL Workbench(Amazon Redshift 쿼리 에디터 v2)에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssqlworkbench.html)를 참조하세요.

  쿼리 에디터 v2에는 API 작업에 직접 해당하지 않는 권한 전용 작업이 포함되어 있습니다. 이러한 작업은 *서비스 승인 참조*에 `[permission only]`로 나와 있습니다.

*서비스 승인 참조*에는 IAM 정책에서 사용할 수 있는 API 작업에 대한 정보가 포함되어 있습니다. 또한 권한을 부여할 수 있는 AWS 리소스와 세분화된 액세스 제어에 포함할 수 있는 조건 키가 포함되어 있습니다. 조건에 대한 자세한 내용은 [IAM 정책 조건을 사용하여 세분화된 액세스 제어 구현](#redshift-policy-resources.conditions) 섹션을 참조하세요.

정책의 `Action` 필드에서 작업을 지정하고, `Resource` 필드에서 리소스 값을 지정하고, `Condition` 필드에서 조건을 지정합니다. Amazon Redshift에 대한 작업을 지정하려면 `redshift:` 접두사 다음에 API 작업 이름을 사용합니다(예: `redshift:CreateCluster`).

## 리소스 소유권 이해
<a name="redshift-iam-access-control-resource-ownership"></a>

*리소스 소유자*는 리소스를 만든 AWS계정입니다. 즉, 리소스 소유자는 리소스를 생성하는 요청을 인증하는 AWS보안 주체 엔터티(루트 계정, IAM 사용자 또는 IAM 역할)의 * 계정입니다.* 다음 예제에서는 이러한 작동 방법을 설명합니다.
+ AWS 계정의 루트 계정 자격 증명을 사용하여 DB 클러스터를 생성하는 경우, AWS 계정이 Amazon Redshift 리소스 소유자가 됩니다.
+ AWS 계정에서 Amazon Redshift 리소스를 생성할 권한이 있는 IAM 역할을 만드는 경우, 해당 역할을 담당할 수 있는 사람은 누구나 Amazon Redshift 리소스를 생성할 수 있습니다. 이 경우 역할이 속한 AWS 계정이 Amazon Redshift 리소스를 소유합니다.
+ AWS 계정에서 IAM 사용자를 생성하고 Amazon Redshift 리소스 생성 권한을 부여하면 해당 사용자는 Amazon Redshift 리소스를 생성할 수 있습니다. 하지만 해당 사용자가 속한 AWS 계정이 Amazon Redshift 리소스를 소유합니다. 대부분의 경우 이 방법은 권장되지 않습니다. IAM 역할을 생성하고 역할에 권한을 연결한 다음 사용자에게 역할을 할당하는 것이 좋습니다.

## 리소스 액세스 관리
<a name="redshift-iam-accesscontrol-managingaccess"></a>

*권한 정책*은 누가 무엇에 액세스 할 수 있는지를 나타냅니다. 다음 섹션에서는 권한 정책을 만드는 데 사용 가능한 옵션에 대해 설명합니다.

**참고**  
이 섹션에서는 Amazon Redshift의 맥락에서 IAM을 사용하는 방법에 대해 설명하며, IAM 서비스에 대한 자세한 내용은 다루지 않습니다. IAM 설명서 전체 내용은 *IAM 사용 설명서*의 [IAM이란 무엇입니까?](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)를 참조하세요. IAM 정책 구문과 설명에 대한 자세한 내용은 [IAM User Guide](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)의 *AWS IAM policy reference* 섹션을 참조하세요.

IAM 자격 증명에 연결된 정책을 *자격 증명 기반 정책*(IAM 정책)이라 하고, 리소스에 연결된 정책을 *리소스 기반 정책*이라고 합니다. Amazon Redshift는 자격 증명 기반 정책(IAM 정책)만 지원합니다.

### 자격 증명 기반 정책(IAM 정책)
<a name="redshift-iam-manage-access-identity-based"></a>

정책을 IAM 역할에 연결한 다음 해당 역할을 사용자 또는 그룹에 할당하여 권한을 할당할 수 있습니다. 다음은 사용자에게 AWS 계정의 Amazon Redshift 클러스터를 생성, 삭제, 수정 및 재부팅하도록 허용하는 권한을 포함한 예시 정책입니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowManageClusters",
      "Effect":"Allow",
      "Action": [
        "redshift:CreateCluster",
        "redshift:DeleteCluster",
        "redshift:ModifyCluster",
        "redshift:RebootCluster"
      ],
      "Resource":"*"
    }
  ]
}
```

------

Amazon Redshift에서 자격 증명 기반 정책 사용에 대한 자세한 내용은 [Amazon Redshift에 대한 자격 증명 기반 정책(IAM 정책) 사용](redshift-iam-access-control-identity-based.md) 섹션을 참조하세요. 사용자, 그룹, 역할 및 권한에 대한 자세한 내용은 *IAM User Guide*의 [Identities (users, groups, and roles)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html)를 참조하세요.

### 리소스 기반 정책
<a name="redshift-iam-access-control-resource-based"></a>

Amazon S3과 같은 다른 서비스도 리소스 기반 권한 정책을 지원합니다. 예를 들어, 정책을 S3 버킷에 연결하여 해당 버킷에 대한 액세스 권한을 관리할 수 있습니다. Amazon Redshift에서는 리소스 기반 정책을 지원하지 않습니다.

## 정책 요소 지정: 작업, 효과, 리소스, 보안 주체
<a name="redshift-iam-access-control-specify-actions"></a>

각 Amazon Redshift 리소스([Amazon Redshift 리소스 및 작업](#redshift-iam-accesscontrol.actions-and-resources) 참조)에 대해 서비스는 API 작업을 정의합니다([작업](https://docs.aws.amazon.com/redshift/latest/APIReference/API_Operations.html) 참조). 이러한 API 작업에 대한 권한을 부여하기 위해 Amazon Redshift에서는 정책에서 지정할 수 있는 작업을 정의합니다. API 작업을 실시하려면 둘 이상의 작업에 대한 권한이 필요할 수 있습니다.

다음은 기본 정책 요소입니다.
+ **리소스** – 정책에서 Amazon 리소스 이름(ARN)을 사용하여 정책을 적용할 리소스를 식별합니다. 자세한 내용은 [Amazon Redshift 리소스 및 작업](#redshift-iam-accesscontrol.actions-and-resources) 섹션을 참조하세요.
+ **작업** – 작업 키워드를 사용하여 허용 또는 거부할 리소스 작업을 식별합니다. 예를 들어 `redshift:DescribeClusters` 권한은 사용자에게 Amazon Redshift `DescribeClusters` 작업 수행 권한을 허용합니다.
+ **결과** – 사용자가 특정 작업을 요청하는 경우의 결과를 지정합니다. 이는 허용 또는 거부 중에 하나가 될 수 있습니다. 명시적으로 리소스에 대한 액세스 권한을 부여(허용)하지 않는 경우, 액세스는 묵시적으로 거부됩니다. 다른 정책에서 액세스 권한을 부여하는 경우라도 사용자가 해당 리소스에 액세스할 수 없도록 하기 위해 리소스에 대한 액세스 권한을 명시적으로 거부할 수도 있습니다.
+ **보안 주체** – ID 기반 정책(IAM 정책)에서 정책이 연결되는 사용자는 암시적인 보안 주체입니다. 리소스 기반 정책의 경우, 사용자, 계정, 서비스 또는 권한의 수신자인 기타 개체를 지정합니다(리소스 기반 정책에만 해당). Amazon Redshift에서는 리소스 기반 정책을 지원하지 않습니다.

IAM 정책 구문과 설명에 대한 자세한 내용은 *IAM User Guide*의 [AWS IAM policy reference](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)를 참조하세요.

모든 Amazon Redshift API 작업과 해당 작업이 적용되는 리소스를 보여주는 표는 [Amazon Redshift, Amazon Redshift Serverless, Amazon Redshift Data API 및 Amazon Redshift 쿼리 에디터 v2 액세스 권한](#redshift-policy-resources.resource-permissions) 섹션을 참조하세요.



## 정책에서 조건 지정
<a name="redshift-policy-resources.specifying-conditions"></a>

권한을 부여할 때 액세스 정책 언어를 사용하여 조건이 적용되는 조건을 지정할 수 있습니다. 예를 들어, 특정 날짜 이후에만 정책을 적용할 수 있습니다. 액세스 정책 언어에서 조건 지정에 대한 자세한 내용은 *IAM User Guide*의 [IAM JSON policy elements: Condition](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)을 참조하세요.

권한 정책이 적용되는 조건을 식별하려면 `Condition` 요소를 IAM 권한 정책에 포함시킵니다. 예를 들어, 사용자가 `redshift:CreateCluster` 작업을 사용하여 DB 인스턴스를 만들 수 있도록 허용하는 정책을 만들 수 있으며 `Condition` 요소를 추가하여 해당 사용자가 MySQL 데이터베이스 엔진을 사용하여 DB 인스턴스만 만들 수 있도록 제한할 수 있습니다. 자세한 내용은 [IAM 정책 조건을 사용하여 세분화된 액세스 제어 구현](#redshift-policy-resources.conditions)을 참조하세요. 모든 조건 키 값과 이 값이 적용되는 Amazon Redshift 작업 및 리소스를 보여주는 목록은 [Amazon Redshift, Amazon Redshift Serverless, Amazon Redshift Data API 및 Amazon Redshift 쿼리 에디터 v2 액세스 권한](#redshift-policy-resources.resource-permissions) 섹션을 참조하세요.

### IAM 정책 조건을 사용하여 세분화된 액세스 제어 구현
<a name="redshift-policy-resources.conditions"></a>

Amazon Redshift에서는 리소스 태그에 따라 조건 키를 사용하여 리소스에 대한 액세스를 제한할 수 있습니다. 다음은 공통의 Amazon Redshift 조건 키입니다.


| 조건 키 | 설명 | 
| --- | --- | 
| `aws:RequestTag` | 사용자에게 리소스를 생성할 때마다 태그 키(이름)와 값을 추가하도록 요구합니다. 자세한 내용은 *IAM User Guide*의 [aws:RequestTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)를 참조하세요. | 
| `aws:ResourceTag` | 특정 태그 키 및 값에 따라 리소스에 대한 사용자 액세스를 제한합니다. 자세한 내용은 *IAM User Guide*의 [aws:ResourceTag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag)를 참조하세요. | 
| `aws:TagKeys` | 이 키를 사용하여 요청의 태그 키를 정책에서 지정한 키와 비교합니다. 자세한 내용은 *IAM User Guide*의 [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys)를 참조하세요. | 

태그를 생성하는 방법에 대한 자세한 내용은 [Amazon Redshift에서 리소스 태그](amazon-redshift-tagging.md) 섹션을 참조하세요.

`redshift:RequestTag` 및 `redshift:ResourceTag` 조건 키를 지원하는 API 작업 목록은 [Amazon Redshift, Amazon Redshift Serverless, Amazon Redshift Data API 및 Amazon Redshift 쿼리 에디터 v2 액세스 권한](#redshift-policy-resources.resource-permissions) 섹션을 참조하세요.

다음 조건 키는 Amazon Redshift GetClusterCredentials 작업과 함께 사용할 수 있습니다.


| 조건 키 | 설명 | 
| --- | --- | 
| `redshift:DurationSeconds` | 기간에 대해 지정할 수 있는 시간(초)을 제한합니다. | 
| `redshift:DbName` | 지정할 수 있는 데이터베이스 이름을 제한합니다. | 
| `redshift:DbUser` | 지정할 수 있는 데이터베이스 사용자 이름을 제한합니다. | 

#### 예 1: aws:ResourceTag 조건 키를 사용한 액세스 제한
<a name="redshift-policy-resources.resource-permissions-example1"></a>

다음 IAM 정책을 사용하여 `us-west-2` 리전에서 이름이 `environment`인 태그와 값이 `test`인 태그가 있는 특정 AWS 계정에 한해 사용자에게 Amazon Redshift 클러스터를 수정하도록 허용할 수 있습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid":"AllowModifyTestCluster",
        "Effect": "Allow",
        "Action": "redshift:ModifyCluster",
        "Resource": "arn:aws:redshift:us-west-2:123456789012:cluster:*",
        "Condition": {
            "StringEquals": {
                "aws:ResourceTag/environment": "test"
            }
        }
    }
}
```

------

#### 예 2: aws:RequestTag 조건 키를 사용한 액세스 제한
<a name="redshift-policy-resources.resource-permissions-example2"></a>

다음 IAM 정책을 사용하여 클러스터 생성 명령에 이름이 `usage`인 태그와 값이 `production`인 태그를 추가한 경우에 한해 사용자에게 Amazon Redshift 클러스터를 생성하도록 허용할 수 있습니다. `aws:TagKeys` 및 `ForAllValues` 한정자가 있는 조건은 요청에서 `costcenter` 및 `usage` 키만 지정할 수 있도록 지정합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
        "Sid":"AllowCreateProductionCluster",
        "Effect": "Allow",
        "Action": [
            "redshift:CreateCluster",
            "redshift:CreateTags"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:RequestTag/usage": "production"
            },
            "ForAllValues:StringEquals": {
                "aws:TagKeys": [
                    "costcenter",
                    "usage"
                ]
            }
        }
    }
}
```

------

# Amazon Redshift에 대한 자격 증명 기반 정책(IAM 정책) 사용
<a name="redshift-iam-access-control-identity-based"></a>

이 주제에서는 계정 관리자가 IAM ID(사용자, 그룹, 역할)에 권한 정책을 연결할 수 있는 ID 기반 정책의 예제를 제공합니다.

**중요**  
Amazon Redshift 리소스에 대한 액세스 관리를 위해 제공되는 기본 개념과 옵션 설명에 대한 소개 주제 부분을 먼저 읽어 보는 것이 좋습니다. 자세한 내용은 [Amazon Redshift 리소스에 대한 액세스 권한 관리 개요](redshift-iam-access-control-overview.md) 섹션을 참조하세요.

다음은 권한 정책의 예입니다. 이 정책은 사용자에게 모든 클러스터를 생성, 삭제, 수정 및 재부팅할 수 있도록 허용한 후 AWS 리전 `us-west-2` 및 AWS 계정 `123456789012`에서 클러스터 식별자가 `production`으로 시작되는 모든 클러스터를 삭제 또는 수정하는 권한을 거부합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowClusterManagement",
      "Action": [
        "redshift:CreateCluster",
        "redshift:DeleteCluster",
        "redshift:ModifyCluster",
        "redshift:RebootCluster"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"DenyDeleteModifyProtected",
      "Action": [
        "redshift:DeleteCluster",
        "redshift:ModifyCluster"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:cluster:production*"
      ],
      "Effect": "Deny"
    }
  ]
}
```

------

이 정책에는 두 명령문이 있습니다: 
+ 첫 번째 문은 사용자에게 클러스터를 생성, 삭제, 수정 및 재부팅할 수 있는 권한을 부여합니다. 여기에서 와일드카드 문자(\$1)를 `Resource` 값으로 지정하면 루트 AWS 계정에 속한 모든 Amazon Redshift 리소스에게 정책이 적용됩니다.
+ 두 번째 문은 클러스터의 삭제 또는 수정 권한을 거부합니다. 여기에서는 와일드카드 문자(\$1)가 포함된 `Resource` 값에 클러스터 Amazon 리소스 이름(ARN)을 지정합니다. 그러면 루트 AWS 계정에서 클러스터 식별자가 `production`으로 시작하는 모든 Amazon Redshift 클러스터에 이 문이 적용됩니다.

## Amazon Redshift에 대한 AWS 관리형 정책
<a name="redshift-policy-resources.managed-policies"></a>

AWS는 AWS에서 생성하고 관리하는 독립형 IAM 정책을 제공하여 많은 일반 사용 사례를 처리합니다. 관리형 정책은 필요한 권한을 사용자가 조사할 필요가 없도록 일반 사용 사례에 필요한 권한을 부여합니다. 자세한 내용은 *IAM User Guide*의 [AWS managed policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)를 참조하세요.

Amazon Redshift API 작업 및 리소스에 대한 권한을 허용하는 고유의 사용자 정의 IAM 정책을 생성할 수도 있습니다. 해당 권한이 필요한 IAM 역할 또는 그룹에 이러한 사용자 지정 정책을 연결할 수 있습니다.

다음 섹션에서는 계정의 사용자에게 연결할 수 있고 Amazon Redshift에 고유한 AWS 관리형 정책입니다.

## AWS 관리형 정책에 대한 Amazon Redshift 업데이트
<a name="security-iam-awsmanpol-updates"></a>



이 서비스가 이러한 변경 내용을 추적하기 시작한 이후부터 Amazon Redshift의 AWS 관리형 정책 업데이트에 대한 세부 정보를 봅니다. 이 페이지의 변경 사항에 대한 자동 알림을 받아보려면 Amazon Redshift 문서 기록 페이지에서 RSS 피드를 구독하세요.




| 변경 | 설명 | 날짜 | 
| --- | --- | --- | 
|  [AmazonRedshiftFederatedAuthorization](#redshift-policy-managed-policies-federated-authorization) - 새 정책  |   Amazon Redshift 페더레이션 권한 부여를 사용하여 쿼리를 실행하기 위한 새로운 간편 사용 정책 정책이 Amazon Redshift에 추가되었습니다.  | 2025년 11월 21일 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) - 기존 정책 업데이트  |   관리형 정책에 작업 `lakeformation:GetDataAccess`의 권한이 추가됩니다. 이를 추가하면 AWS Lake Formation에서 페더레이션된 카탈로그 정보를 가져올 수 있는 권한이 부여됩니다. `glue:GetCatalog` 및 `glue:GetCatalogs` 작업에 대한 추가 조건이 관리형 정책에 추가됩니다.  | 2025년 3월 13일 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) - 기존 정책 업데이트  |   `glue:GetCatalog` 및 `glue:GetCatalogs` 작업에 대한 권한이 관리형 정책에 추가됩니다. 이를 추가하면 AWS Glue에서 카탈로그 정보를 가져올 수 있는 권한이 부여됩니다.  | 2024년 12월 3일 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) - 기존 정책 업데이트  |  관리형 정책에 작업 `servicequotas:GetServiceQuota`의 권한이 추가됩니다. 이렇게 하면 할당량 또는 제한에 액세스할 수 있는 권한이 부여됩니다.  | 2024년 3월 8일 | 
|  [AmazonRedshiftQueryEditorV2FullAccess](#redshift-policy-managed-policies-query-editor-V2) - 기존 정책 업데이트  |  `redshift-serverless:ListNamespaces` 및 `redshift-serverless:ListWorkgroups` 작업에 대한 권한이 관리형 정책에 추가됩니다. 추가하면 Amazon Redshift 데이터 웨어하우스의 서버리스 네임스페이스와 서버리스 작업 그룹을 나열할 권한이 부여됩니다.  | 2024년 2월 21일 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) - 기존 정책 업데이트  |  `redshift-serverless:ListNamespaces` 및 `redshift-serverless:ListWorkgroups` 작업에 대한 권한이 관리형 정책에 추가됩니다. 추가하면 Amazon Redshift 데이터 웨어하우스의 서버리스 네임스페이스와 서버리스 작업 그룹을 나열할 권한이 부여됩니다.  | 2024년 2월 21일 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) - 기존 정책 업데이트  |  `redshift-serverless:ListNamespaces` 및 `redshift-serverless:ListWorkgroups` 작업에 대한 권한이 관리형 정책에 추가됩니다. 추가하면 Amazon Redshift 데이터 웨어하우스의 서버리스 네임스페이스와 서버리스 작업 그룹을 나열할 권한이 부여됩니다.  | 2024년 2월 21일 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) - 기존 정책 업데이트  |  `redshift-serverless:ListNamespaces` 및 `redshift-serverless:ListWorkgroups` 작업에 대한 권한이 관리형 정책에 추가됩니다. 추가하면 Amazon Redshift 데이터 웨어하우스의 서버리스 네임스페이스와 서버리스 작업 그룹을 나열할 권한이 부여됩니다.  | 2024년 2월 21일 | 
|  [AmazonRedshiftReadOnlyAccess](#redshift-policy-managed-policies-read-only) - 기존 정책 업데이트  |  관리형 정책에 작업 `redshift:ListRecommendations`의 권한이 추가됩니다. 이렇게 하면 Amazon Redshift Advisor 권장 사항을 나열할 수 있는 권한이 부여됩니다.  | 2024년 2월 7일 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) - 기존 정책 업데이트  |  `ec2:AssignIpv6Addresses` 및 `ec2:UnassignIpv6Addresses` 작업에 대한 권한이 관리형 정책에 추가됩니다. 추가하면 IP 주소를 할당하고 할당 취소할 수 있는 권한이 부여됩니다.  | 2023년 10월 31일 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) - 기존 정책 업데이트  |  `sqlworkbench:GetAutocompletionMetadata` 및 `sqlworkbench:GetAutocompletionResource` 작업에 대한 권한이 관리형 정책에 추가됩니다. 이 기능을 추가하면 쿼리를 편집하는 동안 SQL 자동 완성을 위한 데이터베이스 정보를 생성하고 검색할 수 있는 권한이 부여됩니다.  | 2023년 8월 16일 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) - 기존 정책 업데이트  |  `sqlworkbench:GetAutocompletionMetadata` 및 `sqlworkbench:GetAutocompletionResource` 작업에 대한 권한이 관리형 정책에 추가됩니다. 이 기능을 추가하면 쿼리를 편집하는 동안 SQL 자동 완성을 위한 데이터베이스 정보를 생성하고 검색할 수 있는 권한이 부여됩니다.  | 2023년 8월 16일 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) - 기존 정책 업데이트  |  `sqlworkbench:GetAutocompletionMetadata` 및 `sqlworkbench:GetAutocompletionResource` 작업에 대한 권한이 관리형 정책에 추가됩니다. 이 기능을 추가하면 쿼리를 편집하는 동안 SQL 자동 완성을 위한 데이터베이스 정보를 생성하고 검색할 수 있는 권한이 부여됩니다.  | 2023년 8월 16일 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) - 기존 정책 업데이트  |  보안 암호 생성 및 관리 작업을 위한 AWS Secrets Manager 작업 권한이 관리형 정책에 추가됩니다. 추가된 권한은 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2023년 8월 14일 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) - 기존 정책 업데이트  |  Amazon EC2에서 보안 그룹 및 라우팅 규칙을 생성하고 관리하기 위한 작업 권한이 관리형 정책에서 제거됩니다. 이러한 권한은 서브넷 및 VPC 생성과 관련이 있습니다. 제거되는 권한은 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html) 이들은 Purpose:RedshiftMigrateToVpc 리소스 태그와 연결되었습니다. 이 태그는 Amazon EC2 Classic에서 Amazon EC2 VPC로 마이그레이션하는 작업에 대한 권한 범위를 제한했습니다. 리소스 태그에 대한 자세한 내용은 [태그를 사용한 AWS 리소스 액세스 제어](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)를 참조하세요. | 2023년 5월 8일 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) - 기존 정책 업데이트  |  관리형 정책에 작업 `redshift:GetClusterCredentialsWithIAM`의 권한이 추가됩니다. 추가를 통해 지정된 AWS 계정에서 Amazon Redshift 데이터베이스에 액세스하기 위한 임시 강화 보안 인증 정보를 가져올 권한이 부여됩니다.  | 2023년 4월 7일 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) - 기존 정책 업데이트  |  Amazon EC2에서 보안 그룹 규칙을 생성하고 관리하기 위한 작업 권한이 관리형 정책에 추가됩니다. 이러한 보안 그룹 및 규칙은 특히 Amazon Redshift `aws:RequestTag/Redshift` 리소스 태그와 관련이 있습니다. 이렇게 하면 권한 범위가 특정 Amazon Redshift 리소스로 제한됩니다.  | 2023년 4월 6일 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) - 기존 정책 업데이트  |  관리형 정책에 작업 `sqlworkbench:GetSchemaInference`의 권한이 추가됩니다. 추가를 통해 파일에서 추론된 열 및 데이터 유형을 가져올 수 있는 권한이 부여됩니다.  | 2023년 3월 21일 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) - 기존 정책 업데이트  |  관리형 정책에 작업 `sqlworkbench:GetSchemaInference`의 권한이 추가됩니다. 추가를 통해 파일에서 추론된 열 및 데이터 유형을 가져올 수 있는 권한이 부여됩니다.  | 2023년 3월 21일 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) - 기존 정책 업데이트  |  관리형 정책에 작업 `sqlworkbench:GetSchemaInference`의 권한이 추가됩니다. 추가를 통해 파일에서 추론된 열 및 데이터 유형을 가져올 수 있는 권한이 부여됩니다.  | 2023년 3월 21일 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) - 기존 정책 업데이트  |  관리형 정책에 작업 `sqlworkbench:AssociateNotebookWithTab`의 권한이 추가됩니다. 이 권한을 추가하면 사용자의 자체 노트북에 연결되는 탭을 만들고 업데이트할 수 있는 권한이 부여됩니다.  | 2023년 2월 2일 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) - 기존 정책 업데이트  |  관리형 정책에 작업 `sqlworkbench:AssociateNotebookWithTab`의 권한이 추가됩니다. 이 권한을 추가하면 사용자의 자체 노트북이나 공유하는 노트북에 연결되는 탭을 만들고 업데이트할 수 있는 권한이 부여됩니다.  | 2023년 2월 2일 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) - 기존 정책 업데이트  |  관리형 정책에 작업 `sqlworkbench:AssociateNotebookWithTab`의 권한이 추가됩니다. 이 권한을 추가하면 사용자의 자체 노트북이나 공유하는 노트북에 연결되는 탭을 만들고 업데이트할 수 있는 권한이 부여됩니다.  | 2023년 2월 2일 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) - 기존 정책 업데이트  |  노트북 사용 권한을 부여하기 위해 Amazon Redshift는 다음 작업에 대한 권한을 추가했습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2022년 10월 17일 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) - 기존 정책 업데이트  |  노트북 사용 권한을 부여하기 위해 Amazon Redshift는 다음 작업에 대한 권한을 추가했습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2022년 10월 17일 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) - 기존 정책 업데이트  |  노트북 사용 권한을 부여하기 위해 Amazon Redshift는 다음 작업에 대한 권한을 추가했습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)  | 2022년 10월 17일 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) - 기존 정책 업데이트  |  Amazon Redshift에서 CloudWatch에 지표를 게시할 수 있도록 네임스페이스 `AWS/Redshift`가 추가되었습니다.  | 2022년 9월 7일 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) - 기존 정책 업데이트  |  Amazon Redshift가 작업 `sqlworkbench:ListQueryExecutionHistory` 및`sqlworkbench:GetQueryExecutionHistory`에 대한 권한을 추가했습니다. 쿼리 기록을 볼 수 있는 권한을 부여합니다.  | 2022년 8월 30일 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) - 기존 정책 업데이트  |  Amazon Redshift가 작업 `sqlworkbench:ListQueryExecutionHistory` 및`sqlworkbench:GetQueryExecutionHistory`에 대한 권한을 추가했습니다. 쿼리 기록을 볼 수 있는 권한을 부여합니다.  | 2022년 8월 30일 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) - 기존 정책 업데이트  |  Amazon Redshift가 작업 `sqlworkbench:ListQueryExecutionHistory` 및`sqlworkbench:GetQueryExecutionHistory`에 대한 권한을 추가했습니다. 쿼리 기록을 볼 수 있는 권한을 부여합니다.  | 2022년 8월 30일 | 
|  [AmazonRedshiftFullAccess](#redshift-policy-managed-policies-full-access) - 기존 정책 업데이트  |  Amazon Redshift Serverless에 대한 권한을 기존 AmazonRedshiftFullAccess 관리형 정책에 추가했습니다.  | 2022년 7월 22일 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) - 기존 정책 업데이트  |  Amazon Redshift에서 태그 키 RedshiftDataFullAccess와 태그 값으로 태깅된 리소스에 대한 액세스 권한을 부여하기 위해 태그 aws:ResourceTag/RedshiftDataFullAccess 권한의 redshift-serverless:GetCredentials 기본 범위 지정 조건을 StringEquals에서 StringLike로 업데이트했습니다. | 2022년 7월 11일 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) - 기존 정책 업데이트  |  Amazon Redshift에서 Amazon Redshift Serverless에 대한 임시 보안 인증을 위해 redshift-serverless:GetCredentials를 허용하도록 새 권한을 추가했습니다. | 2022년 7월 8일 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) - 기존 정책 업데이트  |  Amazon Redshift가 `sqlworkbench:GetAccountSettings` 작업에 대한 권한을 추가했습니다. 계정 설정을 가져오는 권한을 부여합니다.  | 2022년 6월 15일 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) - 기존 정책 업데이트  |  Amazon Redshift가 `sqlworkbench:GetAccountSettings` 작업에 대한 권한을 추가했습니다. 계정 설정을 가져오는 권한을 부여합니다.  | 2022년 6월 15일 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) - 기존 정책 업데이트  |  Amazon Redshift가 `sqlworkbench:GetAccountSettings` 작업에 대한 권한을 추가했습니다. 계정 설정을 가져오는 권한을 부여합니다.  | 2022년 6월 15일 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) - 기존 정책 업데이트  |  새로운 Amazon Redshift Serverless 엔드포인트에 대한 퍼블릭 액세스를 사용하기 위해 Amazon Redshift는 탄력적 IP 주소를 고객 계정에 있는 VPC 엔드포인트의 탄력적 네트워크 인터페이스에 할당하고 연결합니다. 이 작업은 서비스 연결 역할을 통해 제공된 권한을 사용하여 수행됩니다. 이 사용 사례를 지원하기 위해 탄력적 IP 주소를 할당 및 해제하는 작업이 Amazon Redshift Serverless 서비스 연결 역할에 추가되었습니다.  | 2022년 5월 26일 | 
|  [AmazonRedshiftQueryEditorV2FullAccess](#redshift-policy-managed-policies-query-editor-V2) - 기존 정책 업데이트  |  작업 `sqlworkbench:ListTaggedResources`에 대한 권한. Amazon Redshift 쿼리 편집기 v2 리소스로 범위가 지정되었습니다. 이 정책 업데이트에서는 쿼리 편집기 v2를 통해서만 `tag:GetResources`를 호출할 수 있는 권한을 부여합니다.  | 2022년 2월 22일 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) - 기존 정책 업데이트  |  작업 `sqlworkbench:ListTaggedResources`에 대한 권한. Amazon Redshift 쿼리 편집기 v2 리소스로 범위가 지정되었습니다. 이 정책 업데이트에서는 쿼리 편집기 v2를 통해서만 `tag:GetResources`를 호출할 수 있는 권한을 부여합니다.  | 2022년 2월 22일 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) - 기존 정책 업데이트  |  작업 `sqlworkbench:ListTaggedResources`에 대한 권한. Amazon Redshift 쿼리 편집기 v2 리소스로 범위가 지정되었습니다. 이 정책 업데이트에서는 쿼리 편집기 v2를 통해서만 `tag:GetResources`를 호출할 수 있는 권한을 부여합니다.  | 2022년 2월 22일 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) - 기존 정책 업데이트  |  작업 `sqlworkbench:ListTaggedResources`에 대한 권한. Amazon Redshift 쿼리 편집기 v2 리소스로 범위가 지정되었습니다. 이 정책 업데이트에서는 쿼리 편집기 v2를 통해서만 `tag:GetResources`를 호출할 수 있는 권한을 부여합니다.  | 2022년 2월 22일 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) - 기존 정책 업데이트  |  관리형 정책에 작업 `sqlworkbench:AssociateQueryWithTab`의 권한이 추가됩니다. 이것를 추가하면 고객이 공유되는 쿼리에 연결된 편집기 탭을 만들 수 있습니다.  | 2022년 2월 22일 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) - 기존 정책 업데이트  |  Amazon Redshift는 Amazon Redshift 네트워크 및 VPC 리소스를 관리할 수 있도록 새로운 작업에 대한 권한을 추가했습니다.  | 2021년 11월 22일 | 
|  [AmazonRedshiftAllCommandsFullAccess](#redshift-policy-managed-policies-service-linked-role-commands) - 새 정책  |  Amazon Redshift는 Amazon Redshift 콘솔에서 생성된 IAM 역할을 사용하도록 허용하고 클러스터가 Amazon S3, UNLOAD, CREATE EXTERNAL SCHEMA, CREATE EXTERNAL FUNCTION, CREATE MODEL 또는 CREATE LIBRARY 명령에서 COPY를 실행하기 위한 기본값으로 설정할 수 있도록 새 정책을 추가했습니다.  | 2021년 11월 18일 | 
|  [AmazonRedshiftServiceLinkedRolePolicy](#redshift-policy-managed-policies-service-linked-role-policy) - 기존 정책 업데이트  |  Amazon Redshift는 감사 로그 내보내기를 포함하여 Amazon Redshift CloudWatch 로그 그룹 및 로그 스트림을 관리할 수 있도록 새로운 작업에 대한 권한을 추가했습니다.  | 2021년 11월 15일 | 
|  [AmazonRedshiftFullAccess](#redshift-policy-managed-policies-full-access) - 기존 정책 업데이트  |  Amazon Redshift는 모델 설명, DynamoDB, Redshift Spectrum 및 Amazon RDS 페더레이션을 허용하기 위한 새로운 권한을 추가했습니다. | 2021년 10월 7일 | 
|  [AmazonRedshiftQueryEditorV2FullAccess](#redshift-policy-managed-policies-query-editor-V2) - 새 정책  |  Amazon Redshift는 Amazon Redshift 쿼리 편집기 v2에 대한 전체 액세스를 허용하기 위한 새로운 정책을 추가했습니다.  | 2021년 9월 24일 | 
|  [AmazonRedshiftQueryEditorV2NoSharing](#redshift-policy-managed-policies-query-editor-V2-no-sharing) - 새 정책  |  Amazon Redshift는 리소스를 공유하지 않고 Amazon Redshift 쿼리 편집기 v2 사용을 허용하기 위한 새로운 정책을 추가했습니다.  | 2021년 9월 24일 | 
|  [AmazonRedshiftQueryEditorV2ReadSharing](#redshift-policy-managed-policies-query-editor-V2-read-sharing) - 새 정책  |  Amazon Redshift는 Amazon Redshift 쿼리 편집기 v2 내에서 읽기 공유를 허용하기 위한 새로운 정책을 추가했습니다.  | 2021년 9월 24일 | 
|  [AmazonRedshiftQueryEditorV2ReadWriteSharing](#redshift-policy-managed-policies-query-editor-V2-write-sharing) - 새 정책  |  Amazon Redshift는 Amazon Redshift 쿼리 편집기 v2 내에서 읽기 및 업데이트 공유를 허용하기 위한 새로운 정책을 추가했습니다.  | 2021년 9월 24일 | 
|  [AmazonRedshiftFullAccess](#redshift-policy-managed-policies-full-access) - 기존 정책 업데이트  |  Amazon Redshift는 `sagemaker:*Job*`를 허용하는 새로운 권한을 추가했습니다.  | 2021년 8월 18일 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) - 기존 정책 업데이트  |  Amazon Redshift는 `AuthorizeDataShare`를 허용하는 새로운 권한을 추가했습니다.  | 2021년 8월 12일 | 
|  [AmazonRedshiftDataFullAccess](#redshift-policy-managed-policies-data-full-access) - 기존 정책 업데이트  |  Amazon Redshift는 `BatchExecuteStatement`를 허용하는 새로운 권한을 추가했습니다.  | 2021년 7월 27일 | 
|  Amazon Redshift에서 변경 사항 추적 시작  |  Amazon Redshift가 AWS 관리형 정책에 대한 변경 내용 추적을 시작했습니다.  | 2021년 7월 27일 | 

## AmazonRedshiftReadOnlyAccess
<a name="redshift-policy-managed-policies-read-only"></a>

AWS 계정의 모든 Amazon Redshift 리소스에 대한 읽기 전용 액세스 권한을 부여합니다.

[AmazonRedshiftReadOnlyAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftReadOnlyAccess) 정책은 IAM 콘솔 및 AWS 관리형 정책 참조 안내서**의 [AmazonRedshiftReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftReadOnlyAccess.html)에서 찾을 수 있습니다.

## AmazonRedshiftFullAccess
<a name="redshift-policy-managed-policies-full-access"></a>

AWS 계정의 모든 Amazon Redshift 리소스에 대한 전체 액세스 권한을 부여합니다. 또한 이 정책은 모든 Amazon Redshift Serverless 리소스에 대한 모든 액세스 권한을 부여합니다.

[AmazonRedshiftFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftFullAccess) 정책은 IAM 콘솔 및 *AWS 관리형 정책 참조 안내서*의 [AmazonRedshiftFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftFullAccess.html)에서 찾을 수 있습니다.

## AmazonRedshiftQueryEditor
<a name="redshift-policy-managed-policies-query-editor"></a>

Amazon Redshift 콘솔의 쿼리 편집기에 대한 전체 액세스 권한을 부여합니다.

[AmazonRedshiftQueryEditor](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditor) 정책은 IAM 콘솔 및 *AWS 관리형 정책 참조 안내서*의 [AmazonRedshiftQueryEditor](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditor.html)에서 찾을 수 있습니다.

## AmazonRedshiftDataFullAccess
<a name="redshift-policy-managed-policies-data-full-access"></a>

AWS 계정의 Amazon Redshift Data API 작업 및 리소스에 전체 액세스 권한을 부여합니다.

[AmazonRedshiftDataFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftDataFullAccess) 정책은 IAM 콘솔 및 *AWS 관리형 정책 참조 안내서*의 [AmazonRedshiftDataFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftDataFullAccess.html)에서 찾을 수 있습니다.

## AmazonRedshiftQueryEditorV2FullAccess
<a name="redshift-policy-managed-policies-query-editor-V2"></a>

Amazon Redshift 쿼리 편집기 v2 작업 및 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책은 다른 필수 서비스에 대한 액세스 권한도 부여합니다.

[AmazonRedshiftQueryEditorV2FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2FullAccess) 정책은 IAM 콘솔 및 *AWS 관리형 정책 참조 안내서*의 [AmazonRedshiftQueryEditorV2FullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2FullAccess.html)에서 찾을 수 있습니다.

## AmazonRedshiftQueryEditorV2NoSharing
<a name="redshift-policy-managed-policies-query-editor-V2-no-sharing"></a>

리소스를 공유하지 않고 Amazon Redshift 쿼리 편집기 v2 관련 작업을 수행할 수 있는 권한을 부여합니다. 이 정책은 다른 필수 서비스에 대한 액세스 권한도 부여합니다. 이 정책을 사용하는 보안 주체는 리소스(예: 쿼리)에 태그를 지정하여 동일한 AWS 계정의 다른 보안 주체와 리소스를 공유할 수 없습니다.

[AmazonRedshiftQueryEditorV2NoSharing](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2NoSharing) 정책은 IAM 콘솔 및 *AWS 관리형 정책 참조 안내서*의 [AmazonRedshiftQueryEditorV2NoSharing](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2NoSharing.html)에서 찾을 수 있습니다.

## AmazonRedshiftQueryEditorV2ReadSharing
<a name="redshift-policy-managed-policies-query-editor-V2-read-sharing"></a>

제한된 리소스 공유로 Amazon Redshift 쿼리 편집기 v2 관련 작업을 수행할 수 있는 권한을 부여합니다. 이 정책은 다른 필수 서비스에 대한 액세스 권한도 부여합니다. 이 정책을 사용하는 보안 주체는 리소스(예: 쿼리)에 태그를 지정하여 동일한 AWS 계정의 다른 보안 주체와 리소스를 공유할 수 없습니다. 부여된 보안 주체는 팀과 공유된 리소스를 읽을 수 있지만 업데이트할 수는 없습니다.

[AmazonRedshiftQueryEditorV2ReadSharing](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2ReadSharing) 정책은 IAM 콘솔 및 *AWS 관리형 정책 참조 안내서*의 [AmazonRedshiftQueryEditorV2ReadSharing](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2ReadSharing.html)에서 찾을 수 있습니다.

## AmazonRedshiftQueryEditorV2ReadWriteSharing
<a name="redshift-policy-managed-policies-query-editor-V2-write-sharing"></a>

리소스 공유와 함께 Amazon Redshift 쿼리 편집기 v2 관련 작업을 수행할 수 있는 권한을 부여합니다. 이 정책은 다른 필수 서비스에 대한 액세스 권한도 부여합니다. 이 정책을 사용하는 보안 주체는 리소스(예: 쿼리)에 태그를 지정하여 동일한 AWS 계정의 다른 보안 주체와 리소스를 공유할 수 없습니다. 부여된 보안 주체는 팀과 공유하는 리소스를 읽고 업데이트할 수 있습니다.

[AmazonRedshiftQueryEditorV2ReadWriteSharing](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftQueryEditorV2ReadWriteSharing) 정책은 IAM 콘솔 및 *AWS 관리형 정책 참조 안내서*의 [AmazonRedshiftQueryEditorV2ReadWriteSharing](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftQueryEditorV2ReadWriteSharing.html)에서 찾을 수 있습니다.

## AmazonRedshiftServiceLinkedRolePolicy
<a name="redshift-policy-managed-policies-service-linked-role-policy"></a>

AmazonRedshiftServiceLinkedRolePolicy를 IAM 엔터티에 연결할 수 없습니다. 이 정책은 Amazon Redshift가 계정 리소스에 액세스할 수 있도록 허용하는 서비스 연결 역할에 연결됩니다. 자세한 내용은 [Amazon Redshift에 대해 서비스 연결 역할 사용](https://docs.aws.amazon.com/redshift/latest/mgmt/using-service-linked-roles.html)을 참조하세요.

[AmazonRedshiftServiceLinkedRolePolicy](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftServiceLinkedRolePolicy) 정책은 IAM 콘솔 및 *AWS 관리형 정책 참조 안내서*의 [AmazonRedshiftServiceLinkedRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftServiceLinkedRolePolicy.html)에서 찾을 수 있습니다.

## AmazonRedshiftAllCommandsFullAccess
<a name="redshift-policy-managed-policies-service-linked-role-commands"></a>

Amazon Redshift 콘솔에서 생성된 IAM 역할을 사용하고 클러스터가 Amazon S3, UNLOAD, CREATE EXTERNAL SCHEMA, CREATE EXTERNAL FUNCTION 및 CREATE MODEL 명령에서 COPY를 실행하기 위한 기본값으로 설정할 수 있는 권한을 부여합니다. 이 정책은 Amazon S3, CloudWatch Logs, Amazon SageMaker AI 또는 AWS Glue와 같은 관련 서비스에 대해 SELECT 문을 실행할 수 있는 권한도 부여합니다.

[AmazonRedshiftAllCommandsFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftAllCommandsFullAccess) 정책은 IAM 콘솔 및 *AWS 관리형 정책 참조 안내서*의 [AmazonRedshiftAllCommandsFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftAllCommandsFullAccess.html)에서 찾을 수 있습니다.

## AmazonRedshiftFederatedAuthorization
<a name="redshift-policy-managed-policies-federated-authorization"></a>

 이 정책은 Amazon Redshift 페더레이션 권한으로 Glue 데이터 카탈로그 데이터베이스에 대해 쿼리를 실행하는 데 필요한 IAM 작업을 통합합니다. 이러한 쿼리는 AWS Glue를 통과하므로 객체를 검색하려면 카탈로그 객체에 대한 작업 가져오기가 필요하고 객체를 수정하려면 생성, 업데이트, 이름 바꾸기 및 삭제 작업이 필요합니다. 리소스는 Amazon Redshift에서 관리하므로 보안 주체는 쿼리를 완료하는 데 Redshift 권한도 필요합니다. `glue:FederateAuthorization` 작업을 통해 AWS Glue는 카탈로그 객체에 대한 권한 부여 결정을 Amazon Redshift에 위임할 수 있습니다.

 이 정책은 보안 주체가 Amazon Redshift 페더레이션 권한을 사용하여 카탈로그에 대해 쿼리를 실행하도록 허용하지만 Amazon Redshift 네임스페이스를 AWS Glue에 등록 및 등록 취소하는 것은 허용하지 않습니다. Amazon Redshift 페더레이션 권한 설정에 대한 IAM 정책 요구 사항에 대한 설명서를 참조하세요.

[AmazonRedshiftFederatedAuthorization](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftFederatedAuthorization) 정책은 IAM 콘솔 및 *AWS 관리형 정책 참조 가이드*의 [AmazonRedshiftFederatedAuthorization](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRedshiftFederatedAuthorization.html)에서 확인할 수 있습니다.

Amazon Redshift API 작업 및 리소스에 대한 권한을 허용하는 고유의 사용자 정의 IAM 정책을 생성할 수도 있습니다. 해당 권한이 필요한 IAM 역할 또는 그룹에 이러한 사용자 지정 정책을 연결할 수 있습니다.





## Redshift Spectrum을 사용하는 데 필요한 권한
<a name="redshift-spectrum-policy-resources"></a>

Amazon Redshift Spectrum에서 리소스에 액세스하려면 다른 AWS 서비스에 대한 권한이 필요합니다. Redshift Spectrum에 대한 IAM 정책의 권한에 대한 자세한 내용은 *Amazon Redshift 데이터베이스 개발자 안내서*의 [Amazon Redshift Spectrum에 대한 IAM 정책](https://docs.aws.amazon.com/redshift/latest/dg/c-spectrum-iam-policies.html)을 참조하세요.

## Amazon Redshift 콘솔 사용에 필요한 권한
<a name="redshift-policy-resources.required-permissions.console"></a>

사용자가 Amazon Redshift 콘솔로 작업하려면 AWS 계정에 대한 Amazon Redshift 리소스를 입력하도록 허용하는 최소 권한이 있어야 합니다. 이러한 권한이 있어야만 사용자가 Amazon EC2 보안, Amazon CloudWatch, Amazon SNS 및 네트워크 정보 등 다른 관련 정보를 입력할 수 있습니다.

최소 필수 권한보다 더 제한적인 IAM 정책을 만들면 콘솔은 해당 IAM 정책에 연결된 사용자에 대해 의도대로 작동하지 않습니다. 이 사용자가 Amazon Redshift 콘솔을 사용할 수 있도록 하려면 `AmazonRedshiftReadOnlyAccess` 관리형 정책을 사용자에게 연결합니다. 이 작업을 수행하는 방법은 [Amazon Redshift에 대한 AWS 관리형 정책](#redshift-policy-resources.managed-policies)에 설명되어 있습니다.

사용자에게 Amazon Redshift 콘솔의 쿼리 편집기에 대한 액세스 권한을 부여하는 방법에 대한 내용은 [Amazon Redshift 콘솔 쿼피 편집기 사용에 필요한 권한](#redshift-policy-resources.required-permissions.query-editor) 섹션을 참조하세요.

AWS CLI 또는 Amazon Redshift API만 호출하는 사용자에게 최소 콘솔 권한을 허용할 필요가 없습니다.

## Amazon Redshift 콘솔 쿼피 편집기 사용에 필요한 권한
<a name="redshift-policy-resources.required-permissions.query-editor"></a>

사용자가 Amazon Redshift 쿼리 편집기로 작업하려면 해당 사용자에게 Amazon Redshift 및 Amazon Redshift Data API 작업에 대한 최소 권한 집합이 있어야 합니다. 보안 암호를 사용하여 데이터베이스에 연결하려면 Secrets Manager 권한도 있어야 합니다.

사용자가 Amazon Redshift 콘솔에서 쿼리 편집기에 액세스할 수 있는 권한을 제공하려면 `AmazonRedshiftQueryEditor` 및 `AmazonRedshiftReadOnlyAccess` AWS 관리형 정책을 연결합니다. `AmazonRedshiftQueryEditor` 정책은 사용자 권한이 자신의 SQL 문의 결과만 검색하도록 허용합니다. 즉, `AmazonRedshiftQueryEditor` AWS 관리형 정책의 이 섹션에 표시된 것과 동일한 `aws:userid`로 제출된 문입니다.

```
{
    "Sid":"DataAPIIAMStatementPermissionsRestriction",
    "Action": [
        "redshift-data:GetStatementResult",
        "redshift-data:CancelStatement",
        "redshift-data:DescribeStatement",
        "redshift-data:ListStatements"
    ],
    "Effect": "Allow",
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "redshift-data:statement-owner-iam-userid": "${aws:userid}"
        }
    }
}
```

사용자가 동일한 IAM 역할에 있는 다른 사용자의 SQL 문의 결과를 검색할 수 있도록 허용하려면 현재 사용자에 대한 액세스를 제한하는 조건 없이 자체 정책을 생성합니다. 또한 정책을 변경할 수 있는 액세스 권한을 관리자로 제한합니다.

## 쿼리 편집기 v2를 사용하는 데 필요한 권한
<a name="redshift-policy-resources.required-permissions.query-editor-v2"></a>

사용자가 Amazon Redshift 쿼리 편집기 v2를 사용하려면 해당 사용자에게 Amazon Redshift, 쿼리 편집기 v2 작업 및 AWS Key Management Service, AWS Secrets Manager 및 태깅 서비스와 같은 기타 AWS 서비스에 대한 최소 권한 집합이 있어야 합니다.

사용자에게 쿼리 편집기 v2에 대한 전체 액세스 권한을 부여하려면 `AmazonRedshiftQueryEditorV2FullAccess` AWS 관리형 정책을 연결합니다. `AmazonRedshiftQueryEditorV2FullAccess` 정책은 사용자 권한이 쿼리와 같은 쿼리 편집기 v2 리소스를 같은 팀의 다른 사람들과 공유하도록 허용합니다. 쿼리 편집기 v2 리소스에 대한 액세스를 제어하는 방법에 대한 자세한 내용은 IAM 콘솔에서 쿼리 편집기 v2에 대한 특정 관리형 정책 정의를 참조하세요.

일부 Amazon Redshift 쿼리 편집기 v2 AWS 관리형 정책은 조건 내에서 AWS 태그를 사용하여 리소스에 대한 액세스 범위를 지정합니다. 쿼리 에디터 v2 내에서 쿼리 공유는 보안 주체(IAM 역할)에 연결된 IAM 정책의 태그 키 및 값 `"aws:ResourceTag/sqlworkbench-team": "${aws:PrincipalTag/sqlworkbench-team}"`을 기반으로 합니다. 동일한 태그 값(예: `accounting-team`)이 있는 동일한 AWS 계정의 보안 주체는 쿼리 편집기 v2에서 동일한 팀에 있습니다. 한 번에 한 팀과만 연결할 수 있습니다. 관리 권한이 있는 사용자는 모든 팀원에게 `sqlworkbench-team` 태그에 대해 동일한 값을 부여하여 IAM 콘솔에서 팀을 설정할 수 있습니다. IAM 사용자 또는 IAM 역할에 대해 `sqlworkbench-team`의 태그 값이 변경되면 변경 사항이 공유 리소스에 반영될 때까지 지연이 있을 수 있습니다. 리소스(예: 쿼리)의 태그 값이 변경되면 변경 사항이 반영될 때까지 다시 지연이 있을 수 있습니다. 팀원에게도 `tag:GetResources` 권한이 있어야 공유할 수 있습니다.

**예: IAM 역할에 대한 `accounting-team` 태그를 추가하려면**

1. AWS Management Console에 로그인하여 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)에서 IAM 콘솔을 엽니다.

1. 콘솔의 탐색 창에서 [**역할(Roles)**]을 선택한 다음 편집할 역할의 이름을 선택합니다.

1. **태그(Tags)** 탭을 선택한 후 **태그 추가(Add tags)**를 선택합니다.

1. 태그 키 **sqlworkbench-team**과 값 `accounting-team`을 추가합니다.

1. **변경 사항 저장**을 선택합니다.

   이제 IAM 보안 주체(이 IAM 역할이 연결됨)가 팀과 쿼리를 공유하면 동일한 `accounting-team` 태그 값을 가진 다른 보안 주체가 쿼리를 볼 수 있습니다.

IAM 역할 및 IAM 사용자를 포함하여 보안 주체에 태그를 연결하는 방법에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 리소스에 태깅](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags.html)을 참조하세요.

자격 증명 공급자(IdP)를 사용하여 세션 수준에서 팀을 설정할 수도 있습니다. 이를 통해 동일한 IAM 역할을 사용하는 여러 사용자가 서로 다른 팀을 가질 수 있습니다. IAM 역할 신뢰 정책은 `sts:TagSession` 작업을 허용해야 합니다. 자세한 내용은 *IAM 사용 설명서*의 [세션 태그를 추가하는 데 필요한 권한](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html#id_session-tags_permissions-required)을 참조하세요. IdP에서 제공한 SAML 어설션에 보안 주체 태그 속성을 추가합니다.

```
<Attribute Name="https://aws.amazon.com/SAML/Attributes/PrincipalTag:sqlworkbench-team">
    <AttributeValue>accounting-team</AttributeValue>
</Attribute>
```

자격 증명 공급자(IdP)의 지침에 따라 SAML 속성을 디렉터리의 콘텐츠로 채웁니다. 자격 증명 공급자(IdP) 및 Amazon Redshift에 대한 자세한 내용은 *IAM 사용 설명서*의 [IAM 인증을 이용한 데이터베이스 사용자 자격 증명 생성](generating-user-credentials.md)과 [자격 증명 공급자 및 페더레이션](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)을 참조하세요.

은 노트북 셀의 현재 콘텐츠를 가져오고 계정에서 노트북 버전을 생성할 수 있는 권한을 부여합니다. 즉, 버전 생성 당시 노트북의 현재 내용은 버전의 내용과 동일합니다. 나중에 버전의 셀 내용은 현재 노트북이 업데이트된 것과 동일하게 유지됩니다. `sqlworkbench:GetNotebookVersion`은 노트북 버전을 가져올 수 있는 권한을 부여합니다. `sqlworkbench:BatchGetNotebookCell` 권한은 없지만 노트북에 대한 `sqlworkbench:CreateNotebookVersion` 및 `sqlworkbench:GetNotebookVersion` 권한이 있는 사용자는 해당 버전의 노트북 셀에 액세스할 수 있습니다. `sqlworkbench:BatchGetNotebookCell` 권한이 없는 이 사용자는 먼저 버전을 생성한 다음 이 생성된 버전을 가져오는 방식으로 여전히 Notebook 셀의 콘텐츠를 검색할 수 있습니다.

## Amazon Redshift 스케줄러 사용에 필요한 권한
<a name="iam-permission-scheduler"></a>

Amazon Redshift 스케줄러를 사용하는 경우 스케줄러가 사용자를 대신하여 권한을 맡을 수 있도록 Amazon Redshift 스케줄러(**scheduler.redshift.amazonaws.com**)와 신뢰 관계가 있는 IAM 역할을 설정합니다. 또한 예약하려는 Amazon Redshift API 작업에 대한 역할에 정책(권한)을 연결합니다.

다음 예에서는 Amazon Redshift 스케줄러 및 Amazon Redshift와 신뢰 관계를 설정하기 위한 정책 문서를 JSON 형식으로 보여줍니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "scheduler.redshift.amazonaws.com",
                    "redshift.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

신뢰 엔터티에 대한 자세한 내용은 *IAM User Guide*의 [Creating a role to delegate permissions to an AWS service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)를 참조하세요.

또한 예약하려는 Amazon Redshift 작업에 대한 권한을 추가해야 합니다.

스케줄러가 `ResizeCluster` 작업을 사용하려면 IAM 정책에 다음과 유사한 권한을 추가하세요. 환경에 따라 정책을 보다 제한적으로 만들 수 있습니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "redshift:ResizeCluster",
            "Resource": "*"
        }
    ]
}
```

------

Amazon Redshift 스케줄러에 대한 역할을 생성하는 단계는 *IAM User Guide*의 [Creating a role for an AWS service (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)를 참조하세요. IAM 콘솔에서 역할을 생성할 때 다음을 선택합니다.
+ **Choose the service that will use this role(이 역할을 사용할 서비스 선택)**: **Redshift**를 선택합니다.
+ **Select your use case(사용 사례 선택)**: **Redshift - Scheduler(Redshift - 스케줄러)**를 선택합니다.
+ Amazon Redshift 작업을 예약할 수 있는 정책을 생성하거나 해당 역할에 연결합니다. **정책 생성**을 선택하거나 역할을 수정하여 정책을 연결합니다. 예약할 작업에 대한 JSON 정책을 입력합니다.
+ 역할을 생성한 후 서비스 `redshift.amazonaws.com`을 포함하도록 IAM 역할의 **신뢰 관계**를 편집합니다.

생성한 IAM 역할에는 `scheduler.redshift.amazonaws.com` 및 `redshift.amazonaws.com`의 신뢰할 수 있는 개체가 있습니다. 또한 지원되는 Amazon Redshift API 작업(예: `"redshift:ResizeCluster"`)을 허용하는 정책이 연결되어 있습니다.

## Amazon EventBridge 스케줄러 사용에 필요한 권한
<a name="iam-permission-eventbridge-scheduler"></a>

Amazon EventBridge 스케줄러를 사용하는 경우 스케줄러가 사용자를 대신하여 권한을 맡을 수 있도록 Amazon EventBridge 스케줄러(**events.amazonaws.com**)와 신뢰 관계가 있는 IAM 역할을 설정합니다. 또한 예약하려는 Amazon Redshift Data API 작업에 대한 역할과 Amazon EventBridge 작업에 대한 정책에 정책(권한)을 연결합니다.

콘솔에서 Amazon Redshift 쿼리 편집기를 사용하여 예약된 쿼리를 생성할 때 EventBridge 스케줄러를 사용합니다.

IAM 콘솔에서 예약된 쿼리를 실행하는 IAM 역할을 생성할 수 있습니다. 이 IAM 역할에서 `AmazonEventBridgeFullAccess`와 `AmazonRedshiftDataFullAccess`를 연결합니다.

다음 예에서는 EventBridge 스케줄러와 신뢰 관계를 설정하기 위한 정책 문서를 JSON 형식으로 보여줍니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "events.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

신뢰 엔터티에 대한 자세한 내용은 *IAM User Guide*의 [Creating a role to delegate permissions to an AWS service](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)를 참조하세요.

EventBridge 스케줄러에 대한 역할을 생성하는 단계는 *IAM User Guide*의 [Creating a role for an AWS service (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)를 참조하세요. IAM 콘솔에서 역할을 생성할 때 다음을 선택합니다.
+ [**이 역할을 사용할 서비스 선택(Choose the service that will use this role)**]에서 [**CloudWatch Events**]를 선택합니다.
+ [**사용 사례 선택(Select your use case)**:]에서 [**CloudWatch Events**]를 선택합니다.
+ 권한 정책 `AmazonEventBridgeFullAccess` 및 `AmazonRedshiftDataFullAccess`를 연결합니다.

생성한 IAM 역할에는 `events.amazonaws.com`의 신뢰할 수 있는 엔터티가 있습니다. 또한 지원되는 Amazon Redshift Data API 작업(예: `"redshift-data:*"`)을 허용하는 정책이 연결되어 있습니다.

## Amazon Redshift 기계 학습(ML)을 사용하는 데 필요한 권한
<a name="iam-permission-ml"></a>

다음에서 다양한 사용 사례에 대해 Amazon Redshift 기계 학습(ML)을 사용하는 데 필요한 권한에 대한 설명을 찾을 수 있습니다.

사용자가 Amazon SageMaker AI와 함께 Amazon Redshift 기계 학습을 사용하려면 기본값보다 더 제한적인 정책으로 IAM 역할을 생성합니다. 다음 정책을 사용할 수 있습니다. 필요에 맞게 이 정책을 수정할 수도 있습니다.

다음 정책은 Amazon Redshift의 모델 설명 기능을 사용하여 SageMaker AI Autopilot을 실행하는 데 필요한 권한을 보여줍니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreateTrainingJob",
                "sagemaker:CreateAutoMLJob",
                "sagemaker:CreateCompilationJob",
                "sagemaker:CreateEndpoint",
                "sagemaker:DescribeAutoMLJob",
                "sagemaker:DescribeTrainingJob",
                "sagemaker:DescribeCompilationJob",
                "sagemaker:DescribeProcessingJob",
                "sagemaker:DescribeTransformJob",
                "sagemaker:ListCandidatesForAutoMLJob",
                "sagemaker:StopAutoMLJob",
                "sagemaker:StopCompilationJob",
                "sagemaker:StopTrainingJob",
                "sagemaker:DescribeEndpoint",
                "sagemaker:InvokeEndpoint",
                "sagemaker:StopProcessingJob",
                "sagemaker:CreateModel",
                "sagemaker:CreateProcessingJob"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:model/*redshift*",
                "arn:aws:sagemaker:*:*:training-job/*redshift*",
                "arn:aws:sagemaker:*:*:automl-job/*redshift*",
                "arn:aws:sagemaker:*:*:compilation-job/*redshift*",
                "arn:aws:sagemaker:*:*:processing-job/*redshift*",
                "arn:aws:sagemaker:*:*:transform-job/*redshift*",
                "arn:aws:sagemaker:*:*:endpoint/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/Endpoints/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/ProcessingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TrainingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TransformJobs/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": [
                        "SageMaker",
                        "/aws/sagemaker/Endpoints",
                        "/aws/sagemaker/ProcessingJobs",
                        "/aws/sagemaker/TrainingJobs",
                        "/aws/sagemaker/TransformJobs"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetAuthorizationToken",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetBucketAcl",
                "s3:GetBucketCors",
                "s3:GetEncryptionConfiguration",
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListAllMyBuckets",
                "s3:ListMultipartUploadParts",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject",
                "s3:PutBucketAcl",
                "s3:PutBucketCors",
                "s3:DeleteObject",
                "s3:AbortMultipartUpload",
                "s3:CreateBucket"
            ],
            "Resource": [
                "arn:aws:s3:::redshift-downloads",
                "arn:aws:s3:::redshift-downloads/*",
                "arn:aws:s3:::*redshift*",
                "arn:aws:s3:::*redshift*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetBucketAcl",
                "s3:GetBucketCors",
                "s3:GetEncryptionConfiguration",
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListAllMyBuckets",
                "s3:ListMultipartUploadParts",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject",
                "s3:PutBucketAcl",
                "s3:PutBucketCors",
                "s3:DeleteObject",
                "s3:AbortMultipartUpload",
                "s3:CreateBucket"
            ],
            "Resource": "*",
            "Condition": {
                "StringEqualsIgnoreCase": {
                    "s3:ExistingObjectTag/Redshift": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "redshift.amazonaws.com",
                        "sagemaker.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

다음 정책은 Amazon DynamoDB, Redshift Spectrum 및 Amazon RDS 페더레이션에 대한 액세스를 허용하기 위한 최소한의 전체 권한을 보여줍니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreateTrainingJob",
                "sagemaker:CreateAutoMLJob",
                "sagemaker:CreateCompilationJob",
                "sagemaker:CreateEndpoint",
                "sagemaker:DescribeAutoMLJob",
                "sagemaker:DescribeTrainingJob",
                "sagemaker:DescribeCompilationJob",
                "sagemaker:DescribeProcessingJob",
                "sagemaker:DescribeTransformJob",
                "sagemaker:ListCandidatesForAutoMLJob",
                "sagemaker:StopAutoMLJob",
                "sagemaker:StopCompilationJob",
                "sagemaker:StopTrainingJob",
                "sagemaker:DescribeEndpoint",
                "sagemaker:InvokeEndpoint",
                "sagemaker:StopProcessingJob",
                "sagemaker:CreateModel",
                "sagemaker:CreateProcessingJob"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:model/*redshift*",
                "arn:aws:sagemaker:*:*:training-job/*redshift*",
                "arn:aws:sagemaker:*:*:automl-job/*redshift*",
                "arn:aws:sagemaker:*:*:compilation-job/*redshift*",
                "arn:aws:sagemaker:*:*:processing-job/*redshift*",
                "arn:aws:sagemaker:*:*:transform-job/*redshift*",
                "arn:aws:sagemaker:*:*:endpoint/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/Endpoints/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/ProcessingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TrainingJobs/*redshift*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TransformJobs/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudwatch:namespace": [
                        "SageMaker",
                        "/aws/sagemaker/Endpoints",
                        "/aws/sagemaker/ProcessingJobs",
                        "/aws/sagemaker/TrainingJobs",
                        "/aws/sagemaker/TransformJobs"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:BatchCheckLayerAvailability",
                "ecr:BatchGetImage",
                "ecr:GetAuthorizationToken",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetBucketAcl",
                "s3:GetBucketCors",
                "s3:GetEncryptionConfiguration",
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListAllMyBuckets",
                "s3:ListMultipartUploadParts",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject",
                "s3:PutBucketAcl",
                "s3:PutBucketCors",
                "s3:DeleteObject",
                "s3:AbortMultipartUpload",
                "s3:CreateBucket"
            ],
            "Resource": [
                "arn:aws:s3:::redshift-downloads",
                "arn:aws:s3:::redshift-downloads/*",
                "arn:aws:s3:::*redshift*",
                "arn:aws:s3:::*redshift*/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetBucketAcl",
                "s3:GetBucketCors",
                "s3:GetEncryptionConfiguration",
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListAllMyBuckets",
                "s3:ListMultipartUploadParts",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject",
                "s3:PutBucketAcl",
                "s3:PutBucketCors",
                "s3:DeleteObject",
                "s3:AbortMultipartUpload",
                "s3:CreateBucket"
            ],
            "Resource": "*",
            "Condition": {
                "StringEqualsIgnoreCase": {
                    "s3:ExistingObjectTag/Redshift": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:Scan",
                "dynamodb:DescribeTable",
                "dynamodb:Getitem"
            ],
            "Resource": [
                "arn:aws:dynamodb:*:*:table/*redshift*",
                "arn:aws:dynamodb:*:*:table/*redshift*/index/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ListInstances"
            ],
            "Resource": [
                "arn:aws:elasticmapreduce:*:*:cluster/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "elasticmapreduce:ListInstances"
            ],
            "Resource": "*",
            "Condition": {
                "StringEqualsIgnoreCase": {
                    "elasticmapreduce:ResourceTag/Redshift": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": "arn:aws:lambda:*:*:function:*redshift*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "glue:CreateDatabase",
                "glue:DeleteDatabase",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:UpdateDatabase",
                "glue:CreateTable",
                "glue:DeleteTable",
                "glue:BatchDeleteTable",
                "glue:UpdateTable",
                "glue:GetTable",
                "glue:GetTables",
                "glue:BatchCreatePartition",
                "glue:CreatePartition",
                "glue:DeletePartition",
                "glue:BatchDeletePartition",
                "glue:UpdatePartition",
                "glue:GetPartition",
                "glue:GetPartitions",
                "glue:BatchGetPartition"
            ],
            "Resource": [
                "arn:aws:glue:*:*:table/*redshift*/*",
                "arn:aws:glue:*:*:catalog",
                "arn:aws:glue:*:*:database/*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": [
                "arn:aws:secretsmanager:*:*:secret:*redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "secretsmanager:ResourceTag/Redshift": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "redshift.amazonaws.com",
                        "glue.amazonaws.com",
                        "sagemaker.amazonaws.com",
                        "athena.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

선택적으로 암호화에 AWS KMS 키를 사용하려면 정책에 다음 권한을 추가합니다.

```
{
    "Effect": "Allow",
    "Action": [
        "kms:CreateGrant",
        "kms:Decrypt",
        "kms:DescribeKey",
        "kms:Encrypt",
        "kms:GenerateDataKey*"
    ],
    "Resource": [
        "arn:aws:kms:<your-region>:<your-account-id>:key/<your-kms-key>"
    ]
}
```

Amazon Redshift와 SageMaker AI가 다른 서비스와 상호 작용하는 이전 IAM 역할을 수임하도록 허용하려면 역할에 다음 신뢰 정책을 추가합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "redshift.amazonaws.com",
          "sagemaker.amazonaws.com",
          "forecast.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

앞의 경우 Amazon S3 버킷 `redshift-downloads/redshift-ml/`은 다른 단계와 예제에 사용되는 샘플 데이터가 저장되는 위치입니다. Amazon S3에서 데이터를 로드할 필요가 없으면 이 버킷을 제거할 수 있습니다. 또는 Amazon Redshift로 데이터를 로드하는 데 사용하는 다른 Amazon S3 버킷으로 바꿉니다.

**your-account-id**, **your-role** 및 **your-s3-bucket** 값은 CREATE MODEL 명령에서 지정하는 계정 ID, 역할 및 버킷입니다.

필요에 따라 Amazon Redshift 기계 학습에 사용할 AWS KMS 키를 지정하는 경우 샘플 정책의 AWS KMS 키 섹션을 사용할 수 있습니다. **your-kms-key** 값은 CREATE MODEL 명령의 일부로 사용하는 키입니다.

하이퍼파라미터 튜닝 작업에 대해 Virtual Private Cloud(VPC)를 지정할 때 다음 권한을 추가합니다.

```
{
            "Effect": "Allow",
            "Action": [
            "ec2:CreateNetworkInterface",
            "ec2:CreateNetworkInterfacePermission",
            "ec2:DeleteNetworkInterface",
            "ec2:DeleteNetworkInterfacePermission",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DescribeVpcs",
            "ec2:DescribeDhcpOptions",
            "ec2:DescribeSubnets",
            "ec2:DescribeSecurityGroups"
            ]
}
```

모델 설명으로 작업하려면 SageMaker AI API 작업을 직접 호출할 수 있는 권한이 있는지 확인해야 합니다. `AmazonSageMakerFullAccess` 관리형 정책을 사용하는 것이 좋습니다. 보다 제한적인 정책으로 IAM 역할을 생성하려는 경우 다음 정책을 사용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:CreateEndpoint",
        "sagemaker:CreateEndpointConfig",
        "sagemaker:DeleteEndpoint",
        "sagemaker:DeleteEndpointConfig",
        "sagemaker:DescribeEndpoint",
        "sagemaker:DescribeEndpointConfig",
        "sagemaker:DescribeModel",
        "sagemaker:InvokeEndpoint",
        "sagemaker:ListTags"
      ],
      "Resource": "*"
    }
  ]
}
```

------

`AmazonSageMakerFullAccess` 관리형 정책에 대한 자세한 내용은 *Amazon SageMaker AI Developer Guide*의 [AmazonSageMakerFullAccess](https://docs.aws.amazon.com/sagemaker/latest/dg/security-iam-awsmanpol.html#security-iam-awsmanpol-AmazonSageMakerFullAccess)를 참조하세요.

예측 모델을 만들려면 `AmazonForecastFullAccess` 관리형 정책을 사용하는 것이 좋습니다. 보다 제한적인 정책을 사용하려면 IAM 역할에 다음 정책을 추가합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "forecast:CreateAutoPredictor",
                "forecast:CreateDataset",
                "forecast:CreateDatasetGroup",
                "forecast:CreateDatasetImportJob",
                "forecast:CreateForecast",
                "forecast:CreateForecastExportJob",
                "forecast:DeleteResourceTree",
                "forecast:DescribeAutoPredictor",
                "forecast:DescribeDataset",
                "forecast:DescribeDatasetGroup",
                "forecast:DescribeDatasetImportJob",
                "forecast:DescribeForecast",
                "forecast:DescribeForecastExportJob",
                "forecast:StopResource",
                "forecast:TagResource",
                "forecast:UpdateDatasetGroup"
             ],
             "Resource": "*"
         }
    ]
}
```

------

Amazon Bedrock 모델을 만들려면 `AmazonBedrockFullAccess` 관리형 정책을 사용하는 것이 좋습니다. 보다 제한적인 정책을 사용하려면 IAM 역할에 다음 정책을 추가합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "bedrock:InvokeModel",
            "Resource": [
                "*",
                "arn:aws:bedrock:us-east-1::foundation-model/*"
            ]
        }
    ]
}
```

------

Amazon Redshift ML에 관한 자세한 내용은 [Amazon Redshift에서 기계 학습 사용](https://docs.aws.amazon.com/redshift/latest/dg/machine_learning.html) 또는 [CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html), [CREATE EXTERNAL MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_create_external_model.html)을 참조하시기 바랍니다.

## 스트리밍 수집 권한
<a name="iam-permission-streaming-ingestion"></a>

스트리밍 수집은 두 가지 서비스에서 작동합니다. 바로 Kinesis Data Streams와 Amazon MSK입니다.

### Kinesis Data Streams에서 스트리밍 수집을 사용하는 데 필요한 권한
<a name="iam-permission-streaming-ingestion-kinesis"></a>

관리형 정책 예시가 포함된 절차는 [Amazon Kinesis Data Streams에서 스트리밍 수집 시작하기](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started.html)를 참조하세요.

### Amazon MSK에서 스트리밍 수집을 사용하는 데 필요한 권한
<a name="iam-permission-streaming-ingestion-kafka"></a>

관리형 정책 예시가 포함된 절차는 [Amazon Managed Streaming for Apache Kafka에서 스트리밍 수집 시작하기](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started-MSK.html)를 참조하세요.

## 데이터 공유 API 작업을 사용하는 데 필요한 권한
<a name="iam-permission-datasharing"></a>

데이터 공유 API 작업에 대한 액세스를 제어하려면 IAM 작업 기반 정책을 사용합니다. IAM 정책을 관리하는 방법에 대한 자세한 내용은 *IAM User Guide*의 [Managing IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html) 섹션을 참조하세요.

특히, 생산자 클러스터 관리자가 `AuthorizeDataShare` 호출을 사용하여 AWS 계정 외부의 datashare에 대한 송신 권한을 부여해야 한다고 가정합니다. 이 경우 이 권한을 부여하도록 IAM 작업 기반 정책을 설정합니다. `DeauthorizeDataShare` 호출을 사용하여 송신을 취소합니다.

IAM 작업 기반 정책을 사용할 때 `DataShareARN`과 같이 정책에서 IAM 리소스를 지정할 수도 있습니다. 다음은 `DataShareARN`의 형식과 예를 보여줍니다.

```
arn:aws:redshift:region:account-id:datashare:namespace-guid/datashare-name
arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/SalesShare
```

IAM 정책에서 datashare 이름을 지정하여 특정 datashare에 대한 `AuthorizeDataShare` 액세스를 제한할 수 있습니다.

```
{
  "Statement": [
    {
      "Action": [
        "redshift:AuthorizeDataShare",
      ],
      "Resource": [
        "arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/SalesShare"
      ],
      "Effect": "Deny"
    }
  ]
}
```

특정 생산자 클러스터가 소유한 모든 datashare로 IAM 정책을 제한할 수도 있습니다. 이렇게 하려면 정책의 **datashare-name** 값을 와일드카드나 별표로 바꿉니다. 클러스터의 `namespace-guid` 값을 유지합니다.

```
arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/*
```

다음은 특정 생산자 클러스터가 소유한 datashare에서 엔터티가 `AuthorizeDataShare`를 호출하지 못하도록 하는 IAM 정책입니다.

```
{
  "Statement": [
    {
      "Action": [
        "redshift:AuthorizeDataShare",
      ],
      "Resource": [
        "arn:aws:redshift:us-east-1:555555555555:datashare:86b5169f-01dc-4a6f-9fbb-e2e24359e9a8/*"
      ],
      "Effect": "Deny"
    }
  ]
}
```

`DataShareARN`은 datashare 이름과 소유 클러스터의 네임스페이스에 대한 GUID(Globally Unique ID)를 기반으로 액세스를 제한합니다. 이름을 별표로 지정하여 이 작업을 수행합니다.

## GetClusterCredentials에 대한 리소스 정책
<a name="redshift-policy-resources.getclustercredentials-resources"></a>

IAM 데이터베이스 자격 증명이 있는 JDBC 또는 ODBC 연결을 이용해 클러스터 데이터베이스에 연결하려거나 `GetClusterCredentials` 작업을 프로그래밍 방식으로 직접 호출하려면 `dbuser` 리소스에 액세스하여 `redshift:GetClusterCredentials` 작업을 직접 호출할 수 있는 권한이 필요합니다.

`server` 및 `port` 대신 JDBC 또는 ODBC 연결을 사용하는 경우 `cluster_id` 및 `region`을 지정할 수 있습니다. 단, 그렇게 하려면 사용자 정책이 `redshift:DescribeClusters` 작업을 허용하고 `cluster` 리소스에 액세스 권한이 있어야 합니다.

선택적 파라미터 `Autocreate`, `DbGroups` 및 `DbName`을 사용하여 `GetClusterCredentials`를 호출하는 경우 그러한 작업을 허용하고, 다음 표에 나열된 리소스에 대한 액세스를 허용해야 합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html)

리소스에 대한 자세한 내용은 [Amazon Redshift 리소스 및 작업](redshift-iam-access-control-overview.md#redshift-iam-accesscontrol.actions-and-resources) 섹션을 참조하세요.

정책에 다음의 조건도 포함할 수 있습니다.
+ `redshift:DurationSeconds`
+ `redshift:DbName`
+ `redshift:DbUser`

**중요**  
SAML SSO 통합의 경우 `${redshift:DbUser}` 변수를 사용하여 IAM 정책을 지정해야 할 수 있습니다. 이러한 경우 호출자가 AWS 사용자 자격 증명과 일치하지 않는 사용자의 자격 증명을 얻을 수 없도록 하는 조건문을 사용하는 것이 좋습니다. 예를 들면 `"StringEquals": {"aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}"}"`가 있습니다. [예제 8: GetClusterCredentials 사용을 위한 IAM 정책 예제](#redshift-policy-examples-getclustercredentials)을(를) 참조하세요. 조건에 대한 자세한 내용은 [정책에서 조건 지정](redshift-iam-access-control-overview.md#redshift-policy-resources.specifying-conditions) 단원을 참조하십시오.

## 고객 관리형 정책 예제
<a name="redshift-iam-accesscontrol.examples"></a>

이 섹션에서는 다양한 Amazon Redshift 작업에 대한 권한을 부여하는 사용자 정책의 예를 제공합니다. 이러한 정책은 Amazon Redshift API, AWS SDK 또는 AWS CLI를 사용하는 경우에 적용됩니다.

**참고**  
모든 예에서는 미국 서부(오리건) 리전(`us-west-2`)을 사용하며 가상의 계정 ID를 포함합니다.

### 예 1: 모든 Amazon Redshift 작업 및 리소스에 대한 전체 액세스 권한 허용
<a name="redshift-policy-example-allow-full-access"></a>

다음 정책은 모든 리소스를 사용하는 Amazon Redshift 작업 모두에 대한 액세스 권한을 허용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowRedshift",
      "Action": [
        "redshift:*"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}
```

------

`Action` 요소에서 값 `redshift:*`는 Amazon Redshift의 모든 작업을 의미합니다.

### 예 2: 한 Amazon Redshift 작업 집합에 대한 사용자 액세스 거부
<a name="redshift-policy-example-deny-specific-actions"></a>

기본적으로 모든 권한을 거부합니다. 하지만 간혹 특정 작업 또는 작업 집합에 대한 액세스를 명시적으로 거부해야 하는 경우도 있습니다. 이때는 다음 정책을 통해 모든 Amazon Redshift 작업에 대한 액세스를 허용하면서, 이름이 `Delete`로 시작하는 Amazon Redshift 작업에 대해서는 액세스를 명시적으로 거부할 수 있습니다. 이 정책은 `us-west-2`에 속한 모든 Amazon Redshift 리소스에 적용됩니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowUSWest2Region",
      "Action": [
        "redshift:*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:redshift:us-east-1:111122223333:*"
    },
   {
     "Sid":"DenyDeleteUSWest2Region",
     "Action": [
        "redshift:Delete*"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:redshift:us-east-1:111122223333:*"
   }
  ]
}
```

------

### 예 3: 사용자에게 클러스터 관리 허용
<a name="redshift-policy-example-allow-manage-clusters"></a>

다음 정책은 사용자에게 모든 클러스터를 생성, 삭제, 수정 및 재부팅할 수 있도록 허용한 후 클러스터 이름이 `protected`으로 시작되는 모든 클러스터를 삭제하는 권한을 거부합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowClusterManagement",
      "Action": [
        "redshift:CreateCluster",
        "redshift:DeleteCluster",
        "redshift:ModifyCluster",
        "redshift:RebootCluster"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"DenyDeleteProtected",
      "Action": [
        "redshift:DeleteCluster"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:cluster:protected*"
      ],
      "Effect": "Deny"
    }
  ]
}
```

------

### 예 4: 사용자가 스냅샷 액세스 권한을 부여하거나 취소하도록 허용
<a name="redshift-policy-example-allow-authorize-revoke-snapshot"></a>

다음 정책은 사용자(사용자 A)에게 아래와 같은 작업을 허용합니다.
+ `shared`라는 이름의 클러스터에서 생성된 모든 스냅샷에 대한 액세스 권한을 부여합니다.
+ `shared` 클러스터에서 생성된 스냅샷 중에서 이름이 `revokable`로 시작하는 모든 스냅샷에 대한 액세스 권한을 취소합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowSharedSnapshots",
      "Action": [
        "redshift:AuthorizeSnapshotAccess"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:shared/*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"AllowRevokableSnapshot",
      "Action": [
        "redshift:RevokeSnapshotAccess"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:*/revokable*"
      ],
      "Effect": "Allow"
    }
  ]
}
```

------

사용자 A가 사용자 B에게 스냅샷에 대한 액세스를 허용한 경우에는 다음과 같이 사용자 B에게 스냅샷에서 클러스터를 복원할 수 있는 정책이 할당되어야 합니다. 다음 정책은 사용자 B에게 스냅샷에 대해 설명한 후 이를 통해 복원하거나, 클러스터를 생성할 수 있는 권한을 허용합니다. 클러스터의 이름은 `from-other-account`로 시작해야 합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowDescribeSnapshots",
      "Action": [
        "redshift:DescribeClusterSnapshots"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"AllowUserRestoreFromSnapshot",
      "Action": [
        "redshift:RestoreFromClusterSnapshot"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:*/*",
        "arn:aws:redshift:us-west-2:444455556666:cluster:from-other-account*"
      ],
      "Effect": "Allow"
    }
  ]
}
```

------

### 예 5: 사용자가 클러스터 스냅샷을 복사한 후 스냅샷에서 클러스터를 복원하도록 허용
<a name="redshift-policy-example-allow-copy-restore-snapshot"></a>

다음 정책은 사용자에게 `big-cluster-1`이라는 이름의 클러스터에서 생성된 모든 스냅샷을 복사한 후 그 중에서 이름이 `snapshot-for-restore`로 시작하는 스냅샷을 복원하도록 허용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowCopyClusterSnapshot",
      "Action": [
        "redshift:CopyClusterSnapshot"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:big-cluster-1/*"
      ],
      "Effect": "Allow"
    },
    {
      "Sid":"AllowRestoreFromClusterSnapshot",
      "Action": [
        "redshift:RestoreFromClusterSnapshot"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:snapshot:*/snapshot-for-restore*",
        "arn:aws:redshift:us-west-2:123456789012:cluster:*"
      ],
      "Effect": "Allow"
    }
  ]
}
```

------

### 예 6: Amazon Redshift 및 관련 AWS 서비스의 공통 작업과 리소스에 대한 사용자 액세스 허용
<a name="redshift-policy-example-allow-related-services"></a>

 다음 예제 정책은 Amazon Redshift, Amazon Simple Notification Service(Amazon SNS) 및 Amazon CloudWatch에 대한 모든 작업과 리소스에 대한 액세스를 허용합니다. 또한 해당 계정에서 관련된 모든 Amazon EC2 리소스에 대한 지정된 작업을 허용합니다.

**참고**  
 이 정책 예에서 지정하는 Amazon EC2 작업은 리소스 수준 권한이 지원되지 않습니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid":"AllowRedshift",
      "Effect": "Allow",
      "Action": [
        "redshift:*"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid":"AllowSNS",
      "Effect": "Allow",
        "Action": [
          "sns:*"
        ],
        "Resource": [
          "*"
        ]
      },
    {
      "Sid":"AllowCloudWatch",
      "Effect": "Allow",
      "Action": [
        "cloudwatch:*"
      ],
      "Resource": [
        "*"
      ]
    },
    {
      "Sid":"AllowEC2Actions",
      "Effect": "Allow",
      "Action": [
        "ec2:AllocateAddress",
        "ec2:AssociateAddress",
        "ec2:AttachNetworkInterface",
        "ec2:DescribeAccountAttributes",
        "ec2:DescribeAddresses",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeInternetGateways",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSubnets",
        "ec2:DescribeVpcs"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
```

------

### 예제 7: 사용자가 Amazon Redshift 콘솔로 리소스에 태그를 지정할 수 있도록 허용
<a name="redshift-policy-example-allow-tagging-with-console"></a>

다음 예제 정책에서는 사용자가 AWS Resource Groups를 사용하여 Amazon Redshift 콘솔로 리소스에 태그를 지정할 수 있도록 허용합니다. 새 Amazon Redshift 콘솔이나 원래 Amazon Redshift 콘솔을 호출하는 사용자 역할에 이 정책을 연결할 수 있습니다. 태그 지정에 대한 자세한 내용은 [Amazon Redshift에서 리소스 태그](amazon-redshift-tagging.md) 섹션을 참조하세요.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid":"TaggingPermissions",
            "Effect": "Allow",
            "Action": [
                "redshift:DeleteTags",
                "redshift:CreateTags",
                "redshift:DescribeTags",
                "tag:UntagResources",
                "tag:TagResources"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## 예제 8: GetClusterCredentials 사용을 위한 IAM 정책 예제
<a name="redshift-policy-examples-getclustercredentials"></a>

다음 정책은 다음과 같은 샘플 파라미터 값을 사용합니다.
+ 리전: `us-west-2` 
+ AWS 계정: `123456789012` 
+ 클러스터 이름: `examplecluster` 

다음 정책은 `GetCredentials`, `CreateClusterUser`, `JoinGroup` 작업을 허용합니다. 이 정책은 조건 키를 사용하여 `GetClusterCredentials` 및 `CreateClusterUser` 작업을 허용합니다. 이것은 AWS 사용자 ID가 `"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com"`과 일치할 때만 해당됩니다. IAM 액세스는 `"testdb"` 데이터베이스에 대해서만 요청됩니다. 또한 이 정책은 사용자가 `"common_group"`이라는 그룹을 조인할 수 있도록 허용합니다.

------
#### [ JSON ]

****  

```
{
"Version":"2012-10-17",		 	 	 
  "Statement": [
    {
     "Sid":"GetClusterCredsStatement",
      "Effect": "Allow",
      "Action": [
        "redshift:GetClusterCredentials"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/${redshift:DbUser}",
        "arn:aws:redshift:us-west-2:123456789012:dbname:examplecluster/testdb",
        "arn:aws:redshift:us-west-2:123456789012:dbgroup:examplecluster/common_group"
      ],
        "Condition": {
           "StringEquals": {
           "aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com"
           }
        }
    },
    {
      "Sid":"CreateClusterUserStatement",
      "Effect": "Allow",
      "Action": [
        "redshift:CreateClusterUser"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/${redshift:DbUser}"
      ],
      "Condition": {
        "StringEquals": {
          "aws:userid":"AIDIODR4TAW7CSEXAMPLE:${redshift:DbUser}@yourdomain.com"
        }
      }
    },
    {
      "Sid":"RedshiftJoinGroupStatement",
      "Effect": "Allow",
      "Action": [
        "redshift:JoinGroup"
      ],
      "Resource": [
        "arn:aws:redshift:us-west-2:123456789012:dbgroup:examplecluster/common_group"
      ]
    }
  ]
}
```

------

다음 예는 IAM 역할이 `GetClusterCredentials` 작업을 호출하도록 허용하는 정책입니다. Amazon Redshift `dbuser` 리소스를 지정하면 데이터베이스 사용자 이름 ` temp_creds_user`(` examplecluster`라는 클러스터에서)에 역할의 액세스를 허용합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "redshift:GetClusterCredentials",
    "Resource": "arn:aws:redshift:us-west-2:123456789012:dbuser:examplecluster/temp_creds_user"
  }
}
```

------

와일드카드(\$1)를 사용하여 클러스터 이름, 사용자 이름, 데이터베이스 그룹 이름의 일부 또는 전부를 대체할 수 있습니다. 다음은 지정 계정에서 아무 클러스터가 있는 `temp_`로 시작하는 모든 사용자 이름을 허용하는 예입니다.

**중요**  
다음 예의 구문은 리소스의 값의 일부로 와일드카드 문자(\$1)를 지정하여 정책이 해당 문자로 시작하는 모든 리소스를 허용하게 합니다. IAM 정책에 와일드카드 문자를 사용하면 너무 허용적일 수 있습니다. 가장 좋은 방법은 해당 업무 용도에 맞는 정책 중 가장 제한적인 정책을 사용하는 것입니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": "redshift:GetClusterCredentials",
    "Resource": "arn:aws:redshift:us-west-2:123456789012:dbuser:*/temp_*"
  }
}
```

------

다음 예는 IAM 역할이 새 사용자를 자동으로 생성하고 사용자 로그인 시 조인하는 그룹을 지정하는 옵션으로 `GetClusterCredentials` 작업의 호출을 허용하는 정책입니다. `"Resource": "*" ` 절은 클러스터, 데이터베이스 사용자, 또는 사용자 그룹을 포함한 모든 리소스에 역할 액세스 권한을 허용합니다.

**중요**  
다음 예제의 문은 와일드카드 문자(\$1)를 지정된 작업에 대한 리소스로 지정하므로, 정책은 모든 클러스터 및 데이터베이스 사용자에 대한 액세스를 허용하고 모든 사용자를 생성할 수 있습니다. IAM 정책에 와일드카드 문자를 사용하면 너무 허용적일 수 있습니다. 가장 좋은 방법은 해당 업무 용도에 맞는 정책 중 가장 제한적인 정책을 사용하는 것입니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": {
    "Effect": "Allow",
    "Action": [
             "redshift:GetClusterCredentials",
             "redshift:CreateClusterUser",
		"redshift:JoinGroup"
            ],
    "Resource": "*"
  }
}
```

------

자세한 내용은 [Amazon Redshift ARN 구문](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arn-syntax-redshift)을 참조하십시오.

# Amazon Redshift용 네이티브 자격 증명 공급자(IdP) 페더레이션
<a name="redshift-iam-access-control-native-idp"></a>

네이티브 자격 증명 공급자 페더레이션을 사용하면 기존 자격 증명 공급자를 활용하여 인증 및 권한 관리를 간소화하기 때문에 Amazon Redshift에 대한 자격 증명 및 권한 관리가 더 쉬워집니다. 이는 자격 증명 공급자로부터 Redshift로 자격 증명 메타데이터를 공유할 수 있기 때문에 가능합니다. 이 기능을 처음 사용 시 지원되는 자격 증명 공급자는 [Microsoft Azure Active Directory(Azure AD)](https://azure.microsoft.com/en-us/services/active-directory/)입니다.

서드 파티 자격 증명 공급자의 자격 증명을 인증할 수 있도록 Amazon Redshift를 구성하려면 Amazon Redshift에 자격 증명 공급자를 등록합니다. 이렇게 하면 Redshift는 자격 증명 공급자가 정의한 사용자와 역할을 인증할 수 있습니다. 따라서 자격 증명 정보가 공유되므로 서드 파티 자격 증명 공급자와 Amazon Redshift 모두에서 세분화된 자격 증명 관리를 수행하지 않아도 됩니다.

ID 제공업체(iDP) 그룹에서 전송된 세션 역할을 사용하는 방법에 대한 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서**의 [PG\$1GET\$1SESSION\$1ROLES](https://docs.aws.amazon.com/redshift/latest/dg/PG_GET_SESSION_ROLES.html)를 참조하세요.

## 네이티브 ID 제공업체(idP) 페더레이션
<a name="redshift-iam-access-control-native-idp-login"></a>

 자격 증명 공급자와 Amazon Redshift 간의 예비 설정을 완료하려면 몇 가지 단계를 수행합니다. 먼저 Amazon Redshift를 자격 증명 공급자에 서드 파티 애플리케이션으로 등록하고 필요한 API 권한을 요청합니다. 그런 다음 자격 증명 공급자에서 사용자 및 그룹을 생성합니다. 마지막으로 자격 증명 공급자에 고유한 인증 파라미터를 설정하는 SQL 문을 사용하여 Amazon Redshift에 자격 증명 공급자를 등록합니다. 자격 증명 공급자를 Redshift에 등록하는 과정에서 네임스페이스를 할당하여 사용자와 역할이 올바르게 그룹화되도록 합니다.

 Amazon Redshift에 자격 증명 공급자가 등록되면 Redshift와 자격 증명 공급자 간에 통신이 설정됩니다. 그런 다음 클라이언트는 토큰을 전달하고 Redshift에 자격 증명 공급자 엔터티로 인증할 수 있습니다. Amazon Redshift는 IdP 그룹 멤버십 정보를 사용하여 Redshift 역할에 매핑합니다. 사용자가 이전에 Redshift에 존재하지 않는 경우 사용자가 생성됩니다. 자격 증명 공급자 그룹에 매핑되는 역할이 존재하지 않는 경우 새로 생성됩니다. Amazon Redshift 관리자는 역할에 권한을 부여하며 사용자는 쿼리를 실행하고 다른 데이터베이스 작업을 수행할 수 있습니다.

다음 단계에서는 사용자가 로그인할 때 네이티브 자격 증명 공급자 페더레이션이 작동하는 방식을 간략하게 설명합니다.

1. 사용자가 네이티브 IdP 옵션을 사용하여 로그인하면 자격 증명 공급자 토큰이 클라이언트에서 드라이버로 전송됩니다.

1. 사용자가 인증됩니다. 사용자가 Amazon Redshift에 아직 존재하지 않으면 새 사용자가 생성됩니다. Redshift는 사용자의 자격 증명 공급자 그룹을 Redshift 역할에 매핑합니다.

1. 사용자의 Redshift 역할에 따라 권한이 할당됩니다. 권한은 관리자가 사용자 및 역할에 부여합니다.

1. 사용자가 Redshift를 쿼리할 수 있습니다.

## 데스크톱 클라이언트 도구
<a name="redshift-iam-access-control-native-idp-oauth"></a>

네이티브 자격 증명 공급자 페더레이션을 사용하여 Power BI로 Amazon Redshift에 연결하는 방법에 대한 지침은 블로그 게시물 [Integrate Amazon Redshift native IdP federation with Microsoft Azure Active Directory (AD) and Power BI](https://aws.amazon.com/blogs/big-data/integrate-amazon-redshift-native-idp-federation-with-microsoft-azure-ad-and-power-bi/)(Microsoft Azure Active Directory(AD) 및 Power BI와 Amazon Redshift 네이티브 IdP 페더레이션 통합)를 참조하세요. 이 블로그에서는 Azure AD를 사용한 Amazon Redshift 네이티브 IdP 설정의 단계별 구현을 설명합니다. Power BI Desktop 또는 Power BI 서비스에 대한 클라이언트 연결을 설정하는 단계를 자세히 설명합니다. 이 단계에는 애플리케이션 등록, 권한 구성 및 보안 인증 구성이 포함됩니다.

Power BI Desktop 및 JDBC Client-SQL Workbench/J를 사용하여 Amazon Redshift 기본 IdP(아이덴티티 제공업체) 페더레이션을 Azure AD와 통합하는 방법을 알아보려면 다음 비디오를 시청하세요.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/S3MQLvZ-NiI/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/S3MQLvZ-NiI)


네이티브 자격 증명 공급자 페더레이션을 사용하여 SQL 클라이언트, 특히 DBeaver 또는 SQL Workbench/J로 Amazon Redshift에 연결하는 방법에 대한 지침은 [Integrate Amazon Redshift native IdP federation with Microsoft Azure AD using a SQL client](https://aws.amazon.com/blogs/big-data/integrate-amazon-redshift-native-idp-federation-with-microsoft-azure-ad-using-a-sql-client/)(SQL 클라이언트를 사용하여 Microsoft Azure AD와 Amazon Redshift 네이티브 IdP 페더레이션 통합)를 참조하세요.

## 제한 사항
<a name="redshift-iam-access-control-idp-connect-limitations"></a>

이러한 제한 사항이 적용됩니다.
+  Amazon Redshift 드라이버는 다음 버전부터 `BrowserIdcAuthPlugin`을 지원합니다.
  +  Amazon Redshift JDBC 드라이버 v2.1.0.30 
  +  Amazon Redshift ODBC 드라이버 v2.1.3 
  +  Amazon Redshift Python 드라이버 v2.1.3 
+  Amazon Redshift 드라이버는 다음 버전부터 `IdpTokenAuthPlugin`을 지원합니다.
  +  Amazon Redshift JDBC 드라이버 v2.1.0.19 
  +  Amazon Redshift ODBC 드라이버 v2.0.0.9 
  +  Amazon Redshift Python 드라이버 v2.0.914 
+ **향상된 VPC 지원 안 함** - AWS IAM Identity Center를 사용하여 Redshift 신뢰할 수 있는 ID 전파를 구성할 때는 향상된 VPC가 지원되지 않습니다. 향상된 VPC에 대한 자세한 내용은 [Amazon Redshift의 Enhanced VPC Routing](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html)을 참조하세요.
+  **AWS IAM Identity Center 캐싱** - AWS IAM Identity Center는 세션 정보를 캐싱합니다. 이 경우 Redshift 쿼리 에디터 v2를 통해 Redshift 쿼리 데이터베이스에 연결하려고 할 때 예기치 않은 액세스 문제가 발생할 수 있습니다. 데이터베이스 사용자가 AWS 콘솔에서 로그아웃한 경우에도 쿼리 에디터 v2의 연결된 AWS IAM Identity Center 세션이 유효하기 때문입니다. 캐시는 1시간 후에 만료되므로 일반적으로 모든 문제가 해결됩니다.

# Amazon Redshift Redshift에서 자격 증명 공급자 설정
<a name="redshift-iam-access-control-native-idp-setup"></a>

이 섹션에서는 네이티브 자격 증명 공급자 페더레이션을 위한 통신을 설정하도록 자격 증명 공급자와 Amazon Redshift를 구성하는 단계를 보여줍니다. 자격 증명 공급자의 활성 계정이 필요합니다. Amazon Redshift를 구성하기 전에 Redshift를 자격 증명 공급자에 애플리케이션으로 등록하고 관리자 동의를 얻습니다.

Amazon Redshift에서 다음 단계를 완료합니다.

1. SQL 문을 실행하여 Azure 애플리케이션 메타데이터에 대한 설명과 함께 자격 증명 공급자를 등록합니다. Amazon Redshift에서 자격 증명 공급자를 생성하려면 파라미터 값 *issuer*, *client\$1id*, *client\$1secret* 및 *audience*를 바꾼 후 다음 명령을 실행합니다. 이러한 파라미터는 Microsoft Azure AD에만 적용됩니다. 자격 증명 공급자 이름을 선택한 이름으로 바꾸고 네임스페이스를 자격 증명 공급자 디렉터리의 사용자와 역할을 포함하는 고유한 이름으로 바꿉니다.

   ```
   CREATE IDENTITY PROVIDER oauth_standard TYPE azure
   NAMESPACE 'aad'
   PARAMETERS '{
   "issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
   "client_id":"<client_id>",
   "client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
   "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
   }'
   ```

   `azure` 유형은 공급자가 특히 Microsoft Azure AD와의 통신을 용이하게 함을 나타냅니다. 현재 유일하게 지원되는 서드 파티 자격 증명 공급자입니다.
   + *issuer* - 토큰을 수신할 때 신뢰할 수 있는 발급자 ID입니다. *tenant\$1id*의 고유 식별자가 발급자에 추가됩니다.
   + *client\$1id* - 자격 증명 공급자에 등록된 애플리케이션의 고유한 퍼블릭 식별자입니다. 애플리케이션 ID라고도 합니다.
   + *client\$1secret* - 자격 증명 공급자와 등록된 애플리케이션에게만 알려진 비밀 식별자 또는 암호입니다.
   + *audience* - Azure의 애플리케이션에 할당된 애플리케이션 ID입니다.

   

   공유 클라이언트 비밀을 사용하는 대신, 아이덴티티 제공업체를 생성할 때 파라미터를 설정하여 인증서, 프라이빗 키 및 프라이빗 키 암호를 지정할 수 있습니다.

   ```
   CREATE IDENTITY PROVIDER example_idp TYPE azure 
   NAMESPACE 'example_aad' 
   PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/", 
   "client_id":"<client_id>", 
   "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"], 
   "client_x5t":"<certificate thumbprint>", 
   "client_pk_base64":"<private key in base64 encoding>", 
   "client_pk_password":"test_password"}';
   ```

   프라이빗 키 암호 *client\$1pk\$1password*는 선택 사항입니다.

1. 선택 사항: Amazon Redshift에서 SQL 명령을 실행하여 사용자와 역할을 미리 생성합니다. 이를 통해 사전에 권한을 쉽게 부여할 수 있습니다. Amazon Redshift에서 역할 이름의 형식은 *<Namespace>: <GroupName on Azure AD>*입니다. 예를 들어 이름이 `rsgroup`인 Microsoft Azure AD 그룹과 이름이 `aad`인 네임스페이스를 생성한 경우 역할 이름은 `aad:rsgroup`입니다. Amazon Redshift의 사용자 및 역할 이름은 ID 제공업체 네임스페이스에서 이 사용자 이름 및 그룹 멤버십으로 정의됩니다.

   역할 및 사용자의 매핑 작업에는 `external_id` 값을 통해 최신 상태인지 확인하는 것이 포함됩니다. 외부 ID가 ID 공급자의 그룹 또는 사용자의 식별자에 매핑됩니다. 예를 들어 역할의 외부 ID는 해당 Azure AD 그룹 ID에 매핑됩니다. 마찬가지로 각 사용자의 외부 ID는 ID 공급자의 ID에 매핑됩니다.

   ```
   create role "aad:rsgroup";
   ```

1. 요구 사항에 따라 역할에 관련 권한을 부여합니다. 예를 들면 다음과 같습니다.

   ```
   GRANT SELECT on all tables in schema public to role "aad:rsgroup";
   ```

1. 특정 사용자에게 권한을 부여할 수도 있습니다.

   ```
   GRANT SELECT on table foo to aad:alice@example.com
   ```

   페더레이션된 외부 사용자의 역할 멤버십은 해당 사용자의 세션에서만 사용할 수 있다는 점에 유의하세요. 이는 데이터베이스 객체 생성에 영향을 미칩니다. 예를 들어 페더레이션된 외부 사용자가 뷰 또는 저장 프로시저를 만드는 경우 동일한 사용자는 해당 개체의 권한을 다른 사용자 및 역할에 위임할 수 없습니다.

**네임스페이스에 대한 설명**

네임스페이스는 사용자 또는 역할을 특정 자격 증명 공급자에 매핑합니다. 예를 들어, AWS IAM에서 생성한 사용자의 접두사는 `iam:`입니다. 이 접두사는 사용자 이름 충돌을 방지하고 여러 ID 저장소를 지원할 수 있게 합니다. *aad* 네임스페이스에 등록된 자격 증명 소스의 alice@example.com 사용자가 로그인할 때 `aad:alice@example.com` 사용자가 존재하지 않는 경우 Redshift에서 사용자가 생성됩니다. 사용자 및 역할 네임스페이스는 클러스터와 연결된 고유 식별자인 Amazon Redshift 클러스터 네임스페이스와 기능이 다릅니다.

# ID 제공업체에 대한 Amazon Redshift 역할 자동 생성
<a name="redshift-iam-access-control-native-idp-autocreate"></a>

이 기능을 사용하면 ID 제공업체(idP)의 그룹 멤버십을 기반으로 Redshift에서 역할을 자동으로 생성할 수 있습니다. 자동 생성 역할은 기본 IdP 통합을 통해 Azure Active Directory를 지원합니다.

역할을 자동으로 생성하면 몇 가지 이점이 있습니다. 역할을 자동 생성할 때 Redshift는 IdP에 그룹 멤버십이 있는 역할을 생성하므로 번거로운 수동 역할 생성 및 유지 관리를 피할 수 있습니다. Redshift 역할에 매핑되는 그룹을 필터링할 수도 있습니다.

## 작동 방식
<a name="sso-autocreate-overview"></a>

IdP 사용자로서 Redshift에 로그인하면 다음과 같은 이벤트 시퀀스가 발생합니다.

1. Redshift는 IdP에서 그룹 멤버십을 검색합니다.

1. Redshift는 역할 형식 `idp_namespace:rolename`을 사용하여 해당 그룹에 대한 역할 매핑을 자동으로 생성합니다.

1. Redshift는 매핑된 역할에 대한 권한을 부여합니다.

각 사용자 로그인 시 카탈로그에는 없지만 사용자가 속한 각 그룹이 자동으로 생성됩니다. 선택적으로 필터 포함 및 제외를 설정하여 Redshift 역할이 생성된 IdP 그룹을 제어할 수 있습니다.

## 역할 자동 생성 구성
<a name="sso-autocreate-configuring"></a>

`CREATE IDENTITY PROVIDER` 및 `ALTER IDENTITY PROVIDER` 명령을 사용하여 자동 역할 생성을 활성화하고 구성합니다.

```
-- Create a new IdP with auto role creation enabled
CREATE IDENTITY PROVIDER <idp_name> TYPE azure
  NAMESPACE '<namespace>' 
  APPLICATION_ARN 'app_arn'
  IAM_ROLE 'role_arn'
  AUTO_CREATE_ROLES TRUE; 

-- Enable on existing IdP 
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES TRUE;

-- Disable  
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES FALSE;
```

## 그룹 필터링
<a name="sso-autocreate-filtering"></a>

선택적으로 `INCLUDE` 및 `EXCLUDE` 패턴을 사용하여 Redshift 역할에 매핑되는 IdP 그룹을 필터링할 수 있습니다. 패턴이 충돌하면 `EXCLUDE`가 `INCLUDE`보다 우선합니다.

```
-- Only create roles for groups with 'dev' 
CREATE IDENTITY PROVIDER <idp_name> TYPE azure
  ...
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%';
    
-- Exclude 'test' groups
ALTER IDENTITY PROVIDER <idp_name> 
  AUTO_CREATE_ROLES TRUE
  EXCLUDE GROUPS LIKE '%test%';
```

## 예제
<a name="sso-autocreate-filtering"></a>

다음 예제에서는 필터링 없이 역할 자동 생성을 활성화하는 방법을 보여줍니다.

```
CREATE IDENTITY PROVIDER prod_idc TYPE azure ...
  AUTO_CREATE_ROLES TRUE;
```

다음 예제에는 개발 그룹이 포함되며 테스트 그룹은 제외됩니다.

```
ALTER IDENTITY PROVIDER prod_idc
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%'
  EXCLUDE GROUPS LIKE '%test%';
```

## 모범 사례
<a name="sso-autocreate-bp"></a>

역할에 대해 자동 생성을 활성화할 때 다음 모범 사례를 고려하세요.
+ `INCLUDE` 및 `EXCLUDE` 필터를 사용하여 역할을 가져오는 그룹을 제어합니다.
+ 역할을 정기적으로 감사하고 사용하지 않는 역할을 정리합니다.
+ Redshift 역할 계층 구조를 활용하여 권한 관리를 간소화합니다.

# Single Sign-On 경험을 위해 Redshift와 AWS IAM Identity Center 연결
<a name="redshift-iam-access-control-idp-connect"></a>

신뢰할 수 있는 ID 전파를 통해 Amazon Redshift 데이터 웨어하우스에 대한 사용자 및 그룹 액세스를 관리할 수 있습니다.

[신뢰할 수 있는 ID 전파](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overview.html)는 연결된 AWS 서비스의 관리자가 서비스 데이터에 대한 액세스 권한을 부여하고 감사하는 데 사용할 수 있는 AWS IAM Identity Center 기능입니다. 이 데이터에 대한 액세스는 그룹 연결과 같은 사용자 속성을 기반으로 합니다. 신뢰할 수 있는 ID 전파를 설정하려면 연결된 AWS 서비스의 관리자와 IAM Identity Center 관리자 간의 협업이 필요합니다. 자세한 내용은 [사전 조건 및 고려 사항](https://docs.aws.amazon.com//singlesignon/latest/userguide/trustedidentitypropagation-overall-prerequisites.html)을 참조하세요.

한 가지 엔드 투 엔드 사례를 설명하자면, Amazon Quick 대시보드 또는 Amazon Redshift 쿼리 에디터 v2를 사용하여 Redshift에 액세스할 수 있습니다. 이 경우 액세스는 AWS IAM Identity Center 그룹을 기반으로 합니다. Redshift는 사용자의 신원과 그룹 멤버십을 확인할 수 있습니다. AWS IAM Identity Center에서는 Okta 또는 PingOne과 같은 서드 파티 ID 제공업체(idP)를 통해 ID를 연결하고 관리할 수 있습니다.

관리자가 Redshift와 AWS IAM Identity Center 간의 연결을 설정한 후에는 ID 제공업체 그룹을 기반으로 세분화된 액세스를 구성하여 데이터에 대한 사용자 액세스 권한을 부여할 수 있습니다.

**중요**  
AWS IAM Identity Center 또는 연결된 ID 제공업체(idP) 디렉터리에서 사용자를 삭제하는 경우 Amazon Redshift 카탈로그에서 사용자가 자동으로 삭제되지는 않습니다. Amazon Redshift 카탈로그에서 사용자를 수동으로 삭제하려면 `DROP USER` 명령을 실행하여 AWS IAM Identity Center 또는 idP에서 제거된 사용자를 완전히 삭제합니다. 사용자 제거에 관한 자세한 내용은 *Amazon Redshift 데이터베이스 개발자 안내서*에 나와 있는 [DROP USER](https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_USER.html)를 참고하시기 바랍니다.

## Redshift와 AWS IAM Identity Center를 통합하여 얻을 수 있는 이점
<a name="redshift-iam-access-control-idp-connect-benefits"></a>

Redshift와 함께 AWS IAM Identity Center를 사용하면 조직이 다음과 같은 이점을 얻을 수 있습니다.
+  Amazon Quick의 대시보드 작성자는 암호를 다시 입력하거나 관리자가 복잡한 권한으로 IAM 역할을 설정할 필요 없이 Redshift 데이터 소스에 연결할 수 있습니다.
+  AWS IAM Identity Center는 AWS의 직원 사용자를 위한 중앙 위치를 제공합니다. AWS IAM Identity Center에서 직접 사용자 및 그룹을 만들거나 Okta, PingOne 또는 Microsoft Entra ID(Azure AD)와 같은 표준 기반 ID 제공업체에서 관리하는 기존 사용자 및 그룹을 연결할 수 있습니다. AWS IAM Identity Center는 사용자 및 그룹을 위해 선택한 정보 소스로 인증을 지시하고 Redshift에서 액세스할 수 있는 사용자 및 그룹 디렉터리를 유지 관리합니다. 자세한 내용은 **AWS IAM Identity Center 사용 설명서의 [ID 소스 관리](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source.html) 및 [지원되는 ID 제공업체](https://docs.aws.amazon.com/singlesignon/latest/userguide/supported-idps.html)를 참조하세요.
+ 간단한 자동 검색 및 연결 기능을 사용하여 하나의 AWS IAM Identity Center 인스턴스를 여러 Redshift 클러스터 및 작업 그룹과 공유할 수 있습니다. 따라서 각 클러스터에 대해 AWS IAM Identity Center 연결을 별도로 구성하지 않고도 클러스터를 빠르게 추가할 수 있으며, 모든 클러스터와 작업 그룹이 사용자, 사용자 속성 및 그룹을 일관되게 볼 수 있습니다. 단, 조직의 AWS IAM Identity Center 인스턴스는 연결하려는 Redshift 데이터 공유와 동일한 리전에 있어야 합니다.
+ 사용자 ID는 데이터 액세스와 함께 알려지고 로깅되므로 AWS CloudTrail에서 사용자 액세스 감사를 통해 규정을 더 쉽게 충족할 수 있습니다.

## 애플리케이션 연결을 위한 관리자 페르소나
<a name="redshift-iam-access-control-idp-personas"></a>

다음은 분석 애플리케이션을 Redshift용 AWS IAM Identity Center 관리형 애플리케이션에 연결하는 데 있어 핵심이 되는 페르소나입니다.
+ **애플리케이션 관리자** - 애플리케이션을 생성하고 ID-토큰 교환을 가능하게 할 서비스를 구성합니다. 또한 이 관리자는 애플리케이션에 액세스할 수 있는 사용자 또는 그룹을 지정합니다.
+ **데이터 관리자** - 데이터에 대한 세분화된 액세스를 구성합니다. AWS IAM Identity Center의 사용자 및 그룹은 특정 권한에 매핑될 수 있습니다.

## Amazon Quick를 통해 AWS IAM Identity Center와 연결된 Amazon Redshift에 연결
<a name="redshift-iam-access-control-idp-connect-qs"></a>

[Quick에서 Amazon Redshift 클러스터로의 연결 승인](https://docs.aws.amazon.com/quick/latest/userguide/enabling-access-redshift.html)에서는 Redshift가 AWS IAM Identity Center에 연결되고 IAM Identity Center를 통해 액세스가 관리되는 경우 Quick을 사용하여 Redshift를 인증하는 방법을 보여 줍니다. 이 단계는 Amazon Redshift Serverless에도 적용됩니다.

## Amazon Redshift 쿼리 에디터 v2를 통해 AWS IAM Identity Center와 연결된 Amazon Redshift에 연결
<a name="redshift-iam-access-control-idp-connect-qe"></a>

Redshift와 AWS IAM Identity Center 연결을 설정하는 단계를 완료하면 사용자는 AWS IAM Identity Center 기반의 네임스페이스 접두사가 붙은 ID를 통해 데이터베이스 및 데이터베이스의 적절한 객체에 액세스할 수 있습니다. 쿼리 에디터 v2 로그인으로 Redshift 데이터베이스에 연결하는 방법에 대한 자세한 내용은 [Query Editor V2를 사용하여 데이터베이스 쿼리Amazon Redshift 쿼리 편집기 v2를 사용하여 데이터베이스 쿼리](query-editor-v2.md) 섹션을 참조하세요.



## 여러 AWS 리전에서 AWS IAM Identity Center 사용
<a name="redshift-iam-access-control-idp-connect-multi-region"></a>

Amazon Redshift는 여러 AWS 리전에서 AWS IAM Identity Center를 지원합니다. AWS IAM Identity Center를 기본 AWS 리전에서 추가 리전으로 확장하여 사용자와의 근접성과 신뢰성을 통해 성능을 개선할 수 있습니다. AWS IAM Identity Center에 새 리전이 추가되면 기본 리전에서 ID를 복제하지 않고도 새 리전에서 Redshift IAM Identity Center 애플리케이션을 생성할 수 있습니다. 행 수준, 열 수준 및 마스킹 제어를 활성화할 수 있는 새 리전에서 AWS IAM Identity Center를 사용하여 Amazon Redshift 페더레이션 권한을 설정할 수 있습니다. 여러 리전에서 AWS IAM Identity Center를 시작하는 방법에 대한 자세한 내용은 *AWS IAM Identity Center 사용 설명서*의 [여러 AWS 리전에서 AWS IAM Identity Center 관리](https://docs.aws.amazon.com/singlesignon/latest/userguide/multi-region-iam-identity-center.html)를 참조하세요.

## AWS IAM Identity Center를 사용하여 Amazon Redshift에 연결 시 제한 사항
<a name="redshift-iam-access-control-idp-connect-limitations"></a>

AWS IAM Identity Center Single Sign-On을 사용할 때는 다음 제한 사항을 고려하세요.


+  **향상된 VPC 지원 없음** - Amazon Redshift에 AWS IAM Identity Center Single Sign-On을 사용하는 경우 향상된 VPC가 지원되지 않습니다. 향상된 VPC에 대한 자세한 내용은 [Amazon Redshift의 Enhanced VPC Routing](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html)을 참조하세요.

# Amazon Redshift와 AWS IAM Identity Center 통합 설정
<a name="redshift-iam-access-control-idp-connect-console"></a>

Amazon Redshift 클러스터 관리자 또는 Amazon Redshift Serverless 관리자는 여러 단계를 수행하여 Redshift를 AWS IAM Identity Center 지원 애플리케이션으로 구성해야 합니다. 이렇게 하면 Redshift는 AWS IAM Identity Center를 자동으로 검색하고 연결하여 로그인 및 사용자 디렉터리 서비스를 받을 수 있습니다. 그런 다음 Redshift 관리자가 클러스터 또는 작업 그룹을 생성할 때 새 데이터 웨어하우스에서 AWS IAM Identity Center를 사용하여 데이터베이스 액세스를 관리하도록 할 수 있습니다.

Redshift를 AWS IAM Identity Center 관리형 애플리케이션으로 활성화하는 이유는 AWS IAM Identity Center 내에서 또는 통합된 타사 ID 제공업체로부터 사용자 및 그룹 권한을 제어할 수 있도록 하기 위해서입니다. 데이터베이스 사용자(예: 분석가 또는 데이터 과학자)가 Redshift 데이터베이스에 로그인하면 AWS IAM Identity Center의 해당 그룹이 Redshift의 역할 이름과 일치하는지 확인합니다. 이러한 방식으로 Redshift 데이터베이스 역할의 이름을 정의하는 그룹은 예를 들어 판매 분석을 위한 테이블 세트에 액세스할 수 있습니다. 다음 섹션에서는 설정 방법을 안내합니다.

## 사전 조건
<a name="redshift-iam-access-control-idp-connect-prerequisites"></a>

AWS IAM Identity Center를 Amazon Redshift와 통합하기 위한 사전 조건은 다음과 같습니다.
+ **계정 구성 - 계정 간 사용 사례를 계획하거나 동일한 AWS IAM Identity Center 인스턴스로 서로 다른 계정에서 Redshift 클러스터를 사용하는 경우 AWS 조직의 관리 계정에서 AWS IAM Identity Center를 구성해야 합니다. 여기에는 ID 소스 구성이 포함됩니다. 자세한 내용은 **AWS IAM Identity Center 사용 설명서의 [시작하기](https://docs.aws.amazon.com/singlesignon/latest/userguide/getting-started.html), [작업 인력 ID](https://docs.aws.amazon.com/singlesignon/latest/userguide/identities.html) 및 [지원되는 ID 제공업체](https://docs.aws.amazon.com/singlesignon/latest/userguide/supported-idps.html)를 참조하세요. Redshift의 데이터에 할당하려면 먼저 AWS IAM Identity Center에서 사용자 또는 그룹을 생성했거나 ID 소스에서 사용자 및 그룹을 동기화해야 합니다.
**참고**  
Redshift와 AWS IAM Identity Center가 동일한 계정에 있는 경우 AWS IAM Identity Center의 계정 인스턴스를 사용할 수 있습니다. Redshift 클러스터 또는 작업 그룹을 만들고 구성할 때 위젯을 사용하여 이 인스턴스를 만들 수 있습니다.
+ **신뢰할 수 있는 토큰 발급자 구성 - 경우에 따라 신뢰 토큰을 발급하고 확인할 수 있는 기관인 신뢰할 수 있는 토큰 발급자를 사용해야 할 수도 있습니다. 이를 위해서는 AWS IAM Identity Center 통합을 구성하는 Redshift 관리자가 신뢰할 수 있는 토큰 발급자를 선택하고 필요한 속성을 추가하여 구성을 완료하기 전에 사전 단계를 거쳐야 합니다. 여기에는 신뢰할 수 있는 토큰 발급자 역할을 하도록 외부 ID 제공업체를 구성하고 AWS IAM Identity Center 콘솔에서 해당 속성을 추가하는 것이 포함될 수 있습니다. 이 단계를 완료하려면 [신뢰할 수 있는 토큰 발급자를 사용하여 애플리케이션 사용](https://docs.aws.amazon.com/singlesignon/latest/userguide/using-apps-with-trusted-token-issuer.html#setuptrustedtokenissuer)을 참조하세요.
**참고**  
모든 외부 연결에 신뢰할 수 있는 토큰 발급자를 설정할 필요는 없습니다. Amazon Redshift 쿼리 에디터 v2를 사용하여 Redshift 데이터베이스에 연결할 때는 신뢰할 수 있는 토큰 발급자 구성이 필요하지 않습니다. 하지만 대시보드와 같은 타사 애플리케이션 또는 ID 제공업체를 통해 인증하는 사용자 지정 애플리케이션에도 적용될 수 있습니다.
+ **하나 이상의 IAM 역할 구성 - 다음 섹션에는 구성해야 하는 권한이 언급되어 있습니다. IAM 모범 사례에 따라 권한을 추가해야 합니다. 구체적인 권한은 다음 절차에 자세히 설명되어 있습니다.

자세한 내용은 [Getting Started with AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-enable-identity-center.html)를 참조하세요.

## AWS IAM Identity Center 작업을 위해 ID 제공업체 구성
<a name="redshift-iam-access-control-idp-connect-admin-config"></a>

사용자 및 그룹 ID 관리를 제어하는 첫 번째 단계는 AWS IAM Identity Center에 연결하고 ID 제공업체를 구성하는 것입니다. AWS IAM Identity Center 자체를 ID 제공업체로 사용하거나 Okta와 같은 타사 ID 저장소를 연결할 수 있습니다. ID 제공업체에 대한 연결 설정 및 구성에 대한 자세한 내용은 **AWS IAM Identity Center 사용 설명서의 [외부 ID 제공업체에 연결](https://docs.aws.amazon.com/singlesignon/latest/userguide/manage-your-identity-source-idp.html)을 참조하세요. 이 프로세스 말미에 테스트하기 위해 AWS IAM Identity Center에 소수의 사용자 및 그룹을 추가했는지 확인하세요.

### 관리 권한
<a name="redshift-iam-access-control-idp-connect-admin-permissions"></a>

#### Redshift/AWS IAM Identity Center 애플리케이션 수명 주기 관리에 필요한 권한
<a name="redshift-iam-access-control-permissions-application"></a>

Redshift 관리자가 AWS IAM Identity Center와 함께 사용하도록 Redshift를 구성하는 데 사용하는 IAM ID를 만들어야 합니다. 대부분의 경우 권한이 있는 IAM 역할을 생성하고 필요에 따라 다른 ID에 할당합니다. 다음 작업을 수행할 수 있는 권한이 나열되어 있어야 합니다.

**Redshift/AWS IAM Identity Center 애플리케이션 생성**
+ `sso:PutApplicationAssignmentConfiguration` - 보안에 사용됩니다.
+ `sso:CreateApplication` - AWS IAM Identity Center 애플리케이션을 생성하는 데 사용됩니다.
+ `sso:PutApplicationAuthenticationMethod` - Redshift 인증 액세스 권한을 부여합니다.
+ `sso:PutApplicationGrant` - 신뢰할 수 있는 토큰 발급자 정보를 변경하는 데 사용됩니다.
+ `sso:PutApplicationAccessScope` - Redshift AWS IAM Identity Center 애플리케이션을 설정하는 데 사용됩니다. 여기에는 AWS Lake Formation용 및 [Amazon S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-get-started.html)용이 포함됩니다.
+ `redshift:CreateRedshiftIdcApplication` - Redshift AWS IAM Identity Center 애플리케이션을 생성하는 데 사용됩니다.

**Redshift/AWSIAM Identity Center 애플리케이션 설명**
+ `sso:GetApplicationGrant` - 신뢰할 수 있는 토큰 발급자 정보를 나열하는 데 사용됩니다.
+ `sso:ListApplicationAccessScopes` - Redshift AWS IAM Identity Center 애플리케이션 설정에서 다운스트림 통합(예: AWS Lake Formation용 및 S3 Access Grants용)을 나열하는 데 사용됩니다.
+ `redshift:DescribeRedshiftIdcApplications` - 기존 AWS IAM Identity Center 애플리케이션을 설명하는 데 사용됩니다.

**Redshift/AWS IAM Identity Center 애플리케이션 변경**
+ `redshift:ModifyRedshiftIdcApplication` - 기존 Redshift 애플리케이션을 변경하는 데 사용됩니다.
+ `sso:UpdateApplication` - AWS IAM Identity Center 애플리케이션을 업데이트하는 데 사용됩니다.
+ `sso:GetApplicationGrant` - 신뢰할 수 있는 토큰 발급자 정보를 가져옵니다.
+ `sso:ListApplicationAccessScopes` - Redshift AWS IAM Identity Center 애플리케이션을 설정하는 데 사용됩니다.
+ `sso:DeleteApplicationGrant` - 신뢰할 수 있는 토큰 발급자 정보를 삭제합니다.
+ `sso:PutApplicationGrant` - 신뢰할 수 있는 토큰 발급자 정보를 변경하는 데 사용됩니다.
+ `sso:PutApplicationAccessScope` - Redshift AWS IAM Identity Center 애플리케이션을 설정하는 데 사용됩니다. 여기에는 AWS Lake Formation용 및 [Amazon S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-get-started.html)용이 포함됩니다.
+ `sso:DeleteApplicationAccessScope` - Redshift AWS IAM Identity Center 애플리케이션을 설정을 삭제하는 데 사용됩니다. 여기에는 AWS Lake Formation용 및 [Amazon S3 Access Grants](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-get-started.html)용이 포함됩니다.

**Redshift/AWS IAM Identity Center 애플리케이션 삭제**
+ `sso:DeleteApplication` - AWS IAM Identity Center 애플리케이션을 삭제하는 데 사용됩니다.
+ `redshift:DeleteRedshiftIdcApplication` - 기존 Redshift AWS IAM Identity Center 애플리케이션을 삭제할 수 있는 기능을 제공합니다.

#### Redshift/쿼리 에디터 v2 애플리케이션 수명 주기 관리에 필요한 권한
<a name="redshift-iam-access-control-permissions-application-qev2"></a>

Redshift 관리자가 AWS IAM Identity Center와 함께 사용하도록 Redshift를 구성하는 데 사용하는 IAM ID를 만들어야 합니다. 대부분의 경우 권한이 있는 IAM 역할을 생성하고 필요에 따라 다른 ID에 할당합니다. 다음 작업을 수행할 수 있는 권한이 나열되어 있어야 합니다.

**쿼리 에디터 v2 애플리케이션 생성**
+ `redshift:CreateQev2IdcApplication` - QEV2 애플리케이션을 생성하는 데 사용됩니다.
+ `sso:CreateApplication` - AWS IAM Identity Center 애플리케이션을 생성하는 권한을 부여합니다.
+ `sso:PutApplicationAuthenticationMethod` - Redshift 인증 액세스 권한을 부여합니다.
+ `sso:PutApplicationGrant` - 신뢰할 수 있는 토큰 발급자 정보를 변경하는 데 사용됩니다.
+ `sso:PutApplicationAccessScope` - Redshift AWS IAM Identity Center 애플리케이션을 설정하는 데 사용됩니다. 여기에는 쿼리 에디터 v2가 포함됩니다.
+ `sso:PutApplicationAssignmentConfiguration` - 보안에 사용됩니다.

**쿼리 에디터 v2 애플리케이션 설명**
+ `redshift:DescribeQev2IdcApplications` - AWS IAM Identity Center QEV2 애플리케이션을 설명하는 데 사용됩니다.

**쿼리 에디터 v2 애플리케이션 변경**
+ `redshift:ModifyQev2IdcApplication` - AWS IAM Identity Center QEV2 애플리케이션을 변경하는 데 사용됩니다.
+ `sso:UpdateApplication` - AWS IAM Identity Center QEV2 애플리케이션을 변경하는 데 사용됩니다.

**쿼리 에디터 v2 애플리케이션 삭제**
+ `redshift:DeleteQev2IdcApplication` - QEV2 애플리케이션을 삭제하는 데 사용됩니다.
+ `sso:DeleteApplication` - QEV2 애플리케이션을 삭제하는 데 사용됩니다.

**참고**  
Amazon Redshift SDK에서는 다음과 같은 API를 사용할 수 없습니다.  
CreateQev2IdcApplication
DescribeQev2IdcApplications
ModifyQev2IdcApplication
DeleteQev2IdcApplication
이러한 작업은 AWS 콘솔에서 AWS IAM Identity Center를 Redshift QEV2와 통합하는 경우에만 사용할 수 있습니다. 자세한 내용은 [Actions defined by Amazon Redshift](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html#amazonredshift-actions-as-permissions)를 참조하세요.

#### 콘솔에서 새 리소스를 연결하기 위해 데이터베이스 관리자에게 필요한 권한
<a name="redshift-iam-access-control-permissions-application-new-resources"></a>

생성 프로세스 중에 새로 프로비저닝된 클러스터 또는 Amazon Redshift Serverless 작업 그룹을 연결하려면 이러한 권한이 필요합니다. 이러한 권한이 있는 경우 콘솔에 Redshift용 AWS IAM Identity Center 관리형 애플리케이션에 연결하도록 선택할 수 있는 선택 항목이 표시됩니다.
+ `redshift:DescribeRedshiftIdcApplications`
+ `sso:ListApplicationAccessScopes`
+ `sso:GetApplicationAccessScope`
+ `sso:GetApplicationGrant`

가장 좋은 방법은 권한 정책을 IAM 역할에 연결한 다음 필요에 따라 사용자 및 그룹에 할당하는 것입니다. 자세한 내용은 [Amazon Redshift의 Identity and Access Management](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)를 참조하세요.

## AWS IAM Identity Center와 연결된 AWS 관리형 애플리케이션으로 Redshift 설정
<a name="redshift-iam-access-control-idp-connect-admin-tasks"></a>

AWS IAM Identity Center에서 Amazon Redshift 프로비저닝 클러스터 또는 Amazon Redshift Serverless 작업 그룹의 ID를 관리하려면 먼저 Redshift 관리자가 Redshift를 AWS IAM Identity Center 관리형 애플리케이션으로 생성하기 위한 단계를 완료해야 합니다.

1. Amazon Redshift 또는 Amazon Redshift Serverless 콘솔 메뉴에서 **AWS IAM Identity Center 통합**을 선택한 다음 **AWS IAM Identity Center에 연결**을 선택합니다. 여기에서 일련의 선택 단계를 수행하여 AWS IAM Identity Center 통합을 위한 속성을 채웁니다.

1. Redshift의 AWS IAM Identity Center 관리형 애플리케이션에 대한 표시 이름과 고유한 이름을 선택합니다.

1. 조직의 네임스페이스를 지정합니다. 일반적으로 조직 이름의 축약된 버전입니다. Redshift 데이터베이스에서 AWS IAM Identity Center 관리형 사용자 및 역할의 접두사로 추가됩니다.

1. 사용할 IAM 역할을 선택합니다. 이 IAM 역할은 Redshift에 사용되는 다른 역할과 분리되어야 하며 다른 용도로는 사용하지 않는 것이 좋습니다. 구체적인 필수 정책 권한은 다음과 같습니다.
   + `sso:DescribeApplication` - 카탈로그에 ID 제공업체(idP) 항목을 생성하는 데 필요합니다.
   + `sso:DescribeInstance` - IdP 페더레이션 역할 또는 사용자를 수동으로 생성하는 데 사용됩니다.

1. 클라이언트 연결 및 신뢰할 수 있는 토큰 발급자를 구성합니다. 신뢰할 수 있는 토큰 발급자를 구성하면 외부 ID 제공업체와의 관계를 설정하여 신뢰할 수 있는 ID 전파가 용이해집니다. 예를 들어 ID 전파를 통해 사용자는 한 애플리케이션에 로그인하고 다른 애플리케이션의 특정 데이터에 액세스할 수 있습니다. 이를 통해 사용자는 서로 다른 위치에서 보다 원활하게 데이터를 수집할 수 있습니다. 이 단계에서는 콘솔에서 각 신뢰할 수 있는 토큰 발급자의 속성을 설정합니다. 속성에는 도구 또는 서비스의 구성 속성에서 가져와야 할 수 있는 이름 및 *대상 클레임(*aud 클레임이라고도 함)이 포함됩니다. 타사 도구의 JSON 웹 토큰(JWT)에서 가져온 애플리케이션 이름을 제공해야 할 수도 있습니다.
**참고**  
각 타사 도구 또는 서비스에 필요한 `aud claim`은 토큰 유형(ID 제공업체가 발급한 액세스 토큰일 수 있음) 또는 ID 토큰 등의 다른 유형에 따라 달라질 수 있습니다. 벤더마다 다를 수 있습니다. 신뢰할 수 있는 ID 전파를 구현하고 Redshift와 통합할 때는 타사 도구가 AWS에 전송하는 토큰 유형에 대해 올바른 **aud 값을 제공해야 합니다. 도구 또는 서비스 벤더의 권장 사항을 확인하세요.

   신뢰할 수 있는 ID 전파에 대한 자세한 내용은 *AWS IAM Identity Center 사용 설명서*의 [신뢰할 수 있는 ID 전파 개요](https://docs.aws.amazon.com/singlesignon/latest/userguide/trustedidentitypropagation-overview.html)를 참조하세요.

Redshift 관리자가 단계를 완료하고 구성을 저장하면 Redshift 콘솔에 AWS IAM Identity Center 속성이 표시됩니다. 또한 시스템 뷰 [SVV\$1IDENTITY\$1PROVIDERS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_IDENTITY_PROVIDERS.html)를 쿼리하여 애플리케이션의 속성을 확인할 수 있습니다. 여기에는 애플리케이션 이름과 네임스페이스가 포함됩니다. 네임스페이스는 애플리케이션과 연결된 Redshift 데이터베이스 객체의 접두사로 사용합니다. 이러한 작업을 완료하면 Redshift는 AWS IAM Identity Center 지원 애플리케이션이 됩니다. 콘솔의 속성에는 통합 상태가 포함됩니다. 통합이 완료되면 **활성화됨**이라고 표시됩니다. 이 프로세스가 끝나면 각각의 새 클러스터에서 AWS IAM Identity Center 통합을 활성화할 수 있습니다.

구성 후에는 **사용자** 또는 **그룹** 탭을 선택하고 **할당**을 선택하여 AWS IAM Identity Center에 있는 사용자 및 그룹을 Redshift에 포함할 수 있습니다.

## 새 Amazon Redshift 클러스터 또는 Amazon Redshift Serverless 작업 그룹에 AWS IAM Identity Center 통합 활성화
<a name="redshift-iam-access-control-idp-connect-resource-creation"></a>

데이터베이스 관리자는 새로운 Redshift 리소스가 AWS IAM Identity Center와 연계되어 작동하도록 구성하여 로그인 및 데이터 액세스를 더 용이하게 만듭니다. 이는 프로비저닝된 클러스터 또는 서버리스 작업 그룹을 생성하는 단계의 일부로 수행됩니다. Redshift 리소스를 생성할 수 있는 권한이 있는 모든 사용자는 AWS IAM Identity Center 통합 태스크를 수행할 수 있습니다. 프로비저닝된 클러스터를 생성할 때 Amazon Redshift 콘솔에서 **클러스터 생성**을 선택하는 것부터 시작하면 됩니다. 다음 단계는 데이터베이스에 대한 AWS IAM Identity Center 관리를 활성화하는 방법을 보여줍니다. 클러스터를 생성하는 모든 단계가 포함되어 있지는 않습니다.

1. create-cluster 단계에서 **IAM Identity Center 통합** 섹션의 **<클러스터 이름>에 대해 활성화**를 선택합니다.

1. 통합을 활성화하는 프로세스에 한 단계가 있습니다. 콘솔에서 **IAM Identity Center 통합 활성화**를 선택하면 됩니다.

1. 새 클러스터 또는 작업 그룹의 경우 SQL 명령을 사용하여 Redshift에서 데이터베이스 역할을 생성합니다. 다음은 명령입니다.

   ```
   CREATE ROLE <idcnamespace:rolename>;
   ```

   네임스페이스와 역할 이름은 다음과 같습니다.
   + *IAM Identity Center 네임스페이스 접두사* - AWS IAM Identity Center와 Redshift 간의 연결을 설정할 때 정의한 네임스페이스입니다.
   + *역할 이름* - 이 Redshift 데이터베이스 역할은 AWS IAM Identity Center의 그룹 이름과 일치해야 합니다.

   Redshift는 AWS IAM Identity Center와 연결하여 데이터베이스 역할을 생성하고 AWS IAM Identity Center 그룹에 매핑하는 데 필요한 정보를 가져옵니다.

새 데이터 웨어하우스가 생성되면 AWS IAM Identity Center 통합을 위해 지정된 IAM 역할이 프로비저닝된 클러스터 또는 Amazon Redshift Serverless 작업 그룹에 자동으로 연결된다는 점에 유의하세요. 필요한 클러스터 메타데이터를 입력하고 리소스를 생성한 후에는 속성에서 AWS IAM Identity Center 통합 상태를 확인할 수 있습니다. AWS IAM Identity Center의 그룹 이름에 공백이 있는 경우 매칭되는 역할을 생성할 때 SQL에서 따옴표를 사용해야 합니다.

Redshift 데이터베이스를 활성화하고 역할을 생성했으면 Amazon Redshift 쿼리 에디터 v2 또는 Amazon Quick를 사용하여 데이터베이스에 연결할 준비가 된 것입니다. 자세한 내용은 다음 섹션에 자세히 설명되어 있습니다.

### API를 사용하여 기본 `RedshiftIdcApplication` 설정
<a name="redshift-iam-access-control-idp-connect-admin-config-api"></a>

설정은 ID 관리자가 수행합니다. API를 사용하여 AWS IAM Identity Center 내의 Redshift 애플리케이션을 나타내는 `RedshiftIdcApplication`을 만들고 채웁니다.

1. 먼저 사용자를 생성하고 AWS IAM Identity Center의 그룹에 추가할 수 있습니다. AWS IAM Identity Center용 AWS 콘솔에서 이 작업을 수행하면 됩니다.

1. AWS IAM Identity Center 애플리케이션을 생성하고 Redshift와 호환해서 사용하도록 `create-redshift-idc-application`을 호출합니다. 필요한 값을 입력하여 애플리케이션을 생성합니다. 표시 이름은 AWS IAM Identity Center 대시보드에 표시할 이름입니다. IAM 역할 ARN은 AWS IAM Identity Center에 대한 권한이 있는 ARN이며 Redshift에서도 이 역할을 맡을 수 있습니다.

   ```
   aws redshift create-redshift-idc-application
   ––idc-instance-arn 'arn:aws:sso:::instance/ssoins-1234a01a1b12345d'
   ––identity-namespace 'MYCO'
   ––idc-display-name 'TEST-NEW-APPLICATION'
   ––iam-role-arn 'arn:aws:redshift:us-east-1:012345678901:role/TestRedshiftRole'
   ––redshift-idc-application-name 'myredshiftidcapplication'
   ```

   다음 예는 `create-redshift-idc-application`에 대한 호출에서 반환된 샘플 `RedshiftIdcApplication` 응답을 보여줍니다.

   ```
   "RedshiftIdcApplication": {
                   "IdcInstanceArn": "arn:aws:sso:::instance/ssoins-1234a01a1b12345d",
                   "RedshiftIdcApplicationName": "test-application-1",
                   "RedshiftIdcApplicationArn": "arn:aws:redshift:us-east-1:012345678901:redshiftidcapplication:12aaa111-3ab2-3ab1-8e90-b2d72aea588b",
                   "IdentityNamespace": "MYCO",
                   "IdcDisplayName": "Redshift-Idc-Application",
                   "IamRoleArn": "arn:aws:redshift:us-east-1:012345678901:role/TestRedshiftRole",
                   "IdcManagedApplicationArn": "arn:aws:sso::012345678901:application/ssoins-1234a01a1b12345d/apl-12345678910",
                   "IdcOnboardStatus": "arn:aws:redshift:us-east-1:123461817589:redshiftidcapplication",
                   "RedshiftIdcApplicationArn": "Completed",
                   "AuthorizedTokenIssuerList": [
                          "TrustedTokenIssuerArn": ...,
                          "AuthorizedAudiencesList": [...]...
                   ]}
   ```

1. `create-application-assignment`를 사용하여 AWS IAM Identity Center의 관리형 애플리케이션에 특정 그룹이나 개별 사용자를 할당할 수 있습니다. 이렇게 하면 AWS IAM Identity Center를 통해 관리할 그룹을 지정할 수 있습니다. 데이터베이스 관리자가 Redshift에서 데이터베이스 역할을 생성하는 경우 AWS IAM Identity Center의 그룹 이름이 Redshift의 역할 이름에 매핑됩니다. 이 역할은 데이터베이스의 권한을 제어합니다. 자세한 내용은 [AWS IAM Identity Center 콘솔에서 애플리케이션에 사용자 액세스 권한 할당](https://docs.aws.amazon.com/singlesignon/latest/userguide/assignuserstoapp.html)을 참조하세요.

1. 애플리케이션을 활성화한 후에는 `create-cluster`를 호출하여 AWS IAM Identity Center에서 Redshift 관리형 애플리케이션 ARN을 포함합니다. 이렇게 하면 클러스터가 AWS IAM Identity Center의 관리형 애플리케이션과 연결됩니다.

### AWS IAM Identity Center 애플리케이션을 기존 클러스터 또는 작업 그룹과 연결
<a name="redshift-iam-access-control-idp-connect-admin-config-existing"></a>

AWS IAM Identity Center 통합을 활성화하려는 기존 클러스터 또는 작업 그룹이 있는 경우 SQL 명령을 실행하여 활성화할 수 있습니다. SQL 명령을 실행하여 통합 설정을 변경할 수도 있습니다. 자세한 내용은 [ALTER IDENTITY PROVIDER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_IDENTITY_PROVIDER.html)를 참조하세요.

기존 ID 제공업체를 삭제할 수도 있습니다. 다음 예에서는 CASCADE가 ID 제공업체에 연결된 사용자 및 역할을 삭제하는 방법을 보여줍니다.

```
DROP IDENTITY PROVIDER
<provider_name> [ CASCADE ]
```

## 사용자 권한 설정
<a name="redshift-iam-access-control-idp-connect-user-permissions"></a>

관리자는 ID 제공업체 내에서 또는 AWS IAM Identity Center 내에서 사용자의 ID 속성 및 그룹 멤버십을 기반으로 다양한 리소스에 대한 권한을 직접 구성합니다. 예를 들어, ID 제공업체 관리자는 맡은 역할에 적합한 그룹에 데이터베이스 엔지니어를 추가할 수 있습니다. 이 그룹 이름은 Redshift 데이터베이스 역할 이름에 매핑됩니다. 역할은 Redshift의 특정 테이블 또는 뷰에 대한 액세스를 제공하거나 제한합니다.

# AWS IAM Identity Center에 대한 Amazon Redshift 역할 자동 생성
<a name="redshift-iam-access-control-sso-autocreate"></a>

이 기능은 그룹 멤버십을 기반으로 Redshift에서 역할을 자동으로 생성할 수 있는 AWS IAM Identity Center과 통합됩니다.

역할을 자동으로 생성하면 몇 가지 이점이 있습니다. 역할을 자동 생성할 때 Redshift는 IdP에 그룹 멤버십이 있는 역할을 생성하므로 번거로운 수동 역할 생성 및 유지 관리를 피할 수 있습니다. 또한 포함 및 제외 패턴을 사용하여 Redshift 역할에 매핑되는 그룹을 필터링할 수 있습니다.

## 작동 방식
<a name="autocreate-overview"></a>

IdP 사용자로서 Redshift에 로그인하면 다음과 같은 이벤트 시퀀스가 발생합니다.

1. Redshift는 IdP에서 그룹 멤버십을 검색합니다.

1. Redshift는 역할 형식 `idp_namespace:rolename`을 사용하여 해당 그룹에 대한 역할 매핑을 자동으로 생성합니다.

1. Redshift는 매핑된 역할에 대한 권한을 부여합니다.

각 사용자 로그인 시 카탈로그에는 없지만 사용자가 속한 각 그룹이 자동으로 생성됩니다. 선택적으로 필터 포함 및 제외를 설정하여 Redshift 역할이 생성된 IdP 그룹을 제어할 수 있습니다.

## 역할 자동 생성 구성
<a name="autocreate-configuring"></a>

`CREATE IDENTITY PROVIDER` 및 `ALTER IDENTITY PROVIDER` 명령을 사용하여 자동 역할 생성을 활성화하고 구성합니다.

```
-- Create a new IdP with auto role creation enabled
CREATE IDENTITY PROVIDER <idp_name> TYPE AWSIDC
  NAMESPACE '<namespace>' 
  APPLICATION_ARN 'app_arn'
  IAM_ROLE 'role_arn'
  AUTO_CREATE_ROLES TRUE; 

-- Enable on existing IdP 
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES TRUE;

-- Disable  
ALTER IDENTITY PROVIDER <idp_name>
  AUTO_CREATE_ROLES FALSE;
```

## 그룹 필터링
<a name="autocreate-filtering"></a>

선택적으로 `INCLUDE` 및 `EXCLUDE` 패턴을 사용하여 Redshift 역할에 매핑되는 IdP 그룹을 필터링할 수 있습니다. 패턴이 충돌하면 `EXCLUDE`가 `INCLUDE`보다 우선합니다.

```
-- Only create roles for groups with 'dev' 
CREATE IDENTITY PROVIDER <idp_name> TYPE AWSIDC
  ...
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%';
    
-- Exclude 'test' groups
ALTER IDENTITY PROVIDER <idp_name>  
  AUTO_CREATE_ROLES TRUE
  EXCLUDE GROUPS LIKE '%test%';
```

## 예제
<a name="autocreate-filtering"></a>

다음 예제에서는 필터링 없이 역할 자동 생성을 활성화하는 방법을 보여줍니다.

```
CREATE IDENTITY PROVIDER prod_idc TYPE AWSIDC  ...
  AUTO_CREATE_ROLES TRUE;
```

다음 예제에는 개발 그룹이 포함되며 테스트 그룹은 제외됩니다.

```
ALTER IDENTITY PROVIDER prod_idc
  AUTO_CREATE_ROLES TRUE
  INCLUDE GROUPS LIKE '%dev%'
  EXCLUDE GROUPS LIKE '%test%';
```

## 모범 사례
<a name="autocreate-bp"></a>

역할에 대해 자동 생성을 활성화할 때 다음 모범 사례를 고려하세요.
+ `INCLUDE` 및 `EXCLUDE` 필터를 사용하여 역할을 가져오는 그룹을 제어합니다.
+ 역할을 정기적으로 감사하고 사용하지 않는 역할을 정리합니다.
+ Redshift 역할 계층 구조를 활용하여 권한 관리를 간소화합니다.

# Amazon S3 Access Grants와 Amazon Redshift 통합
<a name="redshift-iam-access-control-sso-s3idc"></a>

Amazon S3 Access Grants와의 통합을 사용하면 IAM Identity Center ID를 원활하게 전파하여 Amazon S3 데이터에 대한 액세스를 제어할 수 있습니다. 이 통합을 통해 IAM Identity Center 사용자 및 그룹을 기반으로 Amazon S3 데이터 액세스 권한을 부여할 수 있습니다.

Amazon S3 Access Grants에 대한 자세한 내용은 [S3 Access Grants를 통한 액세스 관리](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html)를 참조하세요.

Amazon S3 Access Grants를 사용하면 애플리케이션에 다음과 같은 이점이 있습니다.
+ IAM Identity Center ID를 기반으로 Amazon S3 데이터에 대한 세분화된 액세스 제어
+ Amazon Redshift 및 Amazon S3에서 IAM Identity Center ID의 중앙 집중식 관리
+ Amazon S3 액세스에 대한 별도의 IAM 권한 관리 불필요

## 작동 방식
<a name="redshift-iam-access-control-sso-s3idc-howitworks"></a>

애플리케이션을 Amazon S3 Access Grants와 통합하려면 다음을 수행합니다.
+ 먼저 AWS Management Console 또는 AWS CLI를 사용하여 Amazon S3 Access Grants와 통합하도록 Amazon Redshift를 구성합니다.
+ 다음으로 IdC 관리자 권한이 있는 사용자는 Amazon S3 Access Grants 서비스를 사용하여 특정 IdC 사용자/그룹에 대한 Amazon S3 버킷 또는 접두사 액세스 권한을 부여합니다. 자세한 내용은 [ S3 Access Grants에서 권한 부여 사용](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-grant.html)을 참조하세요.
+ Redshift에 인증된 IdC 사용자가 S3에 액세스하는 쿼리(예: COPY, UNLOAD 또는 Spectrum 작업)를 실행하면 Amazon Redshift는 Amazon S3 Access Grants 서비스에서 해당 IdC ID로 범위가 지정된 임시 Amazon S3 액세스 자격 증명을 검색합니다.
+ 그런 다음 Amazon Redshift는 검색된 임시 자격 증명을 사용하여 해당 쿼리에 대해 권한이 부여된 Amazon S3 위치에 액세스합니다.

## Amazon S3 Access Grants와의 통합 설정
<a name="redshift-iam-access-control-sso-s3idc-setup"></a>

Amazon Redshift와 Amazon S3 Access Grants의 통합을 설정하려면 다음을 수행합니다.

**Topics**
+ [

### AWS Management Console을 사용하여 Amazon S3 Access Grants와의 통합 설정
](#redshift-iam-access-control-sso-s3idc-setup-console)
+ [

### AWS CLI를 사용하여 Amazon S3 Access Grants와의 통합 활성화
](#redshift-iam-access-control-sso-s3idc-setup-cli)

### AWS Management Console을 사용하여 Amazon S3 Access Grants와의 통합 설정
<a name="redshift-iam-access-control-sso-s3idc-setup-console"></a>

1. Amazon Redshift 콘솔을 엽니다.

1. **클러스터** 창에서 클러스터를 선택합니다.

1. 클러스터의 세부 정보 페이지의 **ID 제공업체 통합** 섹션에서 **S3 Access Grants** 서비스와의 통합을 활성화합니다.
**참고**  
IAM Identity Center가 구성되어 있지 않으면 **ID 제공업체 통합** 섹션이 표시되지 않습니다. 자세한 내용은 [Enabling AWS IAM Identity Center](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-set-up-for-idc.html)를 참조하세요.

### AWS CLI를 사용하여 Amazon S3 Access Grants와의 통합 활성화
<a name="redshift-iam-access-control-sso-s3idc-setup-cli"></a>

1. S3 통합이 활성화된 새 Amazon Redshift IdC 애플리케이션을 만들려면 다음을 수행합니다.

   ```
   aws redshift create-redshift-idc-application <other parameters> 
     --service-integrations '[ {"S3AccessGrants": [{"ReadWriteAccess": {"Authorization": "Enabled"}}]} ]'
   ```

1. S3 Access Grants 통합을 활성화하도록 기존 애플리케이션을 수정하려면 다음을 수행합니다.

   ```
   aws redshift modify-redshift-idc-application <other parameters>
     --service-integrations '[ {"S3AccessGrants": [{"ReadWriteAccess": {"Authorization": "Enabled"}}]} ]'
   ```

1. S3 Access Grants 통합을 비활성화하도록 기존 애플리케이션을 수정하려면 다음을 수행합니다.

   ```
   aws redshift modify-redshift-idc-application <other parameters>
     --service-integrations '[ {"S3AccessGrants": [{"ReadWriteAccess": {"Authorization": "Disabled"}}]} ]'
   ```

## S3 Access Grants와의 통합 사용
<a name="redshift-iam-access-control-sso-s3idc-using"></a>

S3 Access Grants 통합을 구성한 후 S3 데이터에 액세스하는 쿼리(예: `COPY`, `UNLOAD` 또는 Spectrum 쿼리)는 권한 부여를 위해 IdC ID를 사용합니다. IdC를 사용하여 인증되지 않은 사용자도 이러한 쿼리를 실행할 수 있지만 이러한 사용자 계정은 IdC가 제공하는 중앙 집중식 관리를 활용하지 않습니다.

다음 예시는 S3 Access Grants 통합으로 실행되는 쿼리를 보여줍니다.

```
COPY table FROM 's3://mybucket/data';  // -- Redshift uses IdC identity 
UNLOAD ('SELECT * FROM table') TO 's3://mybucket/unloaded/'    // -- Redshift uses IdC identity
```

# AWS Lake Formation을 통한 데이터 쿼리
<a name="redshift-iam-access-control-idp-analytics-connecting-steps"></a>

AWS Lake Formation을 사용하면 데이터 레이크를 중앙에서 관리 및 보호하고 데이터 액세스를 제공하는 것이 더 쉬워집니다. AWS IAM Identity Center 및 Redshift를 통해 Lake Formation으로 ID를 전파하도록 구성하면 관리자가 조직의 ID 제공업체(IdP) 그룹을 기반으로 Amazon S3 데이터 레이크에 세밀하게 분류된 액세스를 허용할 수 있습니다. 이러한 그룹은 AWS IAM Identity Center를 통해 관리됩니다. 이 섹션에서는 Redshift와 함께 AWS IAM Identity Center를 활용하여 Lake Formation에서 관리하는 리소스에 연결하는 몇 가지 사용 사례를 구성하는 방법을 보여줍니다(예: 데이터 레이크에서 쿼리, 데이터 공유에서 쿼리).

## AWS IAM Identity Center 및 Redshift 연결을 사용하여 데이터 레이크 쿼리
<a name="redshift-iam-access-control-idp-analytics-connecting-datalake"></a>

이 단계는 Redshift에 연결된 AWS IAM Identity Center를 사용하여 Lake Formation에서 관리하는 데이터 레이크를 쿼리하는 사용 사례를 다룹니다.

**사전 조건**:

이 절차에는 몇 가지 사전 조건과 단계가 있습니다.

1. Redshift를 통한 인증 및 ID 관리를 지원하려면 AWS IAM Identity Center를 설정해야 합니다. 콘솔에서 AWS IAM Identity Center를 활성화하고 ID 제공업체(IdP) 소스를 선택할 수 있습니다. 그런 다음 IdP 사용자 세트를 AWS IAM Identity Center와 동기화합니다. 또한 이 문서의 앞부분에 설명된 단계에 따라 AWS IAM Identity Center와 Redshift 간의 연결을 설정해야 합니다.

1. 새 Amazon Redshift 클러스터를 생성하고 구성 단계에서 AWS IAM Identity Center를 통한 ID 관리를 활성화합니다.

1. Lake Formation을 위한 관리형 AWS IAM Identity Center 애플리케이션을 생성하고 구성합니다. 이는 AWS IAM Identity Center와 Redshift 간의 연결 설정에 따른 것입니다. 단계는 다음과 같습니다.

   1. AWS CLI에서 `modify-redshift-idc-application` 명령을 사용하여 Lake Formation 서비스를 Redshift용 AWS IAM Identity Center 관리 애플리케이션과 통합할 수 있도록 설정합니다. 이 호출에는 Lake Formation에 대한 권한 부여를 가능하게 하는 구성 문자열 값으로 설정된 `service-integrations` 파라미터가 포함됩니다.

   1. `create-lake-formation-identity-center-configuration` 명령을 사용하여 Lake Formation을 구성합니다. 그러면 AWS IAM Identity Center 포털에서 볼 수 있는 Lake Formation용 AWS IAM Identity Center 애플리케이션이 생성됩니다. 관리자는 `––cli-input-json` 인수를 설정해야 하며, 이 인수의 값은 모든 AWS CLI API 직접 호출에 표준 형식을 사용하는 JSON 파일의 경로입니다. 다음에 대한 값을 포함해야 합니다.
      + `CatalogId` - Lake Formation 카탈로그 ID
      + `InstanceArn` - AWS IAM Identity Center 인스턴스 ARN 값

관리자가 사전 조건 구성을 완료한 후 데이터베이스 관리자는 데이터 레이크를 쿼리하기 위한 외부 스키마를 생성할 수 있습니다.

1. **관리자가 외부 스키마 생성** - Redshift 데이터베이스 관리자는 다음 SQL 문을 사용하여 데이터베이스에 연결하고 외부 스키마를 만듭니다.

   ```
   CREATE EXTERNAL SCHEMA if not exists my_external_schema from DATA CATALOG database 'my_lf_integrated_db' catalog_id '12345678901234';
   ```

   참고로, AWS IAM Identity Center를 통해 액세스를 관리하므로 이 경우에는 IAM 역할을 지정할 필요가 없습니다.

1. **관리자가 권한 부여** - 관리자가 AWS IAM Identity Center 그룹에 사용 권한을 부여하며, 이로 인해 Redshift 리소스에 대한 권한이 부여됩니다. 다음과 같은 SQL 문을 실행하면 됩니다.

   ```
   GRANT USAGE ON SCHEMA "my_external_schema" to "MYCO:sales";
   ```

   이후 관리자는 AWS CLI를 사용하여 조직의 요구 사항에 따라 객체에 대한 Lake Formation 권한을 부여합니다.

   ```
   aws lakeformation grant-permissions ...
   ```

1. **사용자가 쿼리 실행** - 이제 예컨대 영업 그룹에 속한 AWS IAM Identity Center 사용자는 쿼리 에디터 v2를 통해 Redshift 데이터베이스에 로그인할 수 있습니다. 그런 다음, 아래 샘플과 같이 외부 스키마의 테이블에 액세스하는 쿼리를 실행할 수 있습니다.

   ```
   SELECT * from my_external_schema.table1;
   ```

## AWS IAM Identity Center와 Redshift 연결을 사용하여 데이터 공유에 연결
<a name="redshift-iam-access-control-idp-analytics-connecting-datashare"></a>

 AWS IAM Identity Center를 통해 액세스를 관리하는 경우 다른 Redshift 데이터 웨어하우스에서 데이터 공유에 액세스할 수 있습니다. 이렇게 하려면 쿼리를 실행하여 외부 데이터베이스를 설정합니다. 이 단계를 완료하기 전에는 이전 절차에 설명된 대로 Redshift와 AWS IAM Identity Center 간에 연결을 설정하고 AWS Lake Formation 애플리케이션을 생성한 것으로 가정합니다.

1. **외부 데이터베이스 생성** - 관리자가 ARN을 통해 참조하여 데이터 공유를 위한 외부 데이터베이스를 만듭니다. 다음은 방법을 보여주는 샘플입니다.

   ```
   CREATE DATABASE "redshift_external_db" FROM ARN 'arn:aws:glue:us-east-1:123456789012:database/redshift_external_db-iad' WITH NO DATA CATALOG SCHEMA;
   ```

   ID 관리를 위해 Redshift와 함께 AWS IAM Identity Center를 사용하는 이 사용 사례에서는 IAM 역할이 포함되지 않습니다.

1. **관리자가 권한 설정** - 데이터베이스를 생성한 후 관리자는 AWS IAM Identity Center 그룹에 사용 권한을 부여합니다. 이렇게 하면 Redshift 리소스에 대한 권한이 부여됩니다.

   ```
   GRANT USAGE ON DATABASE "my_external_db" to "MYCO:sales";
   ```

   또한 관리자는 AWS CLI를 사용하여 객체에 대한 Lake Formation 권한을 부여합니다.

   ```
   aws lakeformation grant-permissions ...
   ```

1. **사용자가 쿼리 실행** - 영업 그룹의 사용자는 할당된 권한에 따라 데이터베이스의 테이블을 쿼리할 수 있습니다.

   ```
   select * from redshift_external_db.public.employees;
   ```

데이터 레이크에 대한 권한 부여 및 데이터 공유에 대한 권한 부여 관련 자세한 내용은 [Granting permissions to users and groups](https://docs.aws.amazon.com/lake-formation/latest/dg/grant-permissions-sso.html)를 참조하세요. 스키마 또는 데이터베이스에 사용 권한을 부여하는 방법에 대한 자세한 내용은 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)를 참조하세요.

# 신뢰할 수 있는 토큰 발급자를 사용하여 애플리케이션 또는 도구를 OAuth와 통합
<a name="redshift-iam-access-control-idp-connect-oauth"></a>

 AWS IAM Identity Center 연결을 통해 Redshift에 연결하기 위해 생성한 클라이언트 도구에 기능을 추가할 수 있습니다. AWS IAM Identity Center에 대한 Redshift 통합을 이미 구성한 경우 이 섹션에 자세히 설명된 속성을 사용하여 연결을 설정합니다.

## AWS IAM Identity Center를 사용하여 Redshift에 연결하기 위한 인증 플러그인
<a name="redshift-iam-access-control-idp-connect-plugin"></a>

다음 드라이버 플러그인을 사용하여 AWS IAM Identity Center를 사용하여 Amazon Redshift에 연결할 수 있습니다.
+  `BrowserIdcAuthPlugin` - 이 플러그인은 AWS IAM Identity Center와의 원활한 통합 인증을 지원합니다. 사용자가 기업 ID 제공업체에 정의된 사용자 자격 증명을 사용하여 로그인할 수 있는 브라우저 창을 만듭니다.
+  `IdpTokenAuthPlugin` - 이 플러그인은 Amazon Redshift 드라이버가 AWS IAM Identity Center 인증을 위해 브라우저 창을 열도록 하는 대신 자체적으로 인증 흐름을 관리하려는 애플리케이션에서 사용해야 합니다. Okta, PingOne 및 Microsoft Entra ID(Azure AD)와 같이 AWS IAM Identity Center와 연결된 모든 웹 ID 제공업체의 AWS IAM Identity Center 벤딩 액세스 토큰 또는 OIDC(OpenID Connect) JSON 웹 토큰(JWT)을 허용합니다. 클라이언트 애플리케이션은 이 필수 액세스 토큰/JWT를 생성할 책임이 있습니다.

### `BrowserIdcAuthPlugin`을 사용하는 인증
<a name="redshift-iam-access-control-idp-connect-plugin-browseridcauthplugin"></a>

Amazon Redshift 드라이버에 따라 `BrowserIdcAuthPlugin`을 사용하여 연결하려면 다음 플러그인 이름을 사용하세요.


| 드라이버 | 연결 옵션 키 | 값 | 설명 | 
| --- | --- | --- | --- | 
| JDBC | `plugin_name` | com.amazon.redshift.plugin.BrowserIdcAuthPlugin | 연결할 때 플러그인의 정규화된 클래스 이름을 입력해야 합니다. | 
| ODBC | `plugin_name` | BrowserIdcAuthPlugin |  | 
| Python | `credentials_provider` | BrowserIdcAuthPlugin | Python 드라이버에 사용할 수 있는 `plugin_name` 옵션이 없습니다. 대신 를 사용합니다`credentials_provider` | 

`BrowserIdcAuthPlugin` 플러그인에는 다음과 같은 추가 연결 옵션이 있습니다.


| 옵션 이름 | 필수? | 설명 | 예제 | 
| --- | --- | --- | --- | 
| idc\$1region | 필수 | AWS IAM Identity Center 인스턴스가 위치한 AWS 리전입니다. | us-east-1 | 
| issuer\$1url | 필수 | AWS IAM Identity Center 서버의 인스턴스 엔드포인트입니다. 이 값은 AWS IAM Identity Center 콘솔을 사용하여 찾을 수 있습니다. | https://identitycenter.amazonaws.com/ssoins-g5j2k70sn4yc5nsc | 
| listen\$1port | 선택 | Amazon Redshift 드라이버가 브라우저 리디렉션을 통해 AWS IAM Identity Center로부터 `auth_code` 응답을 수신하는 데 사용하는 포트입니다. | 7890 | 
| idc\$1client\$1display\$1name | 선택 | AWS IAM Identity Center의 Single Sign-On 동의 팝업에서 AWS IAM Identity Center 클라이언트가 애플리케이션에 사용하는 이름입니다. | Amazon Redshift 드라이버 | 
| idp\$1response\$1timeout | 선택 | Redshift 드라이버가 인증 흐름이 완료될 때까지 기다리는 시간(초)입니다. | 60 | 

생성하고 연결하는 도구의 연결 속성에 이 값을 입력해야 합니다. 자세한 내용은 각각의 드라이버에 대한 연결 옵션 설명서를 참조하세요.
+ [JDBC 드라이버 버전 2.x 구성 옵션](jdbc20-configuration-options.md)
+ [ODBC 드라이버 옵션](odbc20-configuration-options.md)
+ [Amazon Redshift Python 커넥터의 구성 옵션](python-configuration-options.md)

### `IdpTokenAuthPlugin`을 사용하는 인증
<a name="redshift-iam-access-control-idp-connect-plugin-idptokenauthplugin"></a>

Amazon Redshift 드라이버에 따라 `IdpTokenAuthPlugin`을 사용하여 연결하려면 다음 플러그인 이름을 사용하세요.


| 드라이버 | 연결 옵션 키 | 값 | 설명 | 
| --- | --- | --- | --- | 
| JDBC | `plugin_name` | com.amazon.redshift.plugin.IdpTokenAuthPlugin | 연결할 때 플러그인의 정규화된 클래스 이름을 입력해야 합니다. | 
| ODBC | `plugin_name` | IdpTokenAuthPlugin |  | 
| Python | `credentials_provider` | IdpTokenAuthPlugin | Python 드라이버에 사용할 수 있는 `plugin_name` 옵션이 없습니다. 대신 를 사용합니다`credentials_provider` | 

`IdpTokenAuthPlugin` 플러그인에는 다음과 같은 추가 연결 옵션이 있습니다.


| 옵션 이름 | 필수? | 설명 | 
| --- | --- | --- | 
| 토큰 | 필수 | AWS IAM Identity Center에서 벤딩한 액세스 토큰 또는 AWS IAM Identity Center와 연결된 웹 ID 제공업체에서 제공하는 OIDC(OpenID Connect) JSON 웹 토큰(JWT)입니다. 애플리케이션은AWS IAM Identity Center 또는 AWS IAM Identity Center와 연결된 ID 제공업체를 통해 애플리케이션 사용자를 인증하여 이 토큰을 생성해야 합니다. | 
| token\$1type | 필수 | `IdpTokenAuthPlugin`에 사용되는 토큰 유형 가능한 값은 다음과 같습니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/redshift-iam-access-control-idp-connect-oauth.html)  | 

생성하고 연결하는 도구의 연결 속성에 이 값을 입력해야 합니다. 자세한 내용은 각각의 드라이버에 대한 연결 옵션 설명서를 참조하세요.
+ [JDBC 드라이버 버전 2.x 구성 옵션](jdbc20-configuration-options.md)
+ [ODBC 드라이버 옵션](odbc20-configuration-options.md)
+ [Amazon Redshift Python 커넥터의 구성 옵션](python-configuration-options.md)

# Amazon Redshift 쿼리 에디터 v2의 연결 문제 해결
<a name="redshift-iam-access-control-idp-connect-troubleshooting"></a>

이 목록은 일반적으로 발생하는 오류를 자세히 설명하며 AWS IAM Identity Center 자격 증명을 사용하여 쿼리 에디터 v2와 Redshift 데이터베이스에 연결하는 데 도움이 될 수 있습니다.
+ 오류: **연결 문제: Identity Center 세션 정보를 사용할 수 없습니다.** - 이 오류가 발생하면 브라우저의 보안 및 개인 정보 설정을 확인합니다. 이러한 브라우저 설정, 특히 Firefox의 Total Cookie Protection 기능과 같은 보안 쿠키 관련 설정을 사용하면 Amazon Redshift 쿼리 에디터 v2에서 Redshift 데이터베이스로의 연결 시도가 차단될 수 있습니다. 해당 브라우저에 대해 자세히 설명된 문제 해결 단계를 따르세요.
  + **Firefox** - 현재 서드 파티 쿠키는 기본적으로 차단되어 있습니다. 브라우저 주소 표시줄의 방패 모양 아이콘을 클릭하고 토글을 전환하여 쿼리 에디터 v2의 강화 추적 방지 기능을 끕니다.
  + **Chrome 시크릿 모드** - Chrome 시크릿 모드는 기본적으로 서드 파티 쿠키를 차단합니다. 주소 표시줄의 눈 모양 아이콘을 클릭하여 쿼리 에디터 v2에 서드 파티 쿠키를 허용할 수 있습니다. 쿠키를 허용하도록 설정을 변경한 후에는 주소 표시줄에 눈 모양 아이콘이 보이지 않을 수 있습니다.
  + **Safari** - Mac의 경우 Safari 앱을 엽니다. **설정**을 선택한 후 **고급**을 선택합니다. 토글을 전환하여 **모든 쿠키 차단**을 끕니다.
  + **Edge** - **설정**을 선택하고 **쿠키 및 사이트 권한**을 선택합니다. 그런 다음 **쿠키 및 사이트 데이터 관리 및 삭제** 선택하고 **타사 쿠키 차단**을 끕니다.

  설정을 변경한 후 연결을 시도해도 **연결 문제: Identity Center 세션 정보를 사용할 수 없습니다 오류 메시지가 계속 표시되는 경우** AWS IAM Identity Center와의 연결을 새로 고치는 것이 좋습니다. 이렇게 하려면 Redshift 데이터베이스 인스턴스를 마우스 오른쪽 버튼으로 클릭하고 **새로 고침**을 선택합니다. 인증을 수행할 수 있는 새 창이 나타납니다.
+ 오류: **연결 문제: Identity Ceneter 세션이 만료되었거나 유효하지 않습니다.** - Redshift 프로비저닝된 클러스터 또는 Severless 작업 그룹을 AWS IAM Identity Center와 통합한 후 사용자가 쿼리 에디터 v2에서 Redshift 데이터베이스에 연결하려고 하면 이 오류가 표시될 수 있습니다. 연결 시도가 성공한 후 이 문제가 발생할 수 있습니다. 이 경우 다시 인증하는 것이 좋습니다. 이렇게 하려면 Redshift 데이터베이스 인스턴스를 마우스 오른쪽 버튼으로 클릭하고 **새로 고침**을 선택합니다. 인증을 수행할 수 있는 새 창이 나타납니다.
+ 오류: **범위가 잘못되었습니다. 사용자 자격 증명은 Redshift에 연결할 권한이 없습니다.** - 자격 증명 관리를 위해 Redshift 프로비저닝된 클러스터 또는 Serverless 작업 그룹을 AWS IAM Identity Center와 통합한 후 사용자가 쿼리 에디터 v2에서 Redshift 데이터베이스에 연결하려고 하면 이 오류가 표시될 수 있습니다. 이 경우 쿼리 에디터 v2가 AWS IAM Identity Center를 통해 사용자를 성공적으로 연결하고 인증하여 올바른 리소스에 액세스하려면 관리자가 Redshift 콘솔을 통해 Redshift AWS IAM Identity Center 애플리케이션에 사용자를 할당해야 합니다. 이 작업은 **IAM Identity Center 연결**에서 완료됩니다. 이렇게 하면 사용자는 AWS IAM Identity Center 세션 캐싱의 한도인 1시간 후에 성공적인 연결을 설정할 수 있습니다.
+ 오류: **데이터베이스를 나열할 수 없습니다. FATAL: 클러스터가 자동으로 일시 중지될 때 쿼리가 실패했습니다.** - Amazon Redshift Serverless 데이터베이스가 워크로드를 처리하지 않는 유휴 상태이면 AWS IAM Identity Center 자격 증명으로 연결할 때 일시 중지 상태를 유지할 수 있습니다. 이 문제를 해결하려면 다른 인증 방법으로 로그인하여 서버리스 작업 그룹을 다시 시작합니다. 그런 다음 AWS IAM Identity Center 자격 증명으로 데이터베이스에 연결합니다.
+ 오류: **AWS IAM Identity Center와 페더레이션하려고 시도하는 동안 오류가 발생했습니다. Amazon Redshift 관리자는 Redshift 콘솔을 사용하여 AWS IAM Identity Center QEV2 애플리케이션을 삭제하고 다시 생성해야 합니다.** - 이 오류는 일반적으로 쿼리 에디터 v2와 연결된 AWS IAM Identity Center 애플리케이션 인스턴스가 삭제될 때 발생합니다. 이 문제를 해결하려면 Amazon Redshift 관리자가 AWS IAM Identity Center를 위해 Redshift 및 쿼리 에디터 v2 애플리케이션을 삭제하고 다시 생성해야 합니다. 이 작업은 Redshift 콘솔 또는 [https://docs.aws.amazon.com/cli/latest/reference/redshift/delete-redshift-idc-application.html](https://docs.aws.amazon.com/cli/latest/reference/redshift/delete-redshift-idc-application.html) CLI 명령을 사용하여 수행할 수 있습니다.

# Amazon Redshift에 대해 서비스 연결 역할 사용
<a name="using-service-linked-roles"></a>

Amazon Redshift는 AWS Identity and Access Management(IAM)[ 서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)을 사용합니다. 서비스 연결 역할은 Amazon Redshift에 직접 연결된 고유한 유형의 IAM 역할입니다. 서비스 연결 역할은 Amazon Redshift에서 사전 정의하며, 해당 서비스가 Amazon Redshift 클러스터를 대신해 AWS 서비스를 자동으로 호출하기 위해 필요한 모든 권한을 가지고 있습니다.

서비스 연결 역할을 사용하면 필요한 권한을 수동으로 추가할 필요가 없기 때문에 Amazon Redshift를 더 쉽게 설정할 수 있습니다. 서비스 연결 역할은 Amazon Redshift 사용 사례에 연결되고 사전 정의된 권한이 있습니다. Amazon Redshift만 역할을 수임할 수 있으며 서비스 연결 역할만 사전 정의된 권한 정책을 사용할 수 있습니다. Amazon Redshift는 클러스터 또는 Redshift 관리형 VPC 엔드포인트를 처음 생성할 때 계정에 서비스 연결 역할을 생성합니다. 계정에서 Amazon Redshift 클러스터 또는 Redshift 관리형 VPC 엔드포인트를 모두 삭제한 후에만 서비스 연결 역할을 삭제할 수 있습니다. 이렇게 하면 리소스에 대한 액세스에 필요한 권한을 부주의하게 삭제할 수 없기 때문에 Amazon Redshift 리소스가 보호됩니다.

Amazon Redshift는 서비스가 제공되는 모든 리전에서 서비스 연결 역할 사용을 지원합니다. 자세한 내용은 [AWS 리전 및 엔드포인트](https://docs.aws.amazon.com/general/latest/gr/rande.html?id=docs_gateway#redshift_region) 섹션을 참조하세요.

서비스 연결 역할을 지원하는 기타 서비스에 대한 자세한 내용은 [IAM으로 작업하는 AWS 서비스](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) 섹션을 참조하고 **서비스 연결 역할** 열에 **예**가 표시된 서비스를 찾으세요. 해당 서비스에 대한 서비스 연결 역할 설명서를 보려면 **예** 링크를 선택합니다.

## Amazon Redshift에 대한 서비스 연결 역할 권한
<a name="service-linked-role-permissions"></a>

Amazon Redshift는 **AWSServiceRoleForRedshift**라는 서비스 연결 역할을 사용합니다. 이를 통해 Amazon Redshift가 사용자를 대신하여 AWS 서비스를 호출할 수 있습니다. 이 서비스 연결 역할은 관리형 정책 `AmazonRedshiftServiceLinkedRolePolicy`에 연결됩니다. 이 정책에 대한 업데이트는 [Amazon Redshift에 대한 AWS 관리형 (사전 정의된) 정책](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-identity-based.html#redshift-policy-resources.managed-policies)을 참조하세요.

AWSServiceRoleForRedshift 서비스 연결 역할은 **redshift.amazonaws.com**만 신뢰하여 역할을 맡습니다.

AWSServiceRoleForRedshift 서비스 연결 역할 권한 정책은 Amazon Redshift가 관련된 모든 리소스에서 다음을 완료하도록 허용합니다.
+ `ec2:DescribeVpcs `
+ `ec2:DescribeSubnets `
+ `ec2:DescribeNetworkInterfaces `
+ `ec2:DescribeAddress `
+ `ec2:AssociateAddress `
+ `ec2:DisassociateAddress `
+ `ec2:CreateNetworkInterface `
+ `ec2:DeleteNetworkInterface `
+ `ec2:ModifyNetworkInterfaceAttribute`
+ `ec2:CreateVpcEndpoint`
+ `ec2:DeleteVpcEndpoints`
+ `ec2:DescribeVpcEndpoints`
+ `ec2:ModifyVpcEndpoint`
+ `ec2:DescribeVpcAttribute`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeInternetGateways`
+ `ec2:DescribeSecurityGroupRules`
+ `ec2:DescribeAvailabilityZones`
+ `ec2:DescribeNetworkAcls`
+ `ec2:DescribeRouteTables`
+ `ec2:AssignIpv6Addresses`
+ `ec2:UnassignIpv6Addresses`

**네트워크 리소스에 대한 권한**

다음 권한은 Amazon EC2에서 보안 그룹 규칙의 생성 및 관리 작업을 허용합니다. 이러한 보안 그룹 및 규칙은 특히 Amazon Redshift `aws:RequestTag/Redshift` 리소스 태그와 관련이 있습니다. 이렇게 하면 권한 범위가 특정 Amazon Redshift 리소스로 제한됩니다.
+ `ec2:CreateSecurityGroup`
+ `ec2:AuthorizeSecurityGroupEgress`
+ `ec2:AuthorizeSecurityGroupIngress`
+ `ec2:RevokeSecurityGroupEgress`
+ `ec2:RevokeSecurityGroupIngress`
+ `ec2:ModifySecurityGroupRules`
+ `ec2:DeleteSecurityGroup`

**서비스 할당량에 대한 권한**

다음 권한을 통해 호출자는 서비스 할당량을 받을 수 있습니다.

`servicequotas:GetServiceQuota`

다음 JSON 조각은 서비스 할당량의 작업 및 리소스 범위를 보여줍니다.

```
{
   "Sid": "ServiceQuotasToCheckCustomerLimits",
   "Effect": "Allow",
   "Action": [
      "servicequotas:GetServiceQuota"
   ],
   "Resource": [
      "arn:aws:servicequotas:*:*:ec2/L-0263D0A3",
      "arn:aws:servicequotas:*:*:vpc/L-29B6F2EB" 
   ]
}
```

할당량 코드는 다음과 같습니다.
+ **L-0263D0A3 - EC2-VPC Elastic IP의 할당량 코드입니다.
+ **L-29B6F2EB - VPC당 인터페이스 VPC 엔드포인트의 할당량 코드입니다.

자세한 내용은 [AWS 서비스 할당량](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)을 참조하세요.

**감사 로깅 작업**

`logs` 접두사와 함께 나열된 작업은 감사 로깅 및 관련 기능과 관련이 있습니다. 특히, 로그 그룹 및 로그 스트림의 생성 및 관리와 관련이 있습니다.
+ `logs:CreateLogGroup`
+ `logs:PutRetentionPolicy`
+ `logs:CreateLogStream`
+ `logs:PutLogEvents`
+ `logs:DescribeLogStreams`
+ `logs:GetLogEvents`

다음 JSON은 감사 로깅을 위해 Amazon Redshift에 대한 작업 및 리소스 범위를 보여줍니다.

```
[
    {
        "Sid": "EnableCreationAndManagementOfRedshiftCloudwatchLogGroups",
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogGroup",
            "logs:PutRetentionPolicy"
        ],
        "Resource": [
            "arn:aws:logs:*:*:log-group:/aws/redshift/*"
        ]
    },
    {
        "Sid": "EnableCreationAndManagementOfRedshiftCloudwatchLogStreams",
        "Effect": "Allow",
        "Action": [
            "logs:CreateLogStream",
            "logs:PutLogEvents",
            "logs:DescribeLogStreams",
            "logs:GetLogEvents"
        ],
        "Resource": [
            "arn:aws:logs:*:*:log-group:/aws/redshift/*:log-stream:*"
        ]
    }
]
```

서비스 연결 역할 및 AWS에서의 용도에 대한 자세한 내용은 [서비스 연결 역할 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)을 참조하세요. Amazon Redshift의 특정 작업 및 기타 IAM 리소스에 대한 자세한 내용은 [Amazon Redshift에 사용되는 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonredshift.html)를 참조하세요.

**를 사용하여 관리자 보안 인증 정보를 관리하기 위한 작업AWS Secrets Manager**

`secretsmanager` 접두사와 함께 나열된 작업은 Amazon Redshift를 사용하여 관리자 보안 인증 정보를 관리하는 것과 관련이 있습니다. 이러한 작업을 사용하면 Amazon Redshift는 AWS Secrets Manager를 사용하여 관리자 보안 인증 보안 암호를 생성하고 관리할 수 있습니다.

다음 JSON은 AWS Secrets Manager를 사용한 관리자 보안 인증 정보 관리와 관련하여 Amazon Redshift에 대한 작업 및 리소스 범위를 보여줍니다.

```
[
    {
        "Effect": "Allow",
        "Action": [
            "secretsmanager:DescribeSecret",
            "secretsmanager:DeleteSecret",
            "secretsmanager:PutSecretValue",
            "secretsmanager:UpdateSecret",
            "secretsmanager:UpdateSecretVersionStage",
            "secretsmanager:RotateSecret"
        ],
        "Resource": [
            "arn:aws:secretsmanager:*:*:secret:redshift!*"
        ],
        "Condition": {
            "StringEquals": {
                "secretsmanager:ResourceTag/aws:secretsmanager:owningService": "redshift"
            }
        }
    },
    {
        "Effect": "Allow",
        "Action": [
            "secretsmanager:GetRandomPassword"
        ],
        "Resource": "*"
    }
]
```

**AWS Glue Data Catalog에 클러스터 및 서버리스 네임스페이스를 등록하기 위한 작업**

`glue` 접두사로 나열된 작업은 프로비저닝된 클러스터 또는 서버리스 네임스페이스를 등록하여 만든 AWS Glue Data Catalog의 카탈로그에 액세스하는 것과 관련이 있습니다. 자세한 내용은 *Amazon Redshift 데이터베이스 개발자 안내서*의 [Amazon Redshift에 대한 Apache Iceberg 호환성](https://docs.aws.amazon.com/redshift/latest/dg/iceberg-integration_overview.html)을 참조하세요.

다음 JSON은 AWS Glue Data Catalog의 카탈로그에 액세스하기 위한 Amazon Redshift에 대한 작업 및 리소스 범위를 보여줍니다.

```
[
    {
        "Sid": "DiscoverRedshiftCatalogs",
        "Effect": "Allow",
        "Action": [
            "glue:GetCatalogs",
            "glue:GetCatalog"
        ],
        "Resource": [
            "arn:aws:glue:*:*:catalog",
            "arn:aws:glue:*:*:catalog/*"
        ], 
   "Condition": 
    { 
        "Bool": 
        { 
            "glue:EnabledForRedshiftAutoDiscovery": "true"
        },
        "StringEquals": {
             "aws:ResourceAccount": "${aws:PrincipalAccount}"
        }
    } 
 }, 
 {
    "Sid": "LakeFormationGetMetadataAccessForFederatedCatalogs",
    "Effect": "Allow", 
    "Action": [ 
        "lakeformation:GetDataAccess"
    ], 
    "Resource": [ "*" ], 
    "Condition": 
    { 
        "Bool": 
        {
            "lakeformation:EnabledOnlyForMetaDataAccess":"true"
        },
        "StringEquals": {
             "aws:ResourceAccount": "${aws:PrincipalAccount}"
        },
        "ForAnyValue:StringEquals": 
        { 
            "aws:CalledVia": "glue.amazonaws.com"
        } 
    }
 }
    }
]
```

`glue:GetCatalog` 및 `glue:GetCatalogs` 권한에는 `glue:EnabledForRedshiftAutoDiscovery:true` 조건이 있습니다. 즉, Amazon Redshift는 카탈로그를 자동으로 검색할 수 있는 IAM 액세스 권한을 부여합니다. 옵트아웃하려면 AWS Glue 계정 수준 리소스 정책을 추가하여 카탈로그에 대한 서비스 연결 역할 액세스를 선택적으로 거부합니다. 서비스 연결 역할에 이미 정책에 명시적 허용 작업이 있으므로 옵트아웃 정책은 해당 작업을 명시적으로 거부해야 합니다. 추가 정책이 Amazon Redshift에 대한 자동 검색을 거부하는 다음 예제를 생각해 보세요.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement" : {
            "Effect": "Deny",
            "Action": [
                "glue:GetCatalog",
                "glue:GetCatalogs"
            ],
            "Principal" : {
            "AWS" : "arn:aws:iam::111122223333:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift"
            },
            "Resource": [
                "arn:aws:glue:*:*:catalog/<s3_table_catalog_name>",
                "arn:aws:glue:*:*:catalog/<s3_table_catalog_name>/*"
            ]
        }
}
```

------

**IAM 엔터티가 AWSServiceRoleForRedshift 서비스 연결 역할을 생성하도록 허용**

```
{
    "Effect": "Allow",
    "Action": [
        "iam:CreateServiceLinkedRole"      
    ],
    "Resource": "arn:aws:iam::<AWS-account-ID>:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift",
    "Condition": {"StringLike": {"iam:AWSServiceName": "redshift.amazonaws.com"}}
}
```

**IAM 엔터티가 AWSServiceRoleForRedshift 서비스 연결 역할을 삭제하도록 허용**

IAM 개체에 대한 권한에 다음 정책 설명을 추가합니다.

```
{
    "Effect": "Allow",
    "Action": [
        "iam:DeleteServiceLinkedRole",
        "iam:GetServiceLinkedRoleDeletionStatus"
    ],
    "Resource": "arn:aws:iam::<AWS-account-ID>:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift",
    "Condition": {"StringLike": {"iam:AWSServiceName": "redshift.amazonaws.com"}}
}
```

또는 AWS 관리형 정책을 사용하여 Amazon Redshift에 대한 [전체 액세스 권한을 제공](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonRedshiftFullAccess)할 수 있습니다.

## Amazon Redshift에 대한 서비스 연결 역할 생성
<a name="create-service-linked-role"></a>

AWSServiceRoleForRedshift 서비스 연결 역할은 수동으로 생성할 필요가 없습니다. Amazon Redshift에서 서비스 연결 역할을 자동으로 생성합니다. 사용자 계정에서 AWSServiceRoleForRedshift 서비스 연결 역할이 삭제되면 새 Amazon Redshift 클러스터를 시작할 때 Amazon Redshift에서 해당 역할을 생성합니다.

**중요**  
Amazon Redshift 서비스가 서비스 연결 역할을 지원하기 시작한 2017년 12월 18일 이전에 이 서비스를 사용했다면 Amazon Redshift가 사용자 계정에 AWSServiceRoleForRedshift 역할을 이미 생성했습니다. 자세한 내용은 [내 IAM 계정에 표시되는 새 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/troubleshoot_roles.html#troubleshoot_roles_new-role-appeared)을 참조하세요. 

## Amazon Redshift에 대한 서비스 연결 역할 편집
<a name="edit-service-linked-role"></a>

Amazon Redshift는 AWSServiceRoleForRedshift 서비스 연결 역할을 편집하도록 허용하지 않습니다. 서비스 연결 역할을 생성한 후에는 다양한 엔터티가 역할을 참조할 수 있기 때문에 역할 이름을 변경할 수 없습니다. 그러나 IAM 콘솔, AWS Command Line Interface(AWS CLI) 또는 IAM API를 사용하여 역할에 대한 설명을 편집할 수 있습니다. 자세한 내용은 *IAM User Guide*의 [Modifying a role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html) 섹션을 참조하세요.

## Amazon Redshift에 대한 서비스 연결 역할 삭제
<a name="delete-service-linked-role"></a>

서비스 연결 역할이 필요한 기능 또는 서비스가 더 이상 필요 없는 경우에는 해당 역할을 삭제할 것을 권합니다. 그렇게 하면 적극적으로 모니터링하거나 유지 관리하지 않은 미사용 엔터티가 없습니다.

계정에 대한 서비스 연결 역할을 삭제하려면 클러스터를 종료한 다음 계정에서 삭제해야 합니다. 자세한 내용은 [클러스터 종료 및 삭제](rs-mgmt-shutdown-delete-cluster.md) 섹션을 참조하세요.

IAM 콘솔, AWS CLI 또는 IAM API를 사용하여 서비스 연결 역할을 삭제할 수 있습니다. 자세한 내용은 [IAM 사용 설명서](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#delete-service-linked-role)의 *서비스에 연결 역할 삭제* 섹션을 참조하세요.

# IAM 인증을 이용한 데이터베이스 사용자 자격 증명 생성
<a name="generating-user-credentials"></a>

사용자의 Amazon Redshift 데이터베이스 액세스 권한을 관리하기 위해 AWS Identity and Access Management(IAM) 권한 정책을 통해 허용한 권한을 바탕으로 임시 데이터베이스 자격 증명을 생성할 수 있습니다.

일반적으로 Amazon Redshift 데이터베이스 사용자는 데이터베이스 사용자 이름과 암호를 제공하여 데이터베이스에 로그인합니다. 그러나 Amazon Redshift 데이터베이스에 사용자 이름과 암호를 유지할 필요는 없습니다. 대신 사용자 스스로 자격 증명을 새로 만들고 IAM 자격 증명을 바탕으로 데이터베이스에 로그인하도록 시스템 권한을 구성할 수 있습니다.

Amazon Redshift는 임시 데이터베이스 사용자 자격 증명을 생성하기 위해 [GetClusterCredentials](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html) API 작업을 제공합니다. `GetClusterCredentials` 작업 호출 절차를 관리하는 Amazon Redshift JDBC 또는 ODBC 드라이버로 SQL 클라이언트를 구성할 수 있습니다. 이 과정은 데이터베이스 사용자 자격 증명을 검색하고 SQL 클라이언트와 Amazon Redshift 데이터베이스 사이를 연결함으로써 진행됩니다. 또한 데이터베이스 애플리케이션을 사용해 `GetClusterCredentials` 작업을 프로그램 방식으로 호출하고, 데이터베이스 사용자 자격 증명을 검색하고, 데이터베이스에 연결할 수 있습니다.

이미 AWS 밖에서 사용자 자격 증명을 관리하고 있는 경우, SAML(Security Assertion Markup Language) 2.0을 준수하는 자격 증명 공급자(IdP)를 통해 Amazon Redshift 리소스에 대한 액세스를 관리할 수 있습니다. 연합된 사용자가 IAM 역할에 액세스하도록 IdP를 구성합니다. 그 IAM 역할로 임시 데이터베이스 자격 증명을 생성하고 Amazon Redshift 데이터베이스에 로그인할 수 있습니다.

SQL 클라이언트가 사용자를 대신하여 `GetClusterCredentials` 작업을 호출할 수 있는 권한이 필요합니다. IAM 역할을 만들고 `GetClusterCredentials` 작업과 관련 작업의 액세스 권한을 허용하거나 제한하는 IAM 권한 정책을 연결하여 그러한 권한을 관리합니다. 가장 좋은 방법은 권한 정책을 IAM 역할에 연결한 다음 필요에 따라 사용자 및 그룹에 할당하는 것입니다. 자세한 내용은 [Amazon Redshift의 Identity and Access Management](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)를 참조하세요.

이 정책은 Amazon Redshift 클러스터, 데이터베이스, 데이터베이스 사용자 이름, 사용자 그룹 이름 등과 같은 리소스에 대한 액세스도 허용하거나 제한합니다.

**참고**  
Amazon Redshift JDBC 또는 ODBC 드라이버를 이용해 `GetClusterCredentials` 작업 호출 및 데이터베이스 로그온 절차를 관리할 것을 권장합니다. 간단한 설명을 위해 이 주제에서는 JDBC 또는 ODBC 드라이버로 SQL 클라이언트를 사용한다고 가정하겠습니다.  
`GetClusterCredentials` 작업 또는 병렬 `get-cluster-credentials` CLI 명령 사용의 구체적인 세부 내용과 예시는 [GetClusterCredentials](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html) 및 [get-cluster-credentials](https://docs.aws.amazon.com/cli/latest/reference/redshift/get-cluster-credentials.html)를 참조하십시오.

인증 및 권한 부여를 중앙에서 관리하기 위해 Amazon Redshift는 IAM을 통한 데이터베이스 인증을 지원하므로 엔터프라이즈 연동을 통해 사용자 인증을 사용할 수 있습니다. 사용자를 생성하는 대신 AWS Directory Service, 엔터프라이즈 사용자 디렉터리 또는 웹 자격 증명 공급자의 기존 자격 증명을 사용할 수 있습니다. 이 사용자를 페더레이션 사용자라고 합니다. AWS에서는 IdP를 통해 액세스가 요청되면 페더레이션 사용자에게 역할을 할당합니다.

조직의 사용자 또는 클라이언트 애플리케이션에 대한 연동 액세스를 제공하여 Amazon Redshift API 작업을 호출하기 위해 SAML 2.0 지원이 포함된 JDBC 또는 ODBC 드라이버를 사용하여 조직 IdP에서 인증을 요청할 수도 있습니다. 이 경우 조직의 사용자는 Amazon Redshift에 직접 액세스할 수 없습니다.

자세한 내용은 *IAM User Guide*의 [Identity Providers and Federation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) 섹션을 참조하세요.

# 임시 IAM 보안 인증 정보 생성
<a name="generating-iam-credentials-steps"></a>

이 단원에서는 IAM 기반의 임시 데이터베이스 사용자 자격 증명을 만들고 새 자격 증명을 이용해 데이터베이스에 로그인하도록 시스템을 구성하는 방법을 알아봅니다.

다음은 개괄적으로 살펴보는 프로세스의 흐름입니다

1. [1단계: IAM Single Sign-On 액세스에 대한 IAM 역할 생성](#generating-iam-credentials-sso-role)

   (옵션) 사용자들이 IAM 인증과 서드 파티 자격 증명 공급자(IdP)를 통합하여 Amazon Redshift 데이터베이스에 액세스하도록 인증할 수 있습니다.

1. [2단계: IdP에 대한 SAML 어설션 구성](#configuring-saml-assertions)

   (선택 사항) IdP를 이용해 IAM 인증을 사용하려면 조직의 사용자 내지 그룹을 IAM 역할에 매핑하는 IdP 애플리케이션에서 클레임 규칙을 정의해야 합니다. 혹은 속성 요소를 포함시켜 `GetClusterCredentials` 파라미터를 설정해도 됩니다.

1. [3단계: GetClusterCredentialsWithIAM 또는 GetClusterCredentials 직접 호출 권한이 있는 IAM 역할 생성](#generating-iam-credentials-role-permissions)

   SQL 클라이언트 애플리케이션은 `GetClusterCredentials` 작업을 호출할 때 사용자를 맡습니다. IdP 액세스에 대해 IAM 역할을 생성한 경우, 그 역할에 필요한 권한을 추가할 수 있습니다.

1. [4단계: 데이터베이스 사용자 및 데이터베이스 그룹 생성](#generating-iam-credentials-user-and-groups)

   (선택 사항) 기본적으로 사용자 이름이 없는 경우 `GetClusterCredentials`는 자격 증명을 반환하여 신규 사용자를 만듭니다. 로그온할 때 사용자가 조인하는 사용자 그룹을 지정하는 방안을 선택할 수도 있습니다. 기본적으로 데이터베이스 사용자는 PUBLIC 그룹에 조인합니다.

1. [5단계: IAM 자격 증명을 사용하도록 JDBC 또는 ODBC 연결 구성](#generating-iam-credentials-configure-jdbc-odbc)

   Amazon Redshift 데이터베이스에 연결하려면 SQL 클라이언트가 Amazon Redshift JDBC 또는 ODBC 드라이버를 사용하도록 구성합니다.

## 1단계: IAM Single Sign-On 액세스에 대한 IAM 역할 생성
<a name="generating-iam-credentials-sso-role"></a>

SSO 액세스에 IdP를 사용하지 않으면 이 단계를 건너뛰어도 됩니다.

이미 AWS 외부에서 사용자 자격 증명을 관리하고 있다면 IAM 인증과 서드 파티 SAML-2.0 자격 증명 공급자(IdP)를 통합하여 사용자들이 Amazon Redshift 데이터베이스에 액세스하도록 인증할 수 있습니다.

자세한 내용은 *IAM User Guide*의 [Identity Providers and Federation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html) 섹션을 참조하세요.

Amazon Redshift IdP 인증을 사용하기 전에 AWS SAML 자격 증명 공급자를 생성합니다. IAM 콘솔에서 IdP를 생성하고 IdP와 해당 구성을 AWS에 통보합니다. 이렇게 하면 AWS 계정과 IdP 사이에 신뢰가 설정됩니다. 역할을 생성하는 단계는 *IAM User Guide*의 [Creating a Role for SAML 2.0 Federation (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html?icmpid=docs_iam_console)을 참조하세요.

## 2단계: IdP에 대한 SAML 어설션 구성
<a name="configuring-saml-assertions"></a>

IAM 역할을 만든 다음에는 조직의 사용자 내지 그룹을 IAM 역할에 매핑하는 IdP 애플리케이션에서 클레임 규칙을 정의합니다. 자세한 내용은 *IAM User Guide*의 [Configuring SAML Assertions for the Authentication Response](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html)를 참조하세요.

옵션으로 제공되는 `GetClusterCredentials` 파라미터인 `DbUser`, `AutoCreate`, `DbGroups`를 쓸 경우 두 가지 옵션이 있습니다. JDBC 또는 ODBC 연결로 파라미터의 값을 설정하거나 IdP에 SAML 속성 요소를 추가하여 값을 설정할 수 있습니다. `DbUser`, `AutoCreate`, `DbGroups` 파라미터에 대한 자세한 내용은 [5단계: IAM 자격 증명을 사용하도록 JDBC 또는 ODBC 연결 구성](#generating-iam-credentials-configure-jdbc-odbc) 섹션을 참조하십시오.

**참고**  
`${redshift:DbUser}`에서 설명한 대로 IAM 정책 변수 [GetClusterCredentials에 대한 리소스 정책](redshift-iam-access-control-identity-based.md#redshift-policy-resources.getclustercredentials-resources)를 사용할 경우, `DbUser`의 값이, API 작업의 요청 컨텍스트에서 검색한 값으로 대체됩니다. Amazon Redshift 드라이버는 SAML 속성으로 제공된 값이 아니라 연결 URL에서 제공한 `DbUser` 변수의 값을 사용합니다.  
이 구성의 보안을 위해 IAM 정책의 조건을 사용하여 `DbUser`으로 `RoleSessionName` 값을 확인할 것을 권장합니다. IAM 정책을 사용하여 조건을 설정하는 방법의 예는 [예제 8: GetClusterCredentials 사용을 위한 IAM 정책 예제](redshift-iam-access-control-identity-based.md#redshift-policy-examples-getclustercredentials)에서 볼 수 있습니다.

`DbUser`, `AutoCreate`, `DbGroups` 파라미터를 설정하도록 IdP를 구성하려면 다음 `Attribute` 요소를 포함시킵니다.
+ `Attribute` 속성이 "https://redshift.amazon.com/SAML/Attributes/DbUser"로 설정된 `Name` 요소

  `AttributeValue` 요소를 Amazon Redshift 데이터베이스에 연결할 사용자 이름으로 설정합니다.

  `AttributeValue` 요소 값은 소문자여야 하며, 문자로 시작해서 알파벳 숫자, 밑줄(\$1), 더하기 기호(\$1), 마침표(.), 골뱅이(@), 하이픈(-)만 쓸 수 있고 길이는 128자 미만이어야 합니다. 일반적으로 사용자 이름은 사용자 ID(예: bobsmith) 또는 이메일 주소(예: bobsmith@example.com)입니다. 이 값에 공백이 들어가면 안 됩니다('Bob Smith'처럼 띄어 쓸 수 없음).

  ```
  <Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbUser">
      <AttributeValue>user-name</AttributeValue>
  </Attribute>
  ```
+ Name 속성이 "https://redshift.amazon.com/SAML/Attributes/AutoCreate"로 설정된 Attribute 요소

  데이터베이스 사용자가 없으면 새로 하나 만들어서 AttributeValue 요소를 True로 설정하십시오. Amazon Redshift 데이터베이스에 데이터베이스 사용자가 반드시 존재해야 한다고 지정하려면 AttributeValue를 false로 설정합니다.

  ```
  <Attribute Name="https://redshift.amazon.com/SAML/Attributes/AutoCreate">
      <AttributeValue>true</AttributeValue>
  </Attribute>
  ```
+ `Attribute` 속성이 "https://redshift.amazon.com/SAML/Attributes/DbGroups"로 설정된 `Name` 요소

  이 요소에는 하나 이상의 `AttributeValue` 요소가 포함되어 있습니다. Amazon Redshift 데이터베이스에 연결할 때 세션 기간 동안 `DbUser`가 조인하는 데이터베이스 그룹 이름으로 각 `AttributeValue` 요소를 설정합니다.

  ```
  <Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbGroups">
      <AttributeValue>group1</AttributeValue>
      <AttributeValue>group2</AttributeValue>
      <AttributeValue>group3</AttributeValue>
  </Attribute>
  ```

## 3단계: GetClusterCredentialsWithIAM 또는 GetClusterCredentials 직접 호출 권한이 있는 IAM 역할 생성
<a name="generating-iam-credentials-role-permissions"></a>

SQL 클라이언트가 사용자를 대신하여 ` GetClusterCredentialsWithIAM` 또는 `GetClusterCredentials` 작업을 직접 호출할 수 있는 권한이 필요합니다. 그 인증을 제공하려면 사용자 또는 역할을 새로 만들어 필요한 권한을 허용하는 정책을 연결합니다. 두 작업 모두 클러스터 자격 증명을 얻는 데 사용할 수 있지만 인증 방법은 다릅니다. ` GetClusterCredentialsWithIAM`은 IAM 역할을 사용하여 역할에 매핑되는 데이터베이스 사용자를 자동으로 생성하므로 IAM 역할 수준에서 권한을 관리하는 데 유용한 반면 `GetClusterCredentials`는 데이터베이스의 지정된 사용자 이름에 대한 자격 증명을 제공합니다.

**GetClusterCredentialsWithIAM 직접 호출 권한이 있는 IAM 역할 생성**

1. IAM 서비스를 이용해 사용자 또는 역할을 새로 만듭니다. 기존의 사용자 또는 역할을 사용할 수 있습니다. 예를 들어 IdP 액세스에 대해 IAM 역할을 생성한 경우, 그 역할에 필요한 IAM 정책을 연결할 수 있습니다.

1. ` redshift:GetClusterCredentialsWithIAM` 작업의 호출 권한이 있는 권한 정책을 연결합니다. 다음 정책 샘플은 특정 클러스터 및 데이터베이스, 클러스터의 모든 데이터베이스 및 클러스터의 모든 데이터베이스에 대한 작업을 허용하는 옵션을 보여줍니다.

   ```
   {
       "Version": "2012-10-17", 		 	 	 
       "Statement": [
           {
               "Sid": "SpecificClusterAndDBName",
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentialsWithIAM",
               "Resource": [
                   "arn:aws:redshift:us-east-1:123456789012:dbname:testcluster/testdatabase"
               ]
           },
           {
               "Sid": "SpecificClusterAndAnyDBName",
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentialsWithIAM",
               "Resource": "arn:aws:redshift:us-east-1:123456789012:dbname:examplecluster/*",
           },
           {
               "Sid": "AnyClusterAnyDatabase",
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentialsWithIAM",
               "Resource": "*"
           }
       ]
   }
   ```

**GetClusterCredentials 호출 권한이 있는 IAM 역할 생성**

1. IAM 서비스를 이용해 사용자 또는 역할을 새로 만듭니다. 기존의 사용자 또는 역할을 사용할 수 있습니다. 예를 들어 IdP 액세스에 대해 IAM 역할을 생성한 경우, 그 역할에 필요한 IAM 정책을 연결할 수 있습니다.

1. `redshift:GetClusterCredentials` 작업의 호출 권한이 있는 권한 정책을 연결합니다. 어떤 옵션 파라미터를 지정하느냐에 따라 정책에서 추가 작업 및 리소스를 허용하거나 제한할 수 있습니다.
   + SQL 클라이언트의 클러스터 ID, AWS 리전, 포트 검색을 허용하려면 Redshift 클러스터 리소스가 있는 `redshift:DescribeClusters` 작업의 호출 권한을 포함합니다.
   + `AutoCreate` 옵션을 사용하는 경우 `redshift:CreateClusterUser`호출(`dbuser` 리소스가 있는) 권한을 포함하십시오. 다음 Amazon 리소스 이름(ARN)은 Amazon Redshift `dbuser`를 지정합니다. *`region`*, *`account-id`* 및 *`cluster-name`*을 AWS 리전, 계정 및 클러스터의 값으로 바꿉니다. *`dbuser-name`*에는 클러스터 데이터베이스에 로그인하는 데 사용할 사용자 이름을 지정합니다.

     ```
     arn:aws:redshift:region:account-id:dbuser:cluster-name/dbuser-name
     ```
   + (옵션) Amazon Redshift `dbname` 리소스를 지정하는 ARN을 다음 형식으로 추가합니다. *`region`*, *`account-id`* 및 *`cluster-name`*을 AWS 리전, 계정 및 클러스터의 값으로 바꿉니다. `database-name`에는 사용자가 로그인할 데이터베이스의 이름을 지정합니다.

     ```
     arn:aws:redshift:region:account-id:dbname:cluster-name/database-name
     ```
   + `DbGroups` 옵션을 사용하는 경우 `redshift:JoinGroup` 작업(Amazon Redshift `dbgroup` 리소스가 있는)의 호출 권한을 다음 형식대로 포함합니다. *`region`*, *`account-id`* 및 *`cluster-name`*을 AWS 리전, 계정 및 클러스터의 값으로 바꿉니다. `dbgroup-name`에는 사용자가 로그인할 때 조인하는 사용자 그룹의 이름을 지정합니다.

     ```
     arn:aws:redshift:region:account-id:dbgroup:cluster-name/dbgroup-name
     ```

자세한 내용과 예제는 [GetClusterCredentials에 대한 리소스 정책](redshift-iam-access-control-identity-based.md#redshift-policy-resources.getclustercredentials-resources) 섹션을 참조하세요.

## 4단계: 데이터베이스 사용자 및 데이터베이스 그룹 생성
<a name="generating-iam-credentials-user-and-groups"></a>

선택에 따라 클러스터 데이터베이스에 로그인할 때 사용하는 데이터베이스 사용자를 새로 만들 수 있습니다. 기존 사용자에 임시 사용자 자격 증명을 만들 경우, 그 사용자의 암호를 비활성화하고 임시 암호로 로그온하도록 강제할 수 있습니다. 혹은 `GetClusterCredentials` Autocreate 옵션을 써서 새 데이터베이스 사용자를 자동으로 생성할 수도 있습니다.

IAM 데이터베이스 사용자가 로그인할 때 조인하게 하려는 권한을 가진 데이터베이스 사용자 그룹을 만들 수 있습니다. `GetClusterCredentials` 작업을 호출하면 새 사용자가 로그인 시 조인하는 사용자 그룹 이름의 목록을 지정할 수 있습니다. 이러한 그룹의 멤버쉽은 주어진 요청으로 생성한 자격 증명을 이용해 만든 세션에만 유효합니다.

**데이터베이스 사용자 및 데이터베이스 그룹 생성**

1. Amazon Redshift 데이터베이스에 로그인하여 [CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html)를 이용해 데이터베이스 사용자를 생성하거나 [ALTER USER](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_USER.html)를 이용해 기존 사용자를 변경합니다.

1. 선택적으로 그 사용자가 암호를 쓰지 못하도록 하려면 PASSWORD DISABLE 옵션을 지정합니다. 사용자 암호를 비활성화하면 그 사용자는 임시 보안 인증만 이용해 로그인할 수 있습니다. 사용자 암호를 비활성화하지 않으면 원래 암호 혹은 임시 보안 인증 중 하나를 이용해 로그인할 수 있습니다. 수퍼유저의 암호를 비활성화할 수는 없습니다.

   사용자가 AWS Management Console 외부에서 AWS와 상호 작용하려면 프로그래밍 방식의 액세스 권한이 필요합니다. 프로그래밍 방식의 액세스 권한을 부여하는 방법은 AWS에 액세스하는 사용자 유형에 따라 다릅니다.

   사용자에게 프로그래밍 방식의 액세스 권한을 부여하려면 다음 옵션 중 하나를 선택합니다.  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/generating-iam-credentials-steps.html)

   다음 예에서는 암호가 비활성화된 사용자를 만듭니다.

   ```
   create user temp_creds_user password disable; 
   ```

   다음 예에서는 기존 사용자의 암호를 비활성화합니다.

   ```
   alter user temp_creds_user password disable;
   ```

1. [CREATE GROUP](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_GROUP.html)으로 데이터베이스 사용자 그룹을 새로 만듭니다.

1. [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html) 명령으로 그룹의 액세스 권한을 정의합니다.

## 5단계: IAM 자격 증명을 사용하도록 JDBC 또는 ODBC 연결 구성
<a name="generating-iam-credentials-configure-jdbc-odbc"></a>

Amazon Redshift JDBC 또는 ODBC 드라이버를 사용하여 SQL 클라이언트를 구성할 수 있습니다. 이 드라이버는 데이터베이스 사용자 자격 증명을 생성하고 SQL 클라이언트와 Amazon Redshift 데이터베이스 간의 연결을 설정하는 프로세스를 관리합니다.

인증에 자격 증명 공급자를 쓰는 경우, 자격 증명 공급자 플러그인의 이름을 지정합니다. Amazon Redshift JDBC 및 ODBC 드라이버에는 다음 SAML 기반의 자격 증명 공급자를 위한 플러그인이 포함됩니다.
+ AD FS(Active Directory Federation Services)
+ PingOne
+ Okta
+ Microsoft Azure AD

  Microsoft Azure AD를 자격 증명 공급자로 설정하는 단계는 [JDBC 또는 ODBC Single Sign-On 인증 설정](setup-azure-ad-identity-provider.md) 단원을 참조하십시오.<a name="to-configure-a-jdbc-connection"></a>

**IAM 자격 증명을 사용하도록 JDBC 연결 구성**

1. [Amazon Redshift용 JDBC 드라이버 버전 2.x 연결 구성](jdbc20-install.md) 페이지에서 최신 Amazon Redshift JDBC 드라이버를 다운로드합니다.

1. 다음 형식 중 한 가지로 IAM 자격 증명 옵션이 있는 JDBC URL을 새로 만듭니다. IAM 인증을 사용하려면 다음 예시에 보이는 것처럼 `jdbc:redshift:` 다음에 `iam:`을 Amazon Redshift JDBC URL에 넣습니다.

   ```
   jdbc:redshift:iam://
   ```

   `cluster-name`, `region` 및 `account-id`를 추가합니다. JDBC 드라이버는 IAM 계정 정보와 클러스터 이름을 이용해 클러스터 ID와 AWS 리전을 검색합니다. 이렇게 하려면 사용자 또는 역할에 지정된 클러스터로 `redshift:DescribeClusters` 작업을 호출할 권한이 있어야 합니다. 사용자 또는 역할에 `redshift:DescribeClusters` 작업 호출 권한이 없다면, 다음 예에 보이는 것처럼 클러스터 ID, AWS 리전, 포트를 포함합니다. 포트 번호는 선택에 따릅니다.

   ```
   jdbc:redshift:iam://examplecluster.abc123xyz789.us-west-2.redshift.amazonaws.com:5439/dev
   ```

1. JDBC 옵션을 추가하여 IAM 자격 증명을 제공하십시오. 다른 JDBC 옵션 조합을 이용해 IAM 자격 증명을 제공할 수 있습니다. 자세한 내용은 [데이터베이스 사용자 자격 증명 생성을 위한 JDBC 및 ODBC 옵션](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials)을 참조하세요.

   다음 URL은 사용자에 대한 AccessKeyID와 SecretAccessKey를 지정합니다.

   ```
   jdbc:redshift:iam://examplecluster:us-west-2/dev?AccessKeyID=AKIAIOSFODNN7EXAMPLE&SecretAccessKey=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
   ```

    다음 예에서는 IAM 자격 증명을 포함한 이름 있는 프로필을 지정합니다.

   ```
   jdbc:redshift:iam://examplecluster:us-west-2/dev?Profile=user2
   ```

1. JDBC 드라이버가 `GetClusterCredentials` API 작업을 호출하는 데 사용하는 JDBC 옵션을 추가합니다. `GetClusterCredentials` API 작업을 프로그래밍 방식으로 호출하는 경우 이러한 옵션을 포함하지 마십시오.

   다음 예에는 JDBC `GetClusterCredentials` 옵션이 포함되어 있습니다.

   ```
   jdbc:redshift:iam://examplecluster:us-west-2/dev?plugin_name=com.amazon.redshift.plugin.AzureCredentialsProvider&UID=user&PWD=password&idp_tenant=my_tenant&client_secret=my_secret&client_id=my_id
   ```<a name="to-configure-an-odbc-connection"></a>

**IAM 자격 증명을 사용하도록 ODBC 연결 구성**

다음 절차에서는 IAM 인증 구성을 위한 단계만 안내합니다. 데이터베이스 사용자 이름과 암호를 이용한 표준 인증의 사용 단계는 [Amazon Redshift용 ODBC 드라이버 버전 2.x 연결 구성](odbc20-install.md) 단원을 참조하십시오.

1. 운영 체제에 맞는 최신 Amazon Redshift OBDC 드라이버를 설치하고 구성합니다. 자세한 내용은 [Amazon Redshift용 ODBC 드라이버 버전 2.x 연결 구성](odbc20-install.md) 페이지를 참조하십시오.
**중요**  
Amazon Redshift ODBC 드라이버는 버전 1.3.6.1000 이상이어야 합니다.

1. 운영 체제에 맞는 단계를 따라 연결 설정을 구성하십시오.

1. Microsoft Windows 운영 체제에서는 [Amazon Redshift ODBC 드라이버 DSN 설정(Amazon Redshift ODBC Driver DSN Setup)] 창에 액세스합니다.

   1. **연결 설정(Connection Settings)**에서 다음 정보를 입력하세요.
      + **Data Source Name(데이터 원본 이름** 
      + **서버**(선택 사항) 
      + **포트**(선택 사항) 
      + **데이터베이스**:  

      사용자 또는 역할에 `redshift:DescribeClusters` 작업을 호출할 수 있는 권한이 있는 경우 **Data Source Name**(데이터 소스 이름)과 **Database**(데이터베이스)만 필요합니다. Amazon Redshift는 [**ClusterId**]와 [**리전(Region)**]으로 `DescribeCluster` 작업을 호출하여 서버와 포트를 가져옵니다.

      사용자 또는 역할에 `redshift:DescribeClusters` 작업을 호출할 권한이 없다면 **서버** 및 **포트**를 지정하십시오.

   1. **인증** 아래에서 **Auth Type(인증 유형)** 값을 선택합니다.

      각 인증 유형에 대해 다음과 같이 값을 입력합니다.  
AWS 프로파일  
다음 정보를 입력합니다.  
      + **ClusterID** 
      + **리전(Region** 
      + **프로필 이름** 

        ODBC 연결 옵션에 대한 값을 포함한 AWS config 파일에 프로파일 이름을 입력합니다. 자세한 내용은 [구성 프로필 사용](options-for-providing-iam-credentials.md#using-configuration-profile) 섹션을 참조하세요.
(선택 사항) ODBC 드라이버가 `GetClusterCredentials` API 작업을 호출하는 데 사용하는 옵션에 대한 세부 정보를 입력합니다.  
      + **DbUser**
      + **User AutoCreate**
      + **DbGroups**

        자세한 내용은 [데이터베이스 사용자 자격 증명 생성을 위한 JDBC 및 ODBC 옵션](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials) 섹션을 참조하세요.  
IAM 자격 증명  
다음 정보를 입력합니다.  
      + **ClusterID** 
      + **리전(Region** 
      + **AccessKeyID** 및 **SecretAccessKey** 

        IAM 데이터베이스 인증용으로 구성한 IAM 역할 또는 사용자에 대한 액세스 키 ID와 비밀 액세스 키.
      + **SessionToken** 

        **SessionToken**은 임시 자격 증명을 가진 IAM 역할에 필요합니다. 자세한 내용은 [임시 보안 자격 증명](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)을 참조하십시오.
ODBC 드라이버가 `GetClusterCredentials` API 작업을 호출하는 데 사용하는 옵션에 대한 세부 정보를 입력합니다.  
      + **DbUser**(필수) 
      + **User AutoCreate**(선택 사항) 
      + **DbGroups**(선택 사항) 

        자세한 내용은 [데이터베이스 사용자 자격 증명 생성을 위한 JDBC 및 ODBC 옵션](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials) 섹션을 참조하세요.  
자격 증명 공급자: AD FS  
AD FS와의 Windows 통합 인증의 경우 **User(사용자)** 및 **Password(암호)**를 빈 칸으로 놔두십시오.  
IdP 세부 정보를 제공합니다.  
      + **IdP Host** 

        기업 자격 증명 제공업체 호스트의 이름입니다. 이 이름에 슬래시(/)가 포함되면 안 됩니다.
      + **IdP Port**(선택 사항)

        자격 증명 공급자가 사용하는 포트. 기본값은 443입니다.
      + **Preferred Role** 

        SAML 어설션에서 `AttributeValue` 속성에 대한 다중 값 `Role` 요소에서 IAM 역할의 Amazon 리소스 이름(ARN)입니다. 선호되는 역할에 적절한 값을 찾으려면 IdP 관리자에게 문의하십시오. 자세한 내용은 [2단계: IdP에 대한 SAML 어설션 구성](#configuring-saml-assertions) 섹션을 참조하세요.
(선택 사항) ODBC 드라이버가 `GetClusterCredentials` API 작업을 호출하는 데 사용하는 옵션에 대한 세부 정보를 입력합니다.  
      + **DbUser** 
      + **User AutoCreate** 
      + **DbGroups** 
자세한 내용은 [데이터베이스 사용자 자격 증명 생성을 위한 JDBC 및 ODBC 옵션](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials) 섹션을 참조하세요.  
자격 증명 공급자: PingFederate  
**사용자(User)** 및 **암호(Password)**에 IdP 사용자 이름과 암호를 입력합니다.  
IdP 세부 정보를 제공합니다.  
      + **IdP Host** 

        기업 자격 증명 제공업체 호스트의 이름입니다. 이 이름에 슬래시(/)가 포함되면 안 됩니다.
      + **IdP Port**(선택 사항)

        자격 증명 공급자가 사용하는 포트. 기본값은 443입니다.
      + **Preferred Role** 

        SAML 어설션에서 `AttributeValue` 속성에 대한 다중 값 `Role` 요소에서 IAM 역할의 Amazon 리소스 이름(ARN)입니다. 선호되는 역할에 적절한 값을 찾으려면 IdP 관리자에게 문의하십시오. 자세한 내용은 [2단계: IdP에 대한 SAML 어설션 구성](#configuring-saml-assertions) 섹션을 참조하세요.
(선택 사항) ODBC 드라이버가 `GetClusterCredentials` API 작업을 호출하는 데 사용하는 옵션에 대한 세부 정보를 입력합니다.  
      + **DbUser** 
      + **User AutoCreate** 
      + **DbGroups** 
자세한 내용은 [데이터베이스 사용자 자격 증명 생성을 위한 JDBC 및 ODBC 옵션](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials) 섹션을 참조하세요.  
자격 증명 공급자: Okta  
**User**(사용자) 및 **Password**(암호)에 IdP 사용자 이름과 암호를 입력합니다.  
IdP 세부 정보를 제공합니다.  
      + **IdP Host** 

        기업 자격 증명 제공업체 호스트의 이름입니다. 이 이름에 슬래시(/)가 포함되면 안 됩니다.
      + **IdP Port ** 

        이 값은 Okta에서 사용되지 않습니다.
      + **Preferred Role** 

        SAML 어설션에서 `AttributeValue` 속성에 대한 `Role` 요소에서 IAM 역할의 Amazon 리소스 이름(ARN)입니다. 선호되는 역할에 적절한 값을 찾으려면 IdP 관리자에게 문의하십시오. 자세한 내용은 [2단계: IdP에 대한 SAML 어설션 구성](#configuring-saml-assertions) 섹션을 참조하세요.
      + **Okta App ID** 

        Okta 애플리케이션을 위한 ID. Okta Application Embed Link에서 App ID의 값 뒤에 "amazon\$1aws"가 붙습니다. IdP 관리자에게 문의해 이 값을 얻으십시오.
(선택 사항) ODBC 드라이버가 `GetClusterCredentials` API 작업을 호출하는 데 사용하는 옵션에 대한 세부 정보를 입력합니다.  
      + **DbUser** 
      + **User AutoCreate** 
      + **DbGroups** 
자세한 내용은 [데이터베이스 사용자 자격 증명 생성을 위한 JDBC 및 ODBC 옵션](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials) 섹션을 참조하세요.  
자격 증명 공급자: Azure AD  
**User**(사용자) 및 **Password**(암호)에 IdP 사용자 이름과 암호를 입력합니다.  
[**클러스터 ID(Cluster ID)**] 및 [**리전(Region)**]에 클러스터 ID와 Amazon Redshift 클러스터의 AWS 리전을 입력합니다.  
[**데이터베이스(Database)**]에 Amazon Redshift 클러스터에서 생성한 데이터베이스를 입력합니다.  
IdP 세부 정보를 제공합니다.  
      + **IdP 테넌트** 

        Azure AD에 사용되는 테넌트입니다.
      + **Azure 클라이언트 암호**

        Azure의 Amazon Redshift 엔터프라이즈 앱의 클라이언트 암호입니다.
      + **Azure 클라이언트 ID** 

        Azure의 Amazon Redshift 엔터프라이즈 앱의 클라이언트 ID(애플리케이션 ID)입니다.
(선택 사항) ODBC 드라이버가 `GetClusterCredentials` API 작업을 호출하는 데 사용하는 옵션에 대한 세부 정보를 입력합니다.  
      + **DbUser** 
      + **User AutoCreate** 
      + **DbGroups** 
자세한 내용은 [데이터베이스 사용자 자격 증명 생성을 위한 JDBC 및 ODBC 옵션](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials) 섹션을 참조하세요.

# IAM 자격 증명 제공 옵션
<a name="options-for-providing-iam-credentials"></a>

JDBC 또는 ODBC 연결에 IAM 자격 증명을 제공하려면 다음 옵션 중 한 가지를 선택합니다.
+ **AWS 프로필** 

  JDBC 또는 ODBC 설정의 형태로 자격 증명 값을 제공하는 방식의 대안으로 이름 있는 프로필에 값을 입력할 수 있습니다. 자세한 내용은 [구성 프로필 사용](#using-configuration-profile) 섹션을 참조하세요.
+ **IAM 보안 인증**

  AccessKeyID, SecretAccessKey, 그리고 옵션으로 SessionToken에 대한 값을 JDBC 또는 ODBC 설정의 형태로 제공합니다. SessionToken은 임시 자격 증명을 가진 IAM 역할에만 필요합니다. 자세한 내용은 [IAM 자격 증명 제공을 위한 JDBC 및 ODBC 옵션](#jdbc-options-for-providing-iam-credentials) 섹션을 참조하세요.
+ **ID 제공업체 페더레이션** 

  자격 증명 공급자 페더레이션을 사용하여 자격 증명 공급자의 사용자가 Amazon Redshift에 인증할 수 있도록 하는 경우 자격 증명 공급자 플러그인의 이름을 지정합니다. 자세한 내용은 [자격 증명 제공업체 플러그인](#using-credentials-provider-plugin) 섹션을 참조하세요.

  Amazon Redshift JDBC 및 ODBC 드라이버에는 다음 SAML 기반의 자격 증명 페더레이션 자격 증명 공급자를 위한 플러그인이 포함됩니다.
  + Microsoft Active Identity Federation Services(AD FS)
  + PingOne
  + Okta
  + Microsoft Azure Active Directory (Azure AD)

  JDBC 또는 ODBC 설정의 형태로 혹은 프로필을 이용해 플러그인 이름과 관련 값을 입력할 수 있습니다. 자세한 내용은 [JDBC 드라이버 버전 2.x 구성 옵션](jdbc20-configuration-options.md) 섹션을 참조하세요.

자세한 내용은 [5단계: IAM 자격 증명을 사용하도록 JDBC 또는 ODBC 연결 구성](generating-iam-credentials-steps.md#generating-iam-credentials-configure-jdbc-odbc) 섹션을 참조하세요.

## 구성 프로필 사용
<a name="using-configuration-profile"></a>

IAM 자격 증명 옵션과 `GetClusterCredentials` 옵션은 AWS 구성 파일에서 이름 있는 프로파일의 설정대로 제공할 수 있습니다. 프로필 이름을 제공하려면 Profile JDBC 옵션을 사용합니다. 구성은 홈 디렉터리의 `.aws` 폴더의 `config` 또는 `credentials` 파일에 저장되어 있습니다.

Amazon Redshift JDBC 또는 ODBC 드라이버에 포함된 SAML 기반 자격 증명 공급자 플러그인의 경우 [자격 증명 제공업체 플러그인](#using-credentials-provider-plugin)의 바로 앞에서 설명한 설정을 사용할 수 있습니다. `plugin_name`을 사용하지 않으면 다른 옵션은 무시됩니다.

다음 예에서는 2개의 프로파일이 있는 \$1/.aws/credentials 파일을 보여줍니다.

```
[default]
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user2]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY
session_token=AQoDYXdzEPT//////////wEXAMPLEtc764bNrC9SAPBSM22wDOk4x4HIZ8j4FZTwdQWLWsKWHGBuFqwAeMicRXmxfpSPfIeoIYRqTflfKD8YUuwthAx7mSEI/qkPpKPi/kMcGd
QrmGdeehM4IC1NtBmUpp2wUE8phUZampKsburEDy0KPkyQDYwT7WZ0wq5VSXDvp75YU
9HFvlRd8Tx6q6fE8YQcHNVXAkiY9q6d+xo0rKwT38xVqr7ZD0u0iPPkUL64lIZbqBAz
+scqKmlzm8FDrypNC9Yjc8fPOLn9FX9KSYvKTr4rvx3iSIlTJabIQwj2ICCR/oLxBA==
```

`user2` 예시에 대한 자격 증명을 사용하려면 JDBC URL에서 `Profile=user2`를 지정하십시오.

프로파일 사용에 대한 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [구성 및 자격 증명 파일 설정](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)을 참조하세요.

JDBC 드라이버에 대한 프로필 사용에 대한 자세한 내용은 [프로파일 지정](jdbc20-configure-authentication-ssl.md#jdbc20-aws-credentials-profiles)을 참조하세요.

ODBC 드라이버에 대한 프로필 사용에 대한 자세한 내용은 [인증 방법](odbc20-authentication-ssl.md)을 참조하세요.

## IAM 자격 증명 제공을 위한 JDBC 및 ODBC 옵션
<a name="jdbc-options-for-providing-iam-credentials"></a>

다음 표는 IAM 자격 증명 제공을 위한 JDBC 및 ODBC 옵션을 목록으로 보여줍니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

## 데이터베이스 사용자 자격 증명 생성을 위한 JDBC 및 ODBC 옵션
<a name="jdbc-and-odbc-options-for-database-credentials"></a>

Amazon Redshift JDBC 또는 ODBC 드라이버로 데이터베이스 사용자 자격 증명을 생성하려면 데이터베이스 사용자 이름을 JDBC 또는 ODBC 옵션으로 제공합니다. 선택에 따라 데이터베이스 사용자가 없으면 드라이버가 새로 만들도록 할 수 있고, 사용자가 로그인 시 조인하는 데이터베이스 사용자 그룹 목록을 지정할 수 있습니다.

자격 증명 공급자(IdP)를 사용할 경우, IdP 관리자에게 문의하여 이들 옵션에 올바른 값을 정하십시오. IdP 관리자는 이러한 옵션 제공을 위해 사용자의 IdP를 구성할 수도 있으며, 이 경우 JDBC 또는 ODBC 옵션으로 제공하지 않아도 됩니다. 자세한 내용은 [2단계: IdP에 대한 SAML 어설션 구성](generating-iam-credentials-steps.md#configuring-saml-assertions) 섹션을 참조하세요.

**참고**  
`${redshift:DbUser}`에서 설명한 대로 IAM 정책 변수 [GetClusterCredentials에 대한 리소스 정책](redshift-iam-access-control-identity-based.md#redshift-policy-resources.getclustercredentials-resources)를 사용할 경우, `DbUser`의 값이, API 작업의 요청 컨텍스트에서 검색한 값으로 대체됩니다. Amazon Redshift 드라이버는 SAML 속성으로 제공된 값이 아니라 연결 URL에서 제공한 `DbUser` 변수의 값을 사용합니다.  
이 구성의 보안을 위해 IAM 정책의 조건을 사용하여 `DbUser`으로 `RoleSessionName` 값을 확인할 것을 권장합니다. IAM 정책을 사용하여 조건을 설정하는 방법의 예는 [예제 8: GetClusterCredentials 사용을 위한 IAM 정책 예제](redshift-iam-access-control-identity-based.md#redshift-policy-examples-getclustercredentials)에서 볼 수 있습니다.

다음 표는 데이터베이스 사용자의 자격 증명 생성 옵션을 목록으로 보여줍니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

## 자격 증명 제공업체 플러그인
<a name="using-credentials-provider-plugin"></a>

Amazon Redshift는 Single Sign-On 인증을 위해 자격 증명 공급자 플러그인을 사용합니다.

Single Sign-On 인증을 지원하기 위해 Amazon Redshift는 Microsoft Azure Active Directory용 Azure AD 플러그인을 제공합니다. 이 플러그인을 구성하는 방법에 대한 자세한 내용은 [JDBC 또는 ODBC Single Sign-On 인증 설정](setup-azure-ad-identity-provider.md) 단원을 참조하십시오.

### 다중 인증
<a name="setting_mfa"></a>

멀티 팩터 인증(MFA)을 지원하기 위해 Amazon Redshift는 브라우저 기반 플러그인을 제공합니다. Okta 및 PingOne용 브라우저 SAML 플러그인과 Microsoft Azure Active Directory용 브라우저 Azure AD 플러그인을 사용합니다.

브라우저 SAML 플러그인의 경우, OAuth 인증은 다음과 같이 흐릅니다.

![\[플러그인, 로컬 서버, 웹 브라우저 및 엔드포인트가 함께 작동하여 SAML 인증을 통해 사용자를 인증하는 방법에 대한 OAuth 워크플로입니다.\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/images/BrowserSAML_plugin.png)


1. 사용자가 로그인을 시도합니다.

1. 플러그인은 로컬 서버를 시작하여 로컬 호스트에서 들어오는 연결을 수신합니다.

1. 플러그인은 웹 브라우저를 시작하여 지정된 Single Sign-On 로그인 URL 페더레이션 자격 증명 공급자 엔드포인트에서 HTTPS를 통해 SAML 응답을 요청합니다.

1. 웹 브라우저는 링크를 따라 사용자에게 자격 증명을 입력하라는 메시지를 표시합니다.

1. 사용자가 인증하고 동의하면 연동 자격 증명 공급자 엔드포인트가 HTTPS를 통해 `redirect_uri`에 표시된 URI에 SAML 응답을 반환합니다.

1. 웹 브라우저는 SAML 응답과 함께 응답 메시지를 표시된 `redirect_uri`로 이동합니다.

1. 로컬 서버는 수신 연결을 수락하고 플러그인은 SAML 응답을 검색하여 Amazon Redshift에 전달합니다.

브라우저 Azure AD 플러그인의 경우, SAML 인증은 다음과 같이 흐릅니다.

![\[플러그인, 로컬 서버, 웹 브라우저 및 엔드포인트가 함께 작동하여 SAML 인증을 통해 사용자를 인증하는 방법에 대한 Azure 워크플로입니다.\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/images/BrowserAzure_plugin.png)


1. 사용자가 로그인을 시도합니다.

1. 플러그인은 로컬 서버를 시작하여 로컬 호스트에서 들어오는 연결을 수신합니다.

1. 플러그인은 웹 브라우저를 시작하여 Azure AD `oauth2/authorize` 엔드포인트로부터 권한 부여 코드를 요청합니다.

1. 웹 브라우저는 HTTPS를 통해 생성된 링크를 따라 사용자에게 자격 증명을 입력하라는 메시지를 표시합니다. 링크는 테넌트 및 client\$1id와 같은 구성 속성을 사용하여 생성됩니다.

1. 사용자가 인증하고 동의하면 Azure AD `oauth2/authorize` 엔드포인트가 HTTPS를 통해 표시된 `redirect_uri`에 권한 부여 코드와 함께 응답을 반환하고 보냅니다.

1. 웹 브라우저는 SAML 응답과 함께 응답 메시지를 표시된 `redirect_uri`로 이동합니다.

1. 로컬 서버는 수신 연결 및 플러그인 요청을 수락하고 권한 부여 코드를 검색하고 Azure AD `oauth2/token` 엔드포인트에 POST 요청을 보냅니다.

1. Azure AD `oauth2/token` 엔드포인트는 표시된 `redirect_uri`에 액세스 토큰이 있는 응답을 반환합니다.

1. 플러그인은 SAML 응답을 검색하여 Amazon Redshift에 전달합니다.

다음 단원을 참조하십시오.
+ AD FS(Active Directory Federation Services)

  자세한 내용은 [JDBC 또는 ODBC Single Sign-On 인증 설정](setup-azure-ad-identity-provider.md) 섹션을 참조하세요.
+ PingOne(Ping) 

  Ping은 Forms 인증을 사용하여 사전에 지정한 PingOne IdP Adapter로만 지원됩니다.

  자세한 내용은 [JDBC 또는 ODBC Single Sign-On 인증 설정](setup-azure-ad-identity-provider.md) 섹션을 참조하세요.
+ Okta 

  Okta는 AWS Management Console과 함께 사용되는 Okta 제공 애플리케이션에만 지원됩니다.

  자세한 내용은 [JDBC 또는 ODBC Single Sign-On 인증 설정](setup-azure-ad-identity-provider.md) 섹션을 참조하세요.
+ Microsoft Azure Active Directory

  자세한 내용은 [JDBC 또는 ODBC Single Sign-On 인증 설정](setup-azure-ad-identity-provider.md) 섹션을 참조하세요.

### 플러그인 옵션
<a name="configuring_plugin_options"></a>

SAML 기반의 자격 증명 공급자 플러그인을 사용하려면 JDBC 또는 ODBC 옵션을 사용하거나 명명된 프로파일에서 다음 옵션을 지정합니다. `plugin_name`을 지정하지 않으면 다른 옵션은 무시됩니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/options-for-providing-iam-credentials.html)

# Amazon Redshift CLI 또는 API를 이용한 IAM ID에 대한 데이터베이스 자격 증명 생성
<a name="generating-iam-credentials-cli-api"></a>

임시 데이터베이스 사용자 자격 증명을 프로그래밍 방식으로 생성하기 위해 Amazon Redshift는 [get-cluster-credentials](https://docs.aws.amazon.com/cli/latest/reference/redshift/get-cluster-credentials.html) 명령을 AWS Command Line Interface(AWS CLI) 및 [GetClusterCredentials](https://docs.aws.amazon.com/redshift/latest/APIReference/API_GetClusterCredentials.html) API 작업에 제공합니다. 또는 `GetClusterCredentials` 작업을 호출하고, 데이터베이스 사용자 자격 증명을 검색하고, SQL 클라이언트와 Amazon Redshift 데이터베이스 사이를 연결하는 과정을 관리하는 Amazon Redshift JDBC 또는 ODBC 드라이버로 SQL 클라이언트를 구성할 수 있습니다. 자세한 내용은 [데이터베이스 사용자 자격 증명 생성을 위한 JDBC 및 ODBC 옵션](options-for-providing-iam-credentials.md#jdbc-and-odbc-options-for-database-credentials) 섹션을 참조하세요.

**참고**  
Amazon Redshift JDBC 또는 ODBC 드라이버를 사용해 데이터베이스 사용자 자격 증명을 만드는 방식을 권장합니다.

이 단원에서는 `GetClusterCredentials` 작업이나 get-cluster-credentials 명령을 프로그램 방식으로 호출하고, 데이터베이스 사용자 자격 증명을 검색하고, 데이터베이스에 연결하는 단계를 설명합니다.

**임시 데이터베이스 자격 증명의 생성 및 사용**

1. 필수 권한으로 역할 또는 사용자를 새로 만들거나 수정하십시오. IAM 권한에 대한 자세한 내용은 [3단계: GetClusterCredentialsWithIAM 또는 GetClusterCredentials 직접 호출 권한이 있는 IAM 역할 생성](generating-iam-credentials-steps.md#generating-iam-credentials-role-permissions) 단원을 참조하세요.

1. 사용자 또는 역할로서 귀하는 이전 단계에서 get-cluster-credentials CLI 명령을 실행하거나 `GetClusterCredentials` API 작업을 호출하고 다음 값을 제공할 권한이 있습니다.
   + [**클러스터 식별자(Cluster identifier)**] – 데이터베이스가 포함된 클러스터의 이름.
   + [**데이터베이스 사용자 이름(Database user name)**] – 기존 또는 신규 데이터베이스 사용자의 이름.
     + 데이터베이스에 사용자가 없고 AutoCreate가 True인 경우, PASSWORD 비활성 상태로 새 사용자를 만듭니다.
     +  사용자가 없고 AutoCreate가 False인 경우 이 요청이 실패합니다.
     + 이 예에서 데이터베이스 사용자 이름은 `temp_creds_user`입니다.
   +  [**Autocreate**] – (옵션) 데이터베이스 사용자 이름이 존재하지 않으면 새 사용자를 생성합니다.
   +  [**데이터베이스 이름(Database name)**] – (옵션) 사용자가 로그온할 권한이 있는 데이터베이스의 이름. 데이터베이스 이름이 지정되지 않은 경우 사용자는 모든 클러스터 데이터베이스에 로그온할 수 있습니다.
   +  [**데이터베이스 그룹(Database groups)**] – (옵션) 기존 데이터베이스 사용자 그룹의 목록. 성공적으로 로그인하면 지정된 사용자 그룹에 데이터베이스 사용자가 추가됩니다. 그룹을 지정하지 않으면 사용자는 PUBLIC 권한만 가집니다. 사용자 그룹 이름은 사용자 또는 역할에 연결된 IAM 정책에 지정된 dbgroup 리소스 ARN과 일치해야 합니다.
   +  [**만료 시간(Expiration time)**] – (옵션) 임시 자격 증명이 만료할 때까지 남은 시간(초). 900초(15분)\$13600초(60분) 사이로 지정할 수 있습니다. 기본값은 900초입니다.

1. Amazon Redshift는 사용자가 지정된 리소스로 `GetClusterCredentials` 작업을 호출할 권한이 있는지 검증합니다.

1. Amazon Redshift는 임시 암호와 데이터베이스 사용자 이름을 반환합니다.

   다음 예에서는 Amazon Redshift CLI를 사용하여 `temp_creds_user`라는 기존 사용자에 대한 임시 데이터베이스 자격 증명을 새로 만듭니다.

   ```
   aws redshift get-cluster-credentials --cluster-identifier examplecluster --db-user temp_creds_user --db-name exampledb --duration-seconds 3600
   ```

   쿼리 결과는 다음과 같습니다.

   ```
   {
     "DbUser": "IAM:temp_creds_user", 
     "Expiration": "2016-12-08T21:12:53Z", 
     "DbPassword": "EXAMPLEjArE3hcnQj8zt4XQj9Xtma8oxYEM8OyxpDHwXVPyJYBDm/gqX2Eeaq6P3DgTzgPg=="
   }
   ```

   다음 예에서는 Amazon Redshift CLI와 autocreate를 사용하여 신규 사용자에 대한 임시 데이터베이스 자격 증명을 생성하고 이 사용자를 그룹 `example_group`에 추가합니다.

   ```
   aws redshift get-cluster-credentials --cluster-identifier examplecluster --db-user temp_creds_user --auto-create --db-name exampledb --db-groups example_group --duration-seconds 3600
   ```

   쿼리 결과는 다음과 같습니다.

   ```
   {
     "DbUser": "IAMA:temp_creds_user:example_group", 
     "Expiration": "2016-12-08T21:12:53Z", 
     "DbPassword": "EXAMPLEjArE3hcnQj8zt4XQj9Xtma8oxYEM8OyxpDHwXVPyJYBDm/gqX2Eeaq6P3DgTzgPg=="
   }
   ```

1. Amazon Redshift 클러스터로 Secure Socket Layer(SSL) 인증을 연결하고 사용자 이름과 암호로 `GetClusterCredentials` 응답에서 로그인 요청을 보냅니다. 사용자 이름에 `IAM:` 또는 `IAMA:`의 예처럼 `IAM:temp_creds_user` 또는 `IAMA:temp_creds_user` 접두사를 넣으십시오.
**중요**  
SQL 클라이언트를 구성하여 SSL을 요청합니다. 혹은 SQL 클라이언트가 자동으로 SSL과 연결 시도를 하면 어떤 식으로든 실패할 경우 SSL가 아닌 곳으로 대체할 수 있습니다. 이 경우 자격 증명이 만료되었거나 유효하지 않기 때문에 첫 번째 연결 시도가 실패할 수 있으며, 이후 SSL 연결이 아니기 때문에 두 번째 연결이 실패합니다. 이렇게 되면 첫 번째 오류 메시지가 누락될 수 있습니다. SSL을 이용한 클러스터 연결에 대한 자세한 내용은 [연결을 위한 보안 옵션 구성](connecting-ssl-support.md) 단원을 참조하십시오.

1. 연결이 SSL을 사용하지 않으면 연결 시도가 실패합니다.

1. 클러스터가 SQL 클라이언트로 `authentication` 요청을 보냅니다.

1. 그러면 SQL 클라이언트가 클러스터로 임시 암호를 보냅니다.

1. 암호가 유효하고 아직 만료되지 않았다면 클러스터가 연결을 완료합니다.

# JDBC 또는 ODBC Single Sign-On 인증 설정
<a name="setup-azure-ad-identity-provider"></a>

외부 ID 제공업체(idP)를 활용하여 사용자가 Amazon Redshift 클러스터에 액세스하도록 인증하고 권한을 부여하여 사용자 관리를 간소화하고 보안을 강화할 수 있습니다. 이를 통해 여러 서비스 전반에서 중앙 집중식 사용자 관리, 역할 기반 액세스 제어 및 감사 기능을 사용합니다. 일반적인 사용 사례에는 다양한 사용자 그룹에 대한 인증 간소화, 일관된 액세스 정책 적용, 규제 요구 사항 충족이 포함됩니다.

다음 페이지에서는 Redshift 클러스터와 idP 통합을 구성하는 방법을 안내합니다. IdP에 대한 서비스 공급자로 AWS 구성에 대한 자세한 내용은 *IAM User Guide*의 [Configuring Your SAML 2.0 IdP with Relying Party Trust and Adding Claims](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_relying-party.html#saml_relying-party)를 참조하세요.

# AD FS
<a name="setup-identity-provider-adfs"></a>

이 자습서에서는 AD FS를 ID 제공업체(idP)로 사용하여 Amazon Redshift 클러스터에 액세스하는 방법을 보여 줍니다.

## 1단계: AD FS와 AWS 계정을 서로 신뢰하도록 설정
<a name="setup-identity-provider-adfs-trust"></a>

 다음 절차에서는 신뢰 관계를 설정하는 방법을 설명합니다.

1. AD FS 사용자가 연결할 기존 Amazon Redshift 클러스터를 사용하거나 생성합니다. 연결을 구성하려면 이 클러스터의 특정 속성(예: 클러스터 식별자)이 필요합니다. 자세한 내용은 [클러스터 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html) 섹션을 참조하세요.

1. Microsoft Management Console에서 Amazon Redshift 액세스를 제어하도록 AD FS를 설정합니다.

   1. **ADFS 2.0**을 선택한 후 **Add Relying Party Trust(신뢰 당사자 신뢰 추가)**를 선택합니다. **Add Relying Party Trust Wizard(신뢰 당사자 신뢰 추가 마법사)** 페이지에서 **시작**을 선택합니다.

   1. **Select Data Source(데이터 원본 선택)** 페이지에서 **Import data about the relying party published online or on a local network(온라인 또는 로컬 네트워크에 게시된 신뢰 당사자에 대한 데이터 가져오기)**를 선택합니다.

   1. **Federation metadata address (host name or URL)(연동 메타데이터 주소(호스트 이름 또는 URL))**에 **https://signin.aws.amazon.com/saml-metadata.xml**을 입력합니다. 메타데이터 XML 파일은 AWS를 신뢰 당사자로 설명하는 표준 SAML 메타데이터 문서입니다.

   1. **표시 이름 지정** 페이지에서 **표시 이름**에 값을 입력합니다.

   1. **Choose Issuance Authorization Rules(발급 권한 부여 규칙 선택)** 페이지에서 발급 권한 부여 규칙을 선택하여 모든 사용자가 이 신뢰 당사자에 액세스할 수 있도록 허용하거나 거부합니다.

   1. **Ready to Add Trust(신뢰 추가 준비 완료)** 페이지에서 설정을 검토합니다.

   1. **Finish(완료)** 페이지에서 **Open the Edit Claim Rules dialog for this relying party trust when the wizard closes(마법사가 닫힐 때 이 신뢰 당사자 신뢰에 대한 클레임 규칙 편집 대화 상자 열기)**를 선택합니다.

   1. 컨텍스트(오른쪽 클릭) 메뉴에서 **Relying Party Trusts(신뢰 당사자 신뢰)**를 선택합니다.

   1. 신뢰 당사자의 경우 컨텍스트(오른쪽 클릭) 메뉴를 열고 **Edit Claim Rules(클레임 규칙 편집)**를 선택합니다. **클레임 규칙 편집(Edit Claim Rules)** 페이지에서 **규칙 추가(Add Rule)**를 선택합니다.

   1. **Claim rule template(클레임 규칙 템플릿)**에서 **Transform an Incoming Claim(수신 클레임 변환)**을 선택한 후 **Edit Rule – NameId(규칙 편집 – NameId)** 페이지에서 다음을 수행합니다.
      + **클레임 규칙 이름**에 **NameId**를 입력합니다.
      + **Incoming claim name(수신 클레임 이름)**으로 **Windows Account Name(Windows 계정 이름)**을 선택합니다.
      + **Outgoing claim name(발신 클레임 이름)**으로 **Name ID(이름 ID)**를 선택합니다.
      + **Outgoing name ID format(발신 이름 ID 형식)**으로 **Persistent Identifier(영구 식별자)**를 선택합니다.
      + **Pass through all claim values(모든 클레임 값 전달)**를 선택합니다.

   1. **Edit Claim Rules**(클레임 규칙 편집) 페이지에서 **Add Rule**(규칙 추가)를 선택합니다. **Select Rule Template(규칙 템플릿 선택)** 페이지에서 **Claim rule template(클레임 규칙 템플릿)**으로 **Send LDAP Attributes as Claims(LDAP 속성을 클레임으로 전송)**를 선택합니다.

   1. **규칙 구성** 페이지에서 다음 작업을 수행합니다.
      + **클레임 규칙 이름**에 **RoleSessionName**을 입력합니다.
      + **속성 저장**의 경우 **Active Directory**를 선택합니다.
      + **LDAP Attribute(LDAP 속성)**의 경우 **이메일 주소**를 선택합니다.
      + [**발신 클레임 유형(Outgoing Claim Type)**]으로 **https://aws.amazon.com/SAML/Attributes/RoleSessionName**을 선택합니다.

   1. **Edit Claim Rules**(클레임 규칙 편집) 페이지에서 **Add Rule**(규칙 추가)를 선택합니다. **규칙 템플릿 선택(Select Rule Template)** 페이지에서 **클레임 규칙 템플릿(Claim rule template)**으로 **사용자 지정 규칙을 사용하여 클레임 전송(Send Claims Using a Custom Rule)**을 선택합니다.

   1. **Edit Rule – Get AD Groups(규칙 편집 – AD 그룹 가져오기)** 페이지에서 **클레임 규칙 이름**에 **Get AD Groups(AD 그룹 가져오기)**를 입력합니다.

   1. **Custom rule(사용자 지정 규칙)**에 다음을 입력합니다.

      ```
      c:[Type ==
                                          "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",
                                          Issuer == "AD AUTHORITY"] => add(store = "Active Directory",
                                          types = ("http://temp/variable"), query = ";tokenGroups;{0}",
                                          param = c.Value);
      ```

   1. **Edit Claim Rules**(클레임 규칙 편집) 페이지에서 **Add Rule**(규칙 추가)를 선택합니다. **Select Rule Template**(규칙 템플릿 선택) 페이지에서 **Claim rule template**(클레임 규칙 템플릿)으로 **Send Claims Using a Custom Rule**(사용자 지정 규칙을 사용하여 클레임 전송)을 선택합니다.

   1. **Edit Rule – Roles(규칙 편집 – 역할)** 페이지에서 **클레임 규칙 이름**에 **역할**을 입력합니다.

   1. **Custom rule(사용자 지정 규칙)**에 다음을 입력합니다.

      ```
      c:[Type == "http://temp/variable", Value =~ "(?i)^AWS-"] => issue(Type = "https://aws.amazon.com/SAML/Attributes/Role", Value = RegExReplace(c.Value, "AWS-", "arn:aws:iam::123456789012:saml-provider/ADFS,arn:aws:iam::123456789012:role/ADFS-"));
      ```

      SAML 공급자 및 맡을 역할의 ARN을 적어 둡니다. 이 예에서 `arn:aws:iam:123456789012:saml-provider/ADFS`는 SAML 공급자의 ARN이고 `arn:aws:iam:123456789012:role/ADFS-`는 역할의 ARN입니다.

1. `federationmetadata.xml` 파일을 다운로드했는지 확인합니다. 문서 내용에 잘못된 문자가 없는지 확인합니다. 이는 AWS와의 신뢰 관계를 구성할 때 사용하는 메타데이터 파일입니다.

1. IAM 콘솔에서 IAM SAML 자격 증명 공급자를 만듭니다. 제공하는 메타데이터 문서는 Azure 엔터프라이즈 애플리케이션을 설정할 때 저장한 연동 메타데이터 XML 파일입니다. 자세한 단계는 *IAM User Guide*의 [Creating and Managing an IAM Identity Provider (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)를 참조하세요.

1. IAM 콘솔에서 SAML 2.0 연동을 위한 IAM 역할을 만듭니다. 자세한 단계는 *IAM User Guide*의 [Creating a Role for SAML](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)을 참조하세요.

1. IAM 콘솔에서 SAML 2.0 연동을 위해 생성한 IAM 역할에 연결할 수 있는 IAM 정책을 만듭니다. 자세한 단계는 *IAM User Guide*의 [Creating IAM Policies (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)를 참조하세요. Azure AD 예제는 [JDBC 또는 ODBC Single Sign-On 인증 설정](setup-azure-ad-identity-provider.md) 단원을 참조하십시오.

## 2단계: AD FS에 대한 인증을 위해 JDBC 또는 ODBC 설정
<a name="setup-identity-provider-adfs-auth"></a>

------
#### [ JDBC ]

 다음 절차에서는 AD FS에 대한 JDBC 관계를 설정하는 방법을 설명합니다.
+ AD FS Single Sign-On을 사용하여 JDBC를 통해 클러스터에 연결하도록 데이터베이스 클라이언트를 구성합니다.

  JDBC 드라이버를 사용하는 클라이언트를 사용하여 AD FS Single Sign-On으로 연결하거나 Java와 같은 언어를 사용하여 스크립트를 통해 연결할 수 있습니다. 설치 및 구성 정보는 [Amazon Redshift용 JDBC 드라이버 버전 2.x 연결 구성](jdbc20-install.md) 단원을 참조하십시오.

  예를 들어 SQLWorkbench/J를 클라이언트로 사용할 수 있습니다. SQLWorkbench/j를 구성할 때 데이터베이스의 URL은 다음 형식을 사용합니다.

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  SQLWorkbench/J를 클라이언트로 사용하는 경우 다음 단계를 수행합니다.

  1. SQL Workbench/J를 시작합니다. [**연결 프로파일 선택(Select Connection Profile)**] 페이지에서 [**프로파일 그룹(Profile Group)**]을 추가합니다(예: **ADFS**).

  1. **Connection Profile(연결 프로파일)**에 연결 프로파일 이름을 입력합니다(예: **ADFS**).

  1. **Manage Drivers**(드라이버 관리)를 선택하고, **Amazon Redshift**를 선택합니다. [**라이브러리(Library)**] 옆에 있는 [**폴더 열기(Open Folder)**] 아이콘을 선택한 다음 적절한 JDBC .jar 파일을 선택합니다.

  1. **Select Connection Profile**(연결 프로파일 선택) 페이지에서 다음과 같이 연결 프로파일에 정보를 추가합니다.
     + **사용자**에 AD FS 사용자 이름을 입력합니다. 이는 Single Sign-On에 사용 중인 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다.
     + **암호**에 AD FS 암호를 입력합니다.
     + **드라이버(Drivers)**에서 **Amazon Redshift(com.amazon.redshift.jdbc.Driver)**를 선택합니다.
     + **URL**에 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***을 입력합니다.

  1. [**확장 속성(Extended Properties)**]을 선택합니다. **plugin\$1name**에 **com.amazon.redshift.plugin.AdfsCredentialsProvider**를 입력합니다. 이 값은 드라이버에 AD FS Single Sign-On을 인증 방법으로 사용하도록 지정합니다.

------
#### [ ODBC ]

**AD FS에 대한 인증을 위해 ODBC를 설정하려면**
+ AD FS Single Sign-On을 사용하여 ODBC를 통해 클러스터에 연결하도록 데이터베이스 클라이언트를 구성합니다.

  Amazon Redshift는 Linux, Windows 및 macOS 운영 체제용 ODBC 드라이버를 제공합니다. ODBC 드라이버를 설치하려면 먼저 SQL 클라이언트 도구가 32비트인지, 64비트인지 확인합니다. SQL 클라이언트 도구의 요구 사항에 맞는 ODBC 드라이버를 설치합니다.

  Windows의 경우 **Amazon Redshift ODBC 드라이버 DSN 설정(Amazon Redshift ODBC Driver DSN Setup)** 페이지의 **연결 설정(Connection Settings)** 아래에 다음 정보를 입력합니다.
  + **데이터 원본 이름(Data Source Name)**에 ***your-DSN***을 입력합니다. 이는 ODBC 프로파일 이름으로 사용되는 데이터 원본 이름을 지정합니다.
  + [**인증 유형(Auth type)**]에서 [**자격 증명 공급자: SAML(Identity Provider: SAML)**]을 선택합니다. 이는 ODBC 드라이버가 AD FS Single Sign-On을 사용하여 인증할 때 사용하는 인증 방법입니다.
  + **클러스터 ID(Cluster ID)**에 ***your-cluster-identifier***를 입력합니다.
  + **리전(Region)**에 ***your-cluster-region***을 입력합니다.
  + **데이터베이스(Database)**에 ***your-database-name***을 입력합니다.
  + **사용자(User)**에 ***your-adfs-username***을 입력합니다. 이는 Single Sign-On에 사용 중인 AD FS 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다. **인증 유형(Auth type)**이 **자격 증명 공급자: SAML(Identity Provider: SAML)**인 경우에만 이를 사용합니다.
  + **Password**(암호)에 ***your-adfs-password***를 입력합니다. **Auth type**(인증 유형)이 **Identity Provider: SAML**(자격 증명 공급자: SAML)인 경우에만 이를 사용합니다.

  macOS 및 Linux에서는 다음과 같이 `odbc.ini` 파일을 편집합니다.
**참고**  
모든 항목은 대/소문자를 구분하지 않습니다.
  + **clusterid**에 ***your-cluster-identifier***를 입력합니다. 이는 생성된 Amazon Redshift 클러스터의 이름입니다.
  + **리전(region)**에 ***your-cluster-region***을 입력합니다. 이는 생성된 Amazon Redshift 클러스터의 AWS 리전입니다.
  + **데이터베이스(database)**에 ***your-database-name***을 입력합니다. 이는 Amazon Redshift 클러스터에서 액세스하려는 데이터베이스의 이름입니다.
  + **로캘(locale)**에 **en-us**를 입력합니다. 이는 오류 메시지가 표시되는 언어입니다.
  + **iam**에 **1**을 입력합니다. 이 값은 드라이버에 IAM 자격 증명을 사용하여 인증하도록 지정합니다.
  + **plugin\$1name**의 경우 다음 중 하나를 수행합니다.
    + MFA를 사용하는 Azure AD Single Sign-On 구성에 **BrowserSAML**을 입력합니다. 이는 ODBC 드라이버가 AD FS에 인증할 때 사용하는 인증 방법입니다.
    + Azure AD Single Sign-On 구성에 **ADFS**를 입력합니다. 이는 ODBC 드라이버가 Azure AD Single Sign-On을 사용하여 인증할 때 사용하는 인증 방법입니다.
  + **uid**에 ***your-adfs-username***을 입력합니다. 이는 Single Sign-On에 사용 중인 Microsoft Azure 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다. **plugin\$1name**이 **ADFS**인 경우에만 이를 사용합니다.
  + **pwd**에 ***your-adfs-password***를 입력합니다. **plugin\$1name**이 **ADFS**인 경우에만 이를 사용합니다.

  macOS 및 Linux에서는 프로파일 설정을 편집하여 다음 내보내기도 추가합니다.

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

# Azure
<a name="setup-identity-provider-azure"></a>

Microsoft Azure AD를 IdP(자격 증명 공급자)로 사용하여 Amazon Redshift 클러스터에 액세스할 수 있습니다. 이 자습서에서는 Azure를 ID 제공업체(idP)로 사용하여 Amazon Redshift 클러스터에 액세스하는 방법을 보여 줍니다.

Microsoft Azure AD Single Sign-On을 사용하여 Amazon Redshift 액세스를 페더레이션하는 방법을 알아봅니다.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/aXs9hEgJCss/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/aXs9hEgJCss)


## 1단계: Azure와 AWS 계정을 서로 신뢰하도록 설정
<a name="setup-identity-provider-azure-trust"></a>

다음 절차에서는 신뢰 관계를 설정하는 방법을 설명합니다.

**Azure AD와 AWS 계정을 서로 신뢰하도록 설정하려면**

1. Azure AD 사용자가 연결할 기존 Amazon Redshift 클러스터를 사용하거나 생성합니다. 연결을 구성하려면 이 클러스터의 특정 속성(예: 클러스터 식별자)이 필요합니다. 자세한 내용은 [클러스터 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html) 섹션을 참조하세요.

1. Microsoft Azure 포털에서 AWS에 사용되는 Azure Active Directory, 그룹, 사용자를 설정합니다.

1. Microsoft Azure 포털에서 Amazon Redshift를 AWS 콘솔에 대한 통합 인증 및 Amazon Redshift에 대한 페더레이션 로그인에 사용할 엔터프라이즈 애플리케이션으로 추가합니다. **Enterprise application(엔터프라이즈 애플리케이션)**을 선택합니다.

1. **\$1New application(새 애플리케이션 추가)**을 선택합니다. 애플리케이션 추가 페이지가 나타납니다.

1. 검색 필드에서 **AWS**를 검색합니다.

1. [**Amazon Web Services(AWS)**]와 [**추가(Add)**]를 차례로 선택합니다. 그러면 AWS 애플리케이션이 생성됩니다.

1. **관리**에서 **Single sign-on**을 선택합니다.

1. **SAML**을 선택합니다. Amazon Web Services(AWS) \$1 SAML -based Sign-on(SAML 기반 로그온) 페이지가 나타납니다.

1. **예**를 선택하여 Set up Single Sign-On with SAML(SAML을 사용하여 Single Sign-On 설정) 페이지로 이동합니다. 이 페이지에는 미리 구성된 Single Sign-On 관련 속성 목록이 나와 있습니다.

1. **Basic SAML Configuration(기본 SAML 구성)**에서 편집 아이콘을 선택하고 **저장**을 선택합니다.

1. 둘 이상의 애플리케이션에 대해 구성하는 경우 식별자 값을 제공합니다. 예를 들면 ***https://signin.aws.amazon.com/saml\$12***를 입력합니다. 두 번째 애플리케이션부터 이 형식을 \$1 기호와 함께 사용하여 고유한 SPN 값을 지정합니다.

1. **User Attributes and Claims(사용자 속성 및 클레임)** 섹션에서 편집 아이콘을 선택합니다.

   기본적으로 고유한 사용자 식별자(UID), 역할, RoleSessionName 및 SessionDuration 클레임은 미리 구성되어 있습니다.

1. **\$1 Add new claim(새 클레임 추가)**을 선택하여 데이터베이스 사용자에 대한 클레임을 추가합니다.

   **이름(Name)**에 **DbUser**을 입력합니다.

   **네임스페이스(Namespace)**에**https://redshift.amazon.com/SAML/Attributes**를 입력합니다.

   **소스(Source)**에서 **속성(Attribute)**를 선택합니다.

   **소스 속성**에서 **user.userprincipalname**을 선택합니다. 그런 다음 **저장(Save)**을 선택합니다.

1. **\$1 Add new claim(새 클레임 추가)**을 선택하여 AutoCreate에 대한 클레임을 추가합니다.

   **Name**(이름)에 **AutoCreate**을 입력합니다.

   **네임스페이스(Namespace)**에**https://redshift.amazon.com/SAML/Attributes**를 입력합니다.

   **Source**(소스)에서**Attribute**(속성)를 선택합니다.

   **소스 속성**에서 **"true"**를 선택합니다. 그런 다음 **Save**(저장)을 선택합니다.

   여기에서 `123456789012`는 AWS 계정, *`AzureSSO`*는 생성한 IAM 역할, *`AzureADProvider`*는 IAM 공급자입니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/setup-identity-provider-azure.html)

1. **앱 등록 > ***your-application-name*** > 인증**에서 **모바일 및 데스크톱 애플리케이션**을 추가합니다. URL을 http://localhost/redshift/로 지정합니다.

1. **SAML Signing Certificate(SAML 서명 인증서)** 섹션에서 **다운로드**를 선택하여 IAM SAML 자격 증명 공급자를 만들 때 사용할 연동 메타데이터 XML 파일을 다운로드하고 저장합니다. 이 파일은 Single Sign-On 페더레이션 자격 증명을 생성하는 데 사용됩니다.

1. IAM 콘솔에서 IAM SAML 자격 증명 공급자를 만듭니다. 제공하는 메타데이터 문서는 Azure 엔터프라이즈 애플리케이션을 설정할 때 저장한 연동 메타데이터 XML 파일입니다. 자세한 단계는 *IAM User Guide*의 [Creating and Managing an IAM Identity Provider (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)를 참조하세요.

1. IAM 콘솔에서 SAML 2.0 연동을 위한 IAM 역할을 만듭니다. 자세한 단계는 *IAM User Guide*의 [Creating a Role for SAML](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)을 참조하세요.

1. IAM 콘솔에서 SAML 2.0 연동을 위해 생성한 IAM 역할에 연결할 수 있는 IAM 정책을 만듭니다. 자세한 단계는 *IAM User Guide*의 [Creating IAM Policies (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)를 참조하세요.

   환경에 맞게 다음 정책(JSON 형식)을 수정합니다.
   + `us-west-1`을 해당 클러스터의 AWS 리전으로 대체합니다.
   + *`123456789012`*를 AWS 계정으로 대체합니다.
   + *`cluster-identifier`*를 클러스터 식별자(또는 모든 클러스터의 경우 `*`)로 대체합니다.
   + *`dev`*를 데이터베이스(또는 모든 클러스터의 경우 `*`)로 대체합니다.
   + 을 해당 IAM 역할의 고유 식별자로 대체합니다..*`AROAJ2UCCR6DPCEXAMPLE`*
   + `example.com`은 해당 테넌트 또는 회사 이메일 도메인으로 대체합니다.
   + 은 사용자를 할당할 데이터베이스 그룹으로 대체합니다..*`my_dbgroup`*

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "redshift:GetClusterCredentials",
               "Resource": [
                   "arn:aws:redshift:us-west-1:123456789012:dbname:cluster-identifier/dev",
                   "arn:aws:redshift:us-west-1:123456789012:dbuser:cluster-identifier/${redshift:DbUser}",
                   "arn:aws:redshift:us-west-1:123456789012:cluster:cluster-identifier"
               ],
               "Condition": {
                   "StringEquals": {
                       "aws:userid": "AROAJ2UCCR6DPCEXAMPLE:${redshift:DbUser}@example.com"
                   }
               }
           },
           {
               "Effect": "Allow",
               "Action": "redshift:CreateClusterUser",
               "Resource": "arn:aws:redshift:us-west-1:123456789012:dbuser:cluster-identifier/${redshift:DbUser}"
           },
           {
               "Effect": "Allow",
               "Action": "redshift:JoinGroup",
               "Resource": "arn:aws:redshift:us-west-1:123456789012:dbgroup:cluster-identifier/my_dbgroup"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "redshift:DescribeClusters",
                   "iam:ListRoles"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

   이 정책은 다음과 같이 권한을 부여합니다.
   + 첫 번째 섹션에서는 지정된 클러스터에 대한 임시 자격 증명을 얻기 위해 `GetClusterCredentials` API 작업에 권한을 부여합니다. 이 예에서 리소스는 `cluster-identifier`로, 데이터베이스 *`dev`*가 있으며, 계정 *`123456789012`*와 AWS 리전 *`us-west-1`*에 있습니다. `${redshift:DbUser}` 절은 Azure AD에 지정된 `DbUser` 값과 일치하는 사용자만 연결하도록 허용합니다.
   + 조건 절은 특정 사용자만 임시 자격 증명을 받도록 적용합니다. 이는 회사 이메일 도메인의 이메일 주소로 식별되는 IAM 계정에서 역할 고유 ID *`AROAJ2UCCR6DPCEXAMPLE`*로 지정된 역할을 가진 사용자입니다. 고유 ID에 대한 자세한 내용은 *IAM User Guide*의 [Unique IDs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)를 참조하세요.

     IdP(이 경우 Azure AD) 설정에 따라 조건 절의 작성 방법이 결정됩니다. 직원의 이메일이 `johndoe@example.com`인 경우, 먼저 `${redshift:DbUser}`를 해당 직원의 사용자 이름 `johndoe`와 일치하는 수퍼 필드로 설정합니다. 그런 다음 AWS SAML `RoleSessionName` 필드를 해당 직원의 이메일 `johndoe@example.com`과 일치하는 수퍼 필드로 설정하여 이 조건을 작동시킵니다. 이 접근 방식을 이용할 때는 다음 사항을 고려하십시오.
     + `${redshift:DbUser}`를 직원의 이메일이 되도록 설정한 경우, `@example.com`과 일치하도록 JSON 예에서 `RoleSessionName`을 제거합니다.
     + `RoleSessionId`를 직원의 사용자 이름이 되도록 설정한 경우, `@example.com`과 일치하도록 예에서 `RoleSessionName`을 제거합니다.
     + JSON 예제에서 `${redshift:DbUser}` 및 `RoleSessionName` 모두 직원의 이메일로 설정됩니다. 이 JSON 예에서는 Amazon Redshift 데이터베이스 사용자 이름과 `@example.com`을 사용해 사용자를 로그인하여 클러스터에 액세스합니다.
   + 두 번째 섹션에서는 지정된 클러스터에 `dbuser` 이름을 만들 수 있는 권한을 부여합니다. 이 JSON 예에서는 생성을 `${redshift:DbUser}`로 제한합니다.
   + 세 번째 섹션에서는 사용자가 참여할 수 있는 `dbgroup`을 지정할 권한을 부여합니다. 이 JSON 예에서는 사용자가 지정된 클러스터의 `my_dbgroup` 그룹에 참여할 수 있습니다.
   + 네 번째 섹션에서는 사용자가 모든 리소스에 대해 수행할 수 있는 작업에 대한 권한을 부여합니다. 이 JSON 예에서는 사용자가 `redshift:DescribeClusters`를 호출하여 클러스터 엔드포인트, AWS 리전 및 포트와 같은 클러스터 정보를 가져올 수 있도록 합니다. 또한 사용자가 `iam:ListRoles`를 호출하여 사용자가 맡을 수 있는 역할을 확인할 수 있도록 합니다.

## 2단계: Azure에 대한 인증을 위해 JDBC 또는 ODBC 설정
<a name="setup-identity-provider-azure-auth"></a>

------
#### [ JDBC ]

**Microsoft Azure AD에 대한 인증을 위해 JDBC를 설정하려면**
+ Azure AD Single Sign-On을 사용하여 JDBC를 통해 클러스터에 연결하도록 데이터베이스 클라이언트를 구성합니다.

  JDBC 드라이버를 사용하는 클라이언트를 사용하여 Azure AD Single Sign-On으로 연결하거나 Java와 같은 언어를 사용하여 스크립트를 통해 연결할 수 있습니다. 설치 및 구성 정보는 [Amazon Redshift용 JDBC 드라이버 버전 2.x 연결 구성](jdbc20-install.md) 단원을 참조하십시오.

  예를 들어 SQLWorkbench/J를 클라이언트로 사용할 수 있습니다. SQLWorkbench/j를 구성할 때 데이터베이스의 URL은 다음 형식을 사용합니다.

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  SQLWorkbench/J를 클라이언트로 사용하는 경우 다음 단계를 수행합니다.

  1. SQL Workbench/J를 시작합니다. [**연결 프로파일 선택(Select Connection Profile)**] 페이지에서 **AzureAuth**라는 [**프로파일 그룹(Profile Group)**]을 추가합니다.

  1. **Connection Profile(연결 프로파일)**에 **Azure**를 입력합니다.

  1. **드라이버 관리(Manage Drivers)**를 선택하고, **Amazon Redshift**를 선택합니다. [**라이브러리(Library)**] 옆에 있는 [**폴더 열기(Open Folder)**] 아이콘을 선택한 다음 적절한 JDBC .jar 파일을 선택합니다.

  1. **연결 프로파일 선택(Select Connection Profile)** 페이지에서 다음과 같이 연결 프로파일에 정보를 추가합니다.
     + **사용자**에 Microsoft Azure 사용자 이름을 입력합니다. 이는 Single Sign-On에 사용 중인 Microsoft Azure 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다.
     + **암호**에 Microsoft Azure 암호를 입력합니다.
     + **드라이버(Drivers)**에서 **Amazon Redshift(com.amazon.redshift.jdbc.Driver)**를 선택합니다.
     + **URL**에 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***을 입력합니다.

  1. **Extended Properties(확장 속성)**를 선택하여 다음 설명과 같이 연결 속성에 추가 정보를 추가합니다.

     Azure AD Single Sign-On 구성의 경우 다음과 같이 추가 정보를 추가합니다.
     + **plugin\$1name**에 **com.amazon.redshift.plugin.AzureCredentialsProvider**를 입력합니다. 이 값은 드라이버에 Azure AD Single Sign-On을 인증 방법으로 사용하도록 지정합니다.
     + **idp\$1tenant**에 ***your-idp-tenant***를 입력합니다. Microsoft Azure AD에만 사용됩니다. 이는 Azure AD에 구성된 회사의 테넌트 이름입니다. 이 값은 테넌트 이름이거나 하이픈이 있는 테넌트 고유 ID일 수 있습니다.
     + **client\$1secret**에 ***your-azure-redshift-application-client-secret***를 입력합니다. Microsoft Azure AD에만 사용됩니다. 이는 Azure Single Sign-On 구성을 설정할 때 생성한 Amazon Redshift 애플리케이션의 클라이언트 암호입니다. 이는 com.amazon.redshift.plugin.AzureCredentialsProvider 플러그인에만 적용됩니다.
     + **client\$1id**에 ***your-azure-redshift-application-client-id***를 입력합니다. Microsoft Azure AD에만 사용됩니다. 이는 Azure Single Sign-On 구성을 설정할 때 생성한 Amazon Redshift 애플리케이션의 클라이언트 ID(하이픈 포함)입니다.

     MFA를 사용하는 Azure AD Single Sign-On 구성의 경우 다음과 같이 연결 속성에 추가 정보를 추가합니다.
     + **plugin\$1name**에 **com.amazon.redshift.plugin.BrowserAzureCredentialsProvider**를 입력합니다. 이는 드라이버에 MFA를 사용하는 Azure AD Single Sign-On을 인증 방법으로 사용하도록 지정합니다.
     + **idp\$1tenant**에 ***your-idp-tenant***를 입력합니다. Microsoft Azure AD에만 사용됩니다. 이는 Azure AD에 구성된 회사의 테넌트 이름입니다. 이 값은 테넌트 이름이거나 하이픈이 있는 테넌트 고유 ID일 수 있습니다.
     + **client\$1id**에 ***your-azure-redshift-application-client-id***를 입력합니다. 이 옵션은 Microsoft Azure AD에만 사용됩니다. 이는 MFA를 사용하는 Azure AD Single Sign-On 구성을 설정할 때 생성한 Amazon Redshift 애플리케이션의 클라이언트 ID(하이픈 포함)입니다.
     + **listen\$1port**에 ***your-listen-port***를 입력합니다. 로컬 서버가 수신 대기하는 포트입니다. 기본값은 7890입니다.
     + **idp\$1response\$1timeout**에 ***the-number-of-seconds***를 입력합니다. 이는 IdP 서버가 응답을 다시 보낼 때 제한 시간이 지나기 전까지 대기하는 시간(초)입니다. 최소 시간(초)은 10이어야 합니다. 연결 구성이 이 제한 시간보다 어래 걸리면 연결이 중단됩니다.

------
#### [ ODBC ]

**Microsoft Azure AD에 대한 인증을 위해 ODBC를 설정하려면**
+ Azure AD Single Sign-On을 사용하여 ODBC를 통해 클러스터에 연결하도록 데이터베이스 클라이언트를 구성합니다.

  Amazon Redshift는 Linux, Windows 및 macOS 운영 체제용 ODBC 드라이버를 제공합니다. ODBC 드라이버를 설치하려면 먼저 SQL 클라이언트 도구가 32비트인지, 64비트인지 확인합니다. SQL 클라이언트 도구의 요구 사항에 맞는 ODBC 드라이버를 설치합니다.

  Windows의 경우 **Amazon Redshift ODBC 드라이버 DSN 설정(Amazon Redshift ODBC Driver DSN Setup)** 페이지의 **연결 설정(Connection Settings)** 아래에 다음 정보를 입력합니다.
  + **데이터 원본 이름(Data Source Name)**에 ***your-DSN***을 입력합니다. 이는 ODBC 프로파일 이름으로 사용되는 데이터 원본 이름을 지정합니다.
  + Azure AD Single Sign-On 구성을 위한 **Auth type**(인증 유형)에서 **Identity Provider: Azure AD**를 선택합니다. 이는 ODBC 드라이버가 Azure Single Sign-On을 사용하여 인증할 때 사용하는 인증 방법입니다.
  + MFA를 사용하는 Azure AD Single Sign-On 구성을 위한 **Auth type**(인증 유형)에서 **Identity Provider: Browser Azure AD**를 선택합니다. 이는 ODBC 드라이버가 MFA를 사용하는 Azure Single Sign-On을 사용하여 인증할 때 사용하는 인증 방법입니다.
  + **클러스터 ID(Cluster ID)**에 ***your-cluster-identifier***를 입력합니다.
  + **리전(Region)**에 ***your-cluster-region***을 입력합니다.
  + **데이터베이스(Database)**에 ***your-database-name***을 입력합니다.
  + **사용자(User)**에 ***your-azure-username***을 입력합니다. 이는 Single Sign-On에 사용 중인 Microsoft Azure 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다. **인증 유형(Auth Type)**이 **자격 증명 공급자: Azure AD(Identity Provider: Azure AD)**인 경우에만 이를 사용합니다.
  + **암호(Password)**에 ***your-azure-password***를 입력합니다. **Auth Type**(인증 유형)이 **Identity Provider: Azure AD**(자격 증명 공급자: Azure AD)인 경우에만 이를 사용합니다.
  + **IdP 테넌트**에 ***your-idp-tenant***를 입력합니다. 이는 IdP(Azure)에 구성된 회사의 테넌트 이름입니다. 이 값은 테넌트 이름이거나 하이픈이 있는 테넌트 고유 ID일 수 있습니다.
  + **Azure 클라이언트 암호**에 ***your-azure-redshift-application-client-secret***를 입력합니다. 이는 Azure Single Sign-On 구성을 설정할 때 생성한 Amazon Redshift 애플리케이션의 클라이언트 암호입니다.
  + **Azure 클라이언트 ID**에 ***your-azure-redshift-application-client-id***를 입력합니다. 이는 Azure Single Sign-On 구성을 설정할 때 생성한 Amazon Redshift 애플리케이션의 클라이언트 ID(하이픈 포함)입니다.
  + **수신 대기 포트(Listen Port)**에 ***your-listen-port***를 입력합니다. 로컬 서버가 수신하는 기본 수신 대기 포트입니다. 기본값은 7890입니다. 이는 브라우저 Azure AD 플러그인에만 적용됩니다.
  + **응답 제한 시간(Response Timeout)**에 ***the-number-of-seconds***를 입력합니다. 이는 IdP 서버가 응답을 다시 보낼 때 제한 시간이 지나기 전까지 대기하는 시간(초)입니다. 최소 시간(초)은 10이어야 합니다. 연결 구성이 이 제한 시간보다 어래 걸리면 연결이 중단됩니다. 이 옵션은 브라우저 Azure AD 플러그인에만 적용됩니다.

  macOS 및 Linux에서는 다음과 같이 `odbc.ini` 파일을 편집합니다.
**참고**  
모든 항목은 대/소문자를 구분하지 않습니다.
  + **clusterid**에 ***your-cluster-identifier***를 입력합니다. 이는 생성된 Amazon Redshift 클러스터의 이름입니다.
  + **리전(region)**에 ***your-cluster-region***을 입력합니다. 이는 생성된 Amazon Redshift 클러스터의 AWS 리전입니다.
  + **데이터베이스(database)**에 ***your-database-name***을 입력합니다. 이는 Amazon Redshift 클러스터에서 액세스하려는 데이터베이스의 이름입니다.
  + **로캘(locale)**에 **en-us**를 입력합니다. 이는 오류 메시지가 표시되는 언어입니다.
  + **iam**에 **1**을 입력합니다. 이 값은 드라이버에 IAM 자격 증명을 사용하여 인증하도록 지정합니다.
  + Azure AD Single Sign-On 구성을 위한 **plugin\$1name**에 **AzureAD**를 입력합니다. 이는 드라이버에 Azure Single Sign-On을 인증 방법으로 사용하도록 지정합니다.
  + MFA를 사용하는 Azure AD Single Sign-On 구성을 위한 **plugin\$1name**에 **BrowserAzureAD**를 입력합니다. 이는 드라이버에 MFA를 사용하는 Azure Single Sign-On을 인증 방법으로 사용하도록 지정합니다.
  + **uid**에 ***your-azure-username***을 입력합니다. 이는 Single Sign-On에 사용 중인 Microsoft Azure 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다. **plugin\$1name**이 **AzureAD**인 경우에만 이를 사용합니다.
  + **pwd**에 ***your-azure-password***를 입력합니다. **plugin\$1name**이 **AzureAD**인 경우에만 이를 사용합니다.
  + **idp\$1tenant**에 ***your-idp-tenant***를 입력합니다. 이는 IdP(Azure)에 구성된 회사의 테넌트 이름입니다. 이 값은 테넌트 이름이거나 하이픈이 있는 테넌트 고유 ID일 수 있습니다.
  + **client\$1secret**에 ***your-azure-redshift-application-client-secret***를 입력합니다. 이는 Azure Single Sign-On 구성을 설정할 때 생성한 Amazon Redshift 애플리케이션의 클라이언트 암호입니다.
  + **client\$1id**에 ***your-azure-redshift-application-client-id***를 입력합니다. 이는 Azure Single Sign-On 구성을 설정할 때 생성한 Amazon Redshift 애플리케이션의 클라이언트 ID(하이픈 포함)입니다.
  + **listen\$1port**에 ***your-listen-port***를 입력합니다. 로컬 서버가 수신 대기하는 포트입니다. 기본값은 7890입니다. 이는 브라우저 Azure AD 플러그인에 적용됩니다.
  + **idp\$1response\$1timeout**에 ***the-number-of-seconds***를 입력합니다. 이는 Azure로부터 응답을 기다리는 지정된 시간(초)입니다. 이 옵션은 브라우저 Azure AD 플러그인에 적용됩니다.

  macOS 및 Linux에서는 프로파일 설정을 편집하여 다음 내보내기도 추가합니다.

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

## 문제 해결
<a name="setup-identity-provider-azure-auth"></a>

브라우저 Azure AD 플러그인 문제를 해결하려면 다음을 고려합니다.
+ 브라우저 Azure AD 플러그인을 사용하려면 요청에 지정된 회신 URL을 애플리케이션에 대해 구성된 회신 URL과 일치하도록 설정해야 합니다. Microsoft Azure 포털에서 **SAML을 사용하여 SSO(Single Sign-On) 설정** 페이지로 이동합니다. 그런 다음 **회신 URL**이 http://localhost/redshift/로 설정되어 있는지 확인합니다.
+ IdP 테넌트 오류가 발생하면 **IdP 테넌트** 이름이 Microsoft Azure에서 Active Directory를 설정하는 데 처음 사용한 도메인 이름과 일치하는지 확인합니다.

  Windows에서 [**Amazon Redshift ODBC DSN 설정(Amazon Redshift ODBC DSN Setup)**] 페이지의 [**연결 설정(Connection Settings)**] 섹션으로 이동합니다. 그런 다음 IdP(Azure)에 구성된 회사의 테넌트 이름이 Microsoft Azure에서 Active Directory를 설정하는 데 처음 사용한 도메인 이름과 일치하는지 확인합니다.

  macOS 및 Linux에서 *odbc.ini* 파일을 찾습니다. 그런 다음 IdP(Azure)에 구성된 회사의 테넌트 이름이 Microsoft Azure에서 Active Directory를 설정하는 데 처음 사용한 도메인 이름과 일치하는지 확인합니다.
+ 요청에 지정된 회신 URL이 애플리케이션에 대해 구성된 회신 URL과 일치하지 않는 오류가 발생하는 경우 **리디렉션 URI**가 회신 URL과 동일한지 확인합니다.

  Microsoft Azure 포털에서 애플리케이션의 **앱 등록** 페이지로 이동합니다. 그런 다음 리디렉션 URI가 응답 URL과 일치하는지 확인합니다.
+ 예기치 않은 응답: 무단 오류가 발생하는 경우 **모바일 및 데스크톱 애플리케이션** 구성을 완료했는지 확인합니다.

  Microsoft Azure 포털에서 애플리케이션의 **앱 등록** 페이지로 이동합니다. 그런 다음 **인증**으로 이동하여 http://localhost/redshift/를 리디렉션 URI로 사용하도록 **모바일 및 데스크톱 애플리케이션**을 구성했는지 확인합니다.

# Ping Identity
<a name="setup-identity-provider-ping"></a>

Ping Identity를 IdP(자격 증명 공급자)로 사용하여 Amazon Redshift 클러스터에 액세스할 수 있습니다. 이 자습서에서는 Ping Identity를 ID 제공업체(idP)로 사용하여 Amazon Redshift 클러스터에 액세스하는 방법을 보여 줍니다.

## 1단계: Ping Identity와 AWS 계정을 서로 신뢰하도록 설정
<a name="setup-identity-provider-ping-trust"></a>

다음 절차에서는 PingOne 포털을 사용하여 신뢰 관계를 설정하는 방법을 설명합니다.

**Ping Identity와 AWS 계정을 서로 신뢰하도록 설정하려면**

1. Ping Identity 사용자가 연결할 기존 Amazon Redshift 클러스터를 사용하거나 생성합니다. 연결을 구성하려면 이 클러스터의 특정 속성(예: 클러스터 식별자)이 필요합니다. 자세한 내용은 [클러스터 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html) 섹션을 참조하세요.

1. Amazon Redshift를 PingOne 포털의 새 SAML 애플리케이션으로 추가합니다. 자세한 단계는 [Ping Identity 설명서](https://docs.pingidentity.com/)를 참조하십시오.

   1. **내 애플리케이션**으로 이동합니다.

   1. **애플리케이션 추가**에서 **New SAML Application(새 SAML 애플리케이션)**을 선택합니다.

   1. **애플리케이션 이름**에 **Amazon Redshift**를 입력합니다.

   1. **Protocol Version(프로토콜 버전)**에서 **SAML v2.0**을 선택합니다.

   1. **Category(범주)**에서 ***your-application-category***를 선택합니다.

   1. **Assertion Consumer Service (ACS)**에 ***your-redshift-local-host-url***을 입력합니다. 이는 SAML 어설션이 리디렉션하는 로컬 호스트 및 포트입니다.

   1. **Entity ID(개체 ID)**에 `urn:amazon:webservices`를 입력합니다.

   1. **서명(Signing)**에서 **어설션 서명(Sign Assertion)**을 선택합니다.

   1. **SSO Attribute Mapping(SSO 속성 매핑)** 섹션에서 다음 표와 같이 클레임을 만듭니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/setup-identity-provider-ping.html)

1. **Group Access(그룹 액세스)**에서 필요한 경우 다음 그룹 액세스를 설정합니다.
   + **https://aws.amazon.com/SAML/Attributes/Role**
   + **https://aws.amazon.com/SAML/Attributes/RoleSessionName**
   + **https://redshift.amazon.com/SAML/Attributes/AutoCreate**
   + **https://redshift.amazon.com/SAML/Attributes/DbUser**

1. 필요한 경우 설정을 검토하고 변경합니다.

1. **Initiate Single Sign-On (SSO) URL(시작 Single Sign-On(SSO) URL)**을 브라우저 SAML 플러그인의 로그인 URL로 사용합니다.

1. IAM 콘솔에서 IAM SAML 자격 증명 공급자를 만듭니다. 제공하는 메타데이터 문서는 Ping Identity를 설정할 때 저장한 연동 메타데이터 XML 파일입니다. 자세한 단계는 *IAM User Guide*의 [Creating and Managing an IAM Identity Provider (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)를 참조하세요.

1. IAM 콘솔에서 SAML 2.0 연동을 위한 IAM 역할을 만듭니다. 자세한 단계는 *IAM User Guide*의 [Creating a Role for SAML](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)을 참조하세요.

1. IAM 콘솔에서 SAML 2.0 연동을 위해 생성한 IAM 역할에 연결할 수 있는 IAM 정책을 만듭니다. 자세한 단계는 *IAM User Guide*의 [Creating IAM Policies (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)를 참조하세요. Azure AD 예제는 [JDBC 또는 ODBC Single Sign-On 인증 설정](setup-azure-ad-identity-provider.md) 단원을 참조하십시오.

## 2단계: Ping Identity에 대한 인증을 위해 JDBC 또는 ODBC 설정
<a name="setup-identity-provider-ping-auth"></a>

------
#### [ JDBC ]

**Ping Identity에 대한 인증을 위해 JDBC를 설정하려면**
+ Ping Identity Single Sign-On을 사용하여 JDBC를 통해 클러스터에 연결하도록 데이터베이스 클라이언트를 구성합니다.

  JDBC 드라이버를 사용하는 클라이언트를 사용하여 Ping Identity Single Sign-On으로 연결하거나 Java와 같은 언어를 사용하여 스크립트를 통해 연결할 수 있습니다. 설치 및 구성 정보는 [Amazon Redshift용 JDBC 드라이버 버전 2.x 연결 구성](jdbc20-install.md) 단원을 참조하십시오.

  예를 들어 SQLWorkbench/J를 클라이언트로 사용할 수 있습니다. SQLWorkbench/j를 구성할 때 데이터베이스의 URL은 다음 형식을 사용합니다.

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  SQLWorkbench/J를 클라이언트로 사용하는 경우 다음 단계를 수행합니다.

  1. SQL Workbench/J를 시작합니다. [**연결 프로파일 선택(Select Connection Profile)**] 페이지에서 [**프로파일 그룹(Profile Group)**]을 추가합니다(예: **Ping**).

  1. **연결 프로파일(Connection Profile)**에 ***your-connection-profile-name***을 입력합니다(예: **Ping**).

  1. **Manage Drivers**(드라이버 관리)를 선택하고, **Amazon Redshift**를 선택합니다. [**라이브러리(Library)**] 옆에 있는 [**폴더 열기(Open Folder)**] 아이콘을 선택한 다음 적절한 JDBC .jar 파일을 선택합니다.

  1. **Select Connection Profile**(연결 프로파일 선택) 페이지에서 다음과 같이 연결 프로파일에 정보를 추가합니다.
     + **User(사용자)**에 PingOne 사용자 이름을 입력합니다. 이는 Single Sign-On에 사용 중인 PingOne 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다.
     + **Password(암호)**에 PingOne 암호를 입력합니다.
     + **드라이버(Drivers)**에서 **Amazon Redshift(com.amazon.redshift.jdbc.Driver)**를 선택합니다.
     + **URL**에 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***을 입력합니다.

  1. **확장 속성(Extended Properties)**를 선택하고 다음 중 하나를 수행합니다.
     + **login\$1url**에 ***your-ping-sso-login-url***을 입력합니다. 이 값은 URL에 Single Sign-On을 로그인하기 위한 인증으로 사용하도록 지정합니다.
     + Ping Identity의 경우 **plugin\$1name**에 **com.amazon.redshift.plugin.PingCredentialsProvider**를 입력합니다. 이 값은 드라이버에 Ping Identity Single Sign-On을 인증 방법으로 사용하도록 지정합니다.
     + Single Sign-On을 사용한 Ping Identity의 경우 **plugin\$1name**에 **com.amazon.redshift.plugin.BrowserSamlCredentialsProvider**를 입력합니다. 이 값은 드라이버에 Ping Identity PingOne과 함께 Single Sign-On을 인증 방법으로 사용하도록 지정합니다.

------
#### [ ODBC ]

**Ping Identity에 대한 인증을 위해 ODBC를 설정하려면**
+ Ping Identity PingOne Single Sign-On을 사용하여 ODBC를 통해 클러스터에 연결하도록 데이터베이스 클라이언트를 구성합니다.

  Amazon Redshift는 Linux, Windows 및 macOS 운영 체제용 ODBC 드라이버를 제공합니다. ODBC 드라이버를 설치하려면 먼저 SQL 클라이언트 도구가 32비트인지, 64비트인지 확인합니다. SQL 클라이언트 도구의 요구 사항에 맞는 ODBC 드라이버를 설치합니다.

  Windows의 경우 **Amazon Redshift ODBC 드라이버 DSN 설정(Amazon Redshift ODBC Driver DSN Setup)** 페이지의 **연결 설정(Connection Settings)** 아래에 다음 정보를 입력합니다.
  + **데이터 원본 이름(Data Source Name)**에 ***your-DSN***을 입력합니다. 이는 ODBC 프로파일 이름으로 사용되는 데이터 원본 이름을 지정합니다.
  + **인증 유형(Auth type)**에서 다음 중 하나를 수행합니다.
    + Ping Identity 구성의 경우 **자격 증명 공급자: Ping Federate**를 선택합니다. 이는 ODBC 드라이버가 Ping Identity Single Sign-On을 사용하여 인증할 때 사용하는 인증 방법입니다.
    + Single Sign-On 구성을 사용하는 Ping Identity의 경우 **자격 증명 공급자: 브라우저 SAML**을 선택합니다. 이는 ODBC 드라이버가 Single Sign-On이 포함된 Ping Identity를 사용하여 인증할 때의 인증 방법입니다.
  + **클러스터 ID(Cluster ID)**에 ***your-cluster-identifier***를 입력합니다.
  + **리전(Region)**에 ***your-cluster-region***을 입력합니다.
  + **데이터베이스(Database)**에 ***your-database-name***을 입력합니다.
  + **사용자(User)**에 ***your-ping-username***을 입력합니다. 이는 Single Sign-On에 사용 중인 PingOne 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다. **인증 유형(Auth type)**이 **자격 증명 공급자: PingFederate(Identity Provider: PingFederate)**인 경우에만 이를 사용합니다.
  + **암호(Password)**에 ***your-ping-password***를 입력합니다. **인증 유형(Auth type)**이 **자격 증명 공급자: PingFederate(Identity Provider: PingFederate)**인 경우에만 이를 사용합니다.
  + **수신 대기 포트(Listen Port)**에 ***your-listen-port***를 입력합니다. 로컬 서버가 수신 대기하는 포트입니다. 기본값은 7890입니다. 이는 브라우저 SAML 플러그인에만 적용됩니다.
  +  **응답 제한 시간(Response Timeout)**에 ***the-number-of-seconds***를 입력합니다. 이는 IdP 서버가 응답을 다시 보낼 때 제한 시간이 지나기 전까지 대기하는 시간(초)입니다. 최소 시간(초)은 10이어야 합니다. 연결 구성이 이 제한 시간보다 어래 걸리면 연결이 중단됩니다. 이는 브라우저 SAML 플러그인에만 적용됩니다.
  + **로그인 URL**에 ***your-login-url***을 입력합니다. 이는 브라우저 SAML 플러그인에만 적용됩니다.

  macOS 및 Linux에서는 다음과 같이 `odbc.ini` 파일을 편집합니다.
**참고**  
모든 항목은 대/소문자를 구분하지 않습니다.
  + **clusterid**에 ***your-cluster-identifier***를 입력합니다. 이는 생성된 Amazon Redshift 클러스터의 이름입니다.
  + **리전(region)**에 ***your-cluster-region***을 입력합니다. 이는 생성된 Amazon Redshift 클러스터의 AWS 리전입니다.
  + **데이터베이스(database)**에 ***your-database-name***을 입력합니다. 이는 Amazon Redshift 클러스터에서 액세스하려는 데이터베이스의 이름입니다.
  + **로캘(locale)**에 **en-us**를 입력합니다. 이는 오류 메시지가 표시되는 언어입니다.
  + **iam**에 **1**을 입력합니다. 이 값은 드라이버에 IAM 자격 증명을 사용하여 인증하도록 지정합니다.
  + **plugin\$1name**의 경우 다음 중 하나를 수행합니다.
    + Ping Identity 구성의 경우 **BrowserSAML**을 입력합니다. 이는 ODBC 드라이버가 Ping Identity에 인증할 때 사용하는 인증 방법입니다.
    + Single Sign-On을 사용하는 Ping Identity 구성에 **Ping**을 입력합니다. 이는 ODBC 드라이버가 Single Sign-On이 포함된 Ping Identity를 사용하여 인증할 때의 인증 방법입니다.
  + **uid**에 ***your-ping-username***을 입력합니다. 이는 Single Sign-On에 사용 중인 Microsoft Azure 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다. **plugin\$1name**이 **Ping**인 경우에만 이를 사용합니다.
  + **pwd**에 ***your-ping-password***를 입력합니다. **plugin\$1name**이 **Ping**인 경우에만 이를 사용합니다.
  + **login\$1url**에 ***your-login-url***을 입력합니다. 이는 SAML 응답을 반환하는 시작 Single Sign-On URL입니다. 이는 브라우저 SAML 플러그인에만 적용됩니다.
  + **idp\$1response\$1timeout**에 ***the-number-of-seconds***를 입력합니다. 이는 PingOne Identity로부터 응답을 기다리는 지정된 시간(초)입니다. 이는 브라우저 SAML 플러그인에만 적용됩니다.
  + **listen\$1port**에 ***your-listen-port***를 입력합니다. 로컬 서버가 수신 대기하는 포트입니다. 기본값은 7890입니다. 이는 브라우저 SAML 플러그인에만 적용됩니다.

  macOS 및 Linux에서는 프로파일 설정을 편집하여 다음 내보내기도 추가합니다.

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

# Okta
<a name="setup-identity-provider-okta"></a>

Okta를 IdP(자격 증명 공급자)로 사용하여 Amazon Redshift 클러스터에 액세스할 수 있습니다. 이 자습서에서는 Okta를 ID 제공업체(idP)로 사용하여 Amazon Redshift 클러스터에 액세스하는 방법을 보여 줍니다.

## 1단계: Okta와 AWS 계정을 서로 신뢰하도록 설정
<a name="setup-identity-provider-okta-trust"></a>

다음 절차에서는 신뢰 관계를 설정하는 방법을 설명합니다.

**Okta와 AWS 계정을 서로 신뢰하도록 설정하려면**

1. Okta 사용자가 연결할 기존 Amazon Redshift 클러스터를 사용하거나 생성합니다. 연결을 구성하려면 이 클러스터의 특정 속성(예: 클러스터 식별자)이 필요합니다. 자세한 내용은 [클러스터 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/create-cluster.html) 섹션을 참조하세요.

1. Amazon Redshift를 Okta 포털의 새 애플리케이션으로 추가합니다. 자세한 단계는 [Okta documentation](https://developer.okta.com/docs/)을 참조하십시오.
   + **애플리케이션 추가**를 선택합니다.
   + **애플리케이션 추가**에서 **Create New App(새 앱 생성)**을 선택합니다.
   + **Create a New Add Application Integration(새 애플리케이션 통합 추가 생성)** 페이지의 **플랫폼**에서 **웹**을 선택합니다.
   + **Sign on method(로그인 방법)**에서 **SAML v2.0**을 선택합니다.
   + **일반 설정** 페이지에서 **앱 이름**에 ***your-redshift-saml-sso-name***을 입력합니다. 이는 애플리케이션 이름입니다.
   + **SAML 설정** 페이지에서 **SSO(Single Sign-On) URL**에 ***your-redshift-local-host-url***을 입력합니다. 이는 SAML 어설션이 리디렉션하는 로컬 호스트 및 포트입니다(예: `http://localhost:7890/redshift/`).

1. [**통합 인증 URL(Single sign on URL)**] 값을 [**수신자 URL(Recipient URL)**] 및 [**대상 URL(Destination URL)**]로 사용합니다.

1. **Signing**(서명)에서 **Sign Assertion**(어설션 서명)을 선택합니다.

1. [**대상 URI(SP 엔터티 ID)(Audience URI (SP Entity ID))**]에 다음 표와 같이 클레임의 **urn:amazon:webservices**를 입력합니다. 

1. **고급 설정** 섹션에서 **SAML 발급자 ID**에 ***your-Identity-Provider-Issuer-ID***를 입력합니다. 이는 **설정 지침 보기** 섹션에서 찾을 수 있습니다.

1. **Attribute Statements(속성 설명)** 섹션에서 다음 표와 같이 클레임을 만듭니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/setup-identity-provider-okta.html)

1. **App Embed Link(앱 포함 링크)** 섹션에서 브라우저 SAML 플러그인의 로그인 URL로 사용할 수 있는 URL을 찾습니다.

1. IAM 콘솔에서 IAM SAML 자격 증명 공급자를 만듭니다. 제공하는 메타데이터 문서는 Okta를 설정할 때 저장한 연동 메타데이터 XML 파일입니다. 자세한 단계는 *IAM User Guide*의 [Creating and Managing an IAM Identity Provider (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml.html#idp-manage-identityprovider-console)를 참조하세요.

1. IAM 콘솔에서 SAML 2.0 연동을 위한 IAM 역할을 만듭니다. 자세한 단계는 *IAM User Guide*의 [Creating a Role for SAML](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp_saml.html#idp_saml_Create)을 참조하세요.

1. IAM 콘솔에서 SAML 2.0 연동을 위해 생성한 IAM 역할에 연결할 수 있는 IAM 정책을 만듭니다. 자세한 단계는 *IAM User Guide*의 [Creating IAM Policies (Console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-start)를 참조하세요. Azure AD 예제는 [JDBC 또는 ODBC Single Sign-On 인증 설정](setup-azure-ad-identity-provider.md) 단원을 참조하십시오.

## 2단계: Okta에 대한 인증을 위해 JDBC 또는 ODBC 설정
<a name="setup-identity-provider-okta-auth"></a>

------
#### [ JDBC ]

**Okta에 대한 인증을 위해 JDBC를 설정하려면**
+ Okta Single Sign-On을 사용하여 JDBC를 통해 클러스터에 연결하도록 데이터베이스 클라이언트를 구성합니다.

  JDBC 드라이버를 사용하는 클라이언트를 사용하여 Okta Single Sign-On으로 연결하거나 Java와 같은 언어를 사용하여 스크립트를 통해 연결할 수 있습니다. 설치 및 구성 정보는 [Amazon Redshift용 JDBC 드라이버 버전 2.x 연결 구성](jdbc20-install.md) 단원을 참조하십시오.

  예를 들어 SQLWorkbench/J를 클라이언트로 사용할 수 있습니다. SQLWorkbench/j를 구성할 때 데이터베이스의 URL은 다음 형식을 사용합니다.

  ```
  jdbc:redshift:iam://cluster-identifier:us-west-1/dev
  ```

  SQLWorkbench/J를 클라이언트로 사용하는 경우 다음 단계를 수행합니다.

  1. SQL Workbench/J를 시작합니다. [**연결 프로파일 선택(Select Connection Profile)**] 페이지에서 [**프로파일 그룹(Profile Group)**]을 추가합니다(예: **Okta**).

  1. **연결 프로파일(Connection Profile)**에 ***your-connection-profile-name***을 입력합니다(예: **Okta**).

  1. **Manage Drivers**(드라이버 관리)를 선택하고, **Amazon Redshift**를 선택합니다. [**라이브러리(Library)**] 옆에 있는 [**폴더 열기(Open Folder)**] 아이콘을 선택한 다음 적절한 JDBC .jar 파일을 선택합니다.

  1. **연결 프로파일 선택(Select Connection Profile)** 페이지에서 다음과 같이 연결 프로파일에 정보를 추가합니다.
     + **사용자**에 Okta 사용자 이름을 입력합니다. 이는 Single Sign-On에 사용 중인 Okta 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다.
     + **암호**에 Okta 암호를 입력합니다.
     + **드라이버(Drivers)**에서 **Amazon Redshift(com.amazon.redshift.jdbc.Driver)**를 선택합니다.
     + **URL**에 **jdbc:redshift:iam://*your-cluster-identifier*:*your-cluster-region*/*your-database-name***을 입력합니다.

  1. **확장 속성(Extended Properties)**를 선택하고 다음 중 하나를 수행합니다.
     + **login\$1url**에 ***your-okta-sso-login-url***을 입력합니다. 이 값은 URL에 Single Sign-On을 Okta에 로그인하기 위한 인증으로 사용하도록 지정합니다.
     + Okta Single Sign-On에서 **plugin\$1name**에 **com.amazon.redshift.plugin.OktaCredentialsProvider**를 입력합니다. 이 값은 드라이버에 Okta Single Sign-On을 인증 방법으로 사용하도록 지정합니다.
     + MFA를 사용하는 Okta Single Sign-On에서 **plugin\$1name**에 **com.amazon.redshift.plugin.BrowserSamlCredentialsProvider**를 입력합니다. 이는 드라이버에 MFA를 사용하는 Okta Single Sign-On을 인증 방법으로 사용하도록 지정합니다.

------
#### [ ODBC ]

**Okta에 대한 인증을 위해 ODBC를 설정하려면**
+ Okta Single Sign-On을 사용하여 ODBC를 통해 클러스터에 연결하도록 데이터베이스 클라이언트를 구성합니다.

  Amazon Redshift는 Linux, Windows 및 macOS 운영 체제용 ODBC 드라이버를 제공합니다. ODBC 드라이버를 설치하려면 먼저 SQL 클라이언트 도구가 32비트인지, 64비트인지 확인합니다. SQL 클라이언트 도구의 요구 사항에 맞는 ODBC 드라이버를 설치합니다.

  Windows의 경우 **Amazon Redshift ODBC 드라이버 DSN 설정(Amazon Redshift ODBC Driver DSN Setup)** 페이지의 **연결 설정(Connection Settings)** 아래에 다음 정보를 입력합니다.
  + **데이터 원본 이름(Data Source Name)**에 ***your-DSN***을 입력합니다. 이는 ODBC 프로파일 이름으로 사용되는 데이터 원본 이름을 지정합니다.
  + **인증 유형(Auth type)**에서 다음 중 하나를 수행합니다.
    + Okta Single Sign-On 구성에서 **Identity Provider: Okta**를 선택합니다. 이는 ODBC 드라이버가 Okta Single Sign-On을 사용하여 인증할 때 사용하는 인증 방법입니다.
    + MFA를 사용하는 Okta Single Sign-On 구성에서 **Identity Provider: Browser SAML**을 선택합니다. 이는 ODBC 드라이버가 MFA를 사용하는 Okta Single Sign-On을 사용하여 인증할 때 사용하는 인증 방법입니다.
  + **클러스터 ID(Cluster ID)**에 ***your-cluster-identifier***를 입력합니다.
  + **리전(Region)**에 ***your-cluster-region***을 입력합니다.
  + **데이터베이스(Database)**에 ***your-database-name***을 입력합니다.
  + **사용자(User)**에 ***your-okta-username***을 입력합니다. 이는 Single Sign-On에 사용 중인 Okta 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다. **Auth type**(인증 유형)이 **Identity Provider: Okta**(자격 증명 공급자: Okta)인 경우에만 이를 사용합니다.
  + **암호(Password)**에 ***your-okta-password***를 입력합니다. **인증 유형(Auth type)**이 **자격 증명 공급자: Okta(Identity Provider: Okta)**인 경우에만 이를 사용합니다.

  macOS 및 Linux에서는 다음과 같이 `odbc.ini` 파일을 편집합니다.
**참고**  
모든 항목은 대/소문자를 구분하지 않습니다.
  + **clusterid**에 ***your-cluster-identifier***를 입력합니다. 이는 생성된 Amazon Redshift 클러스터의 이름입니다.
  + **리전(region)**에 ***your-cluster-region***을 입력합니다. 이는 생성된 Amazon Redshift 클러스터의 AWS 리전입니다.
  + **데이터베이스(database)**에 ***your-database-name***을 입력합니다. 이는 Amazon Redshift 클러스터에서 액세스하려는 데이터베이스의 이름입니다.
  + **로캘(locale)**에 **en-us**를 입력합니다. 이는 오류 메시지가 표시되는 언어입니다.
  + **iam**에 **1**을 입력합니다. 이 값은 드라이버에 IAM 자격 증명을 사용하여 인증하도록 지정합니다.
  + **plugin\$1name**의 경우 다음 중 하나를 수행합니다.
    + MFA를 사용하는 Okta Single Sign-On 구성에 **BrowserSAML**을 입력합니다. 이는 ODBC 드라이버가 MFA가 포함된 Okta Single Sign-On을 사용하여 인증할 때의 인증 방법입니다.
    + Okta Single Sign-On 구성에 **Okta**를 입력합니다. 이는 ODBC 드라이버가 Okta Single Sign-On을 사용하여 인증할 때 사용하는 인증 방법입니다.
  + **uid**에 ***your-okta-username***을 입력합니다. 이는 Single Sign-On에 사용 중인 Okta 계정의 사용자 이름으로, 인증하려는 클러스터에 대한 권한이 있습니다. **plugin\$1name**이 **Okta**인 경우에만 이를 사용합니다.
  + **pwd**에 ***your-okta-password***를 입력합니다. **plugin\$1name**이 **Okta**인 경우에만 이를 사용합니다.
  + **login\$1url**에 ***your-login-url***을 입력합니다. 이는 SAML 응답을 반환하는 시작 Single Sign-On URL입니다. 이는 브라우저 SAML 플러그인에만 적용됩니다.
  + **idp\$1response\$1timeout**에 ***the-number-of-seconds***를 입력합니다. 이는 PingOne으로부터 응답을 기다리는 지정된 시간(초)입니다. 이는 브라우저 SAML 플러그인에만 적용됩니다.
  + **listen\$1port**에 ***your-listen-port***를 입력합니다. 로컬 서버가 수신 대기하는 포트입니다. 기본값은 7890입니다. 이는 브라우저 SAML 플러그인에만 적용됩니다.

  macOS 및 Linux에서는 프로파일 설정을 편집하여 다음 내보내기도 추가합니다.

  ```
  export ODBCINI=/opt/amazon/redshift/Setup/odbc.ini
  ```

  ```
  export ODBCINSTINI=/opt/amazon/redshift/Setup/odbcinst.ini
  ```

------

# Amazon Redshift가 사용자를 대신하여 AWS 서비스에 액세스할 수 있도록 권한 부여
<a name="authorizing-redshift-service"></a>

일부 Amazon Redshift 기능을 사용하려면 Amazon Redshift가 사용자 대신 다른 AWS 서비스에 액세스해야 합니다. 예를 들어 [COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html) 및 [UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html) 명령은 Amazon S3 버킷을 사용하여 Amazon Redshift 클러스터로 데이터를 로드하거나 언로드할 수 있습니다. [CREATE EXTERNAL FUNCTION](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html) 명령은 스칼라 Lambda 사용자 정의 함수(UDF)를 사용하여 AWS Lambda 함수를 호출할 수 있습니다. Amazon Redshift Spectrum은 Amazon Athena 또는 AWS Glue의 데이터 카탈로그를 사용할 수 있습니다. Amazon Redshift 클러스터가 사용자를 대신하여 작동하도록 하려면 클러스터에 보안 자격 증명을 제공해야 합니다. 보안 자격 증명을 제공하는 데 선호되는 방법은 AWS Identity and Access Management(IAM) 역할을 지정하는 것입니다. COPY 및 UNLOAD의 경우 임시 자격 증명을 제공할 수 있습니다.

사용자가 AWS Management Console 외부에서 AWS와 상호 작용하려면 프로그래밍 방식의 액세스 권한이 필요합니다. 프로그래밍 방식의 액세스 권한을 부여하는 방법은 AWS에 액세스하는 사용자 유형에 따라 다릅니다.

사용자에게 프로그래밍 방식의 액세스 권한을 부여하려면 다음 옵션 중 하나를 선택합니다.


****  

| 프로그래밍 방식 액세스가 필요한 사용자 | 목적 | 방법 | 
| --- | --- | --- | 
| IAM | (권장됨) 콘솔 자격 증명을 임시 자격 증명으로 사용하여 AWS CLI, AWS SDK 또는 AWS API에 대한 프로그래밍 요청에 서명합니다. |  사용하고자 하는 인터페이스에 대한 지침을 따릅니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/authorizing-redshift-service.html)  | 
|  작업 인력 ID (IAM Identity Center에서 관리되는 사용자)  | 임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 AWS API에 대한 프로그래밍 요청에 서명합니다. |  사용하고자 하는 인터페이스에 대한 지침을 따릅니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/authorizing-redshift-service.html)  | 
| IAM | 임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 AWS API에 대한 프로그래밍 요청에 서명합니다. | IAM 사용자 설명서의 [AWS 리소스와 함께 임시 자격 증명 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)에 나와 있는 지침을 따르세요. | 
| IAM | (권장되지 않음)장기 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 AWS API에 대한 프로그래밍 요청에 서명합니다. |  사용하고자 하는 인터페이스에 대한 지침을 따릅니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/authorizing-redshift-service.html)  | 

다음을 통해 다른 AWS 서비스에 액세스하는 데 필요한 권한과 함께 IAM 역할을 생성하는 방법을 알아봅니다. Amazon Redshift 명령을 실행할 때 역할을 클러스터와 연관시키고 역할의 Amazon 리소스 이름(ARN)을 지정해야 합니다. 자세한 내용은 [IAM 역할을 사용하여 COPY, UNLOAD, CREATE EXTERNAL FUNCTION 및 CREATE EXTERNAL SCHEMA 작업에 대한 권한 부여IAM 역할을 사용하여 작업 승인](copy-unload-iam-role.md) 섹션을 참조하세요.

또한 슈퍼 사용자는 특정 사용자 및 그룹에 ASSUMEROLE 권한을 부여하여 COPY 및 UNLOAD 작업을 위한 역할에 대한 액세스 권한을 제공할 수 있습니다. 자세한 내용은 *Amazon Redshift 데이터베이스 개발자 안내서*의 [GRANT](https://docs.aws.amazon.com/redshift/latest/dg/r_GRANT.html)를 참조하세요.

## Amazon Redshift 클러스터가 AWS 서비스에 액세스 할 수 있도록 IAM 역할 생성


## 권한을 사용하여 IAM 역할 생성
<a name="authorizing-redshift-service-creating-an-iam-role"></a>

Amazon Redshift 클러스터에서 사용자를 대신하여 다른 AWS 서비스와 통신하도록 허용하는 IAM 역할을 생성하려면 다음 단계를 수행합니다. 이 섹션에 사용된 값은 예시이며 필요에 따라 값을 선택할 수 있습니다.<a name="create-iam-role-for-aws-services"></a>

**Amazon Redshift에서 AWS 서비스에 액세스하도록 허용하는 IAM 역할을 생성하려면**

1. [IAM 콘솔(IAM console)](https://console.aws.amazon.com/iam/home?#home)을 엽니다.

1. 탐색 창에서 **역할**을 선택합니다.

1. **역할 생성(Create role)**을 선택합니다.

1. **AWS 서비스**를 선택한 다음 **Redshift**를 선택합니다.

1. **사용 사례 선택** 아래에서, **Redshift - 사용자 지정 가능(Redshift - Customizable)**을 선택한 후 **다음: 권한(Next: Permissions)**을 선택합니다. **첨부 파일 권한 정책(Attach permissions policy)** 페이지가 나타납니다.

1. 예를 들어 COPY를 사용하여 Amazon S3에 액세스하려면 **AmazonS3ReadOnlyAccess**를 사용하고 추가할 수 있습니다. COPY 또는 UNLOAD를 사용하여 Amazon S3에 액세스하려면 원하는 버킷 및 접두사에 대한 액세스를 제한하는 관리형 정책을 생성하는 것이 좋습니다. 읽기 및 쓰기 작업 모두에 대해 최소 권한을 적용하고 Amazon Redshift에 필요한 Amazon S3 버킷 및 키 접두사로만 제한하는 것이 좋습니다.

   CREATE EXTERNAL FUNCTION 명령에 대한 Lambda 함수 호출에 액세스하려면 **AWSLambdaRole**을 추가합니다.

   Redshift Spectrum의 경우 Amazon S3 액세스 외에 **AWSGlueConsoleFullAccess** 또는 **AmazonAthenaFullAccess**를 추가합니다.

   **다음: 태그**를 선택합니다.

1. **태그 추가(Add tags)** 페이지가 나타납니다. 선택적으로 태그를 추가할 수 있습니다. **다음: 검토**를 선택합니다.

1. **Role name(역할 이름)**에는 역할 이름을 입력합니다(예: **RedshiftCopyUnload**). ****역할 생성(Create role)****을 선택합니다.

1. 새로운 역할은 해당 역할을 사용하는 클러스터의 사용자라면 모두에게 제공됩니다. 특정 클러스터의 일부 사용자로 액세스를 제한하거나, 혹은 특정 리전의 클러스터로 제한하려면 역할에 대한 신뢰 관계를 편집하세요. 자세한 내용은 [IAM 역할에 대한 액세스 제한](authorizing-redshift-service-database-users.md) 섹션을 참조하세요.

1. 역할을 클러스터와 연결합니다. IAM 역할은 새롭게 생성한 클러스터와 연결할 수도 있고, 혹은 기존 클러스터에 추가할 수도 있습니다. 자세한 내용은 [IAM 역할을 클러스터와 연결](copy-unload-iam-role-associating-with-clusters.md) 섹션을 참조하세요.
**참고**  
특정 데이터에 대한 액세스를 제한하려면 필요한 최소 권한을 부여하는 IAM 역할을 사용합니다.

# IAM 역할에 대한 액세스 제한
<a name="authorizing-redshift-service-database-users"></a>

기본적으로 Amazon Redshift 클러스터에서 사용할 수 있는 IAM 역할은 해당 클러스터의 모든 사용자가 사용할 수 있습니다. IAM 역할을 특정 클러스터 또는 특정 영역의 특정 Amazon Redshift 데이터베이스 사용자로 제한하도록 선택할 수 있습니다.

특정 데이터베이스 사용자에 한해 IAM 역할을 사용할 수 있도록 하려면 다음 단계를 따르세요.<a name="identify-db-users-for-iam-role"></a>

**특정 데이터베이스 사용자로 IAM 역할에 대한 액세스 권한을 제한하려면**

1. Amazon Redshift 클러스터의 데이터베이스 사용자에 대한 Amazon 리소스 이름(ARN)을 확인합니다. 데이터베이스 사용자의 ARN 형식은 `arn:aws:redshift:region:account-id:dbuser:cluster-name/user-name`입니다.

   Amazon Redshift Serverless의 경우 다음 ARN 형식을 사용합니다. `arn:aws:redshift:region:account-id:dbuser:serverless-account-id-workgroup-id/user-name` 

1. [IAM 콘솔(IAM console)](https://console.aws.amazon.com/iam/home?#home)을 엽니다.

1. 탐색 창에서 **역할**을 선택합니다.

1. 특정 Amazon Redshift 데이터베이스 사용자로 제한하려는 IAM 역할을 선택합니다.

1. **신뢰 관계(Trust Relationships)** 탭을 선택한 다음 **신뢰 관계 편집(Edit Trust Relationship)**을 선택합니다. Amazon Redshift가 귀하를 대신하여 다른 AWS 서비스에 액세스 할 수 있게 해주는 새로운 IAM 역할은 다음과 같이 신뢰 관계를 갖습니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "redshift.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 신뢰 관계의 `sts:AssumeRole` 작업 영역에 `sts:ExternalId` 필드를 지정하는 값으로 제한하는 조건을 추가합니다. 역할에 대한 액세스 권한을 부여할 각 데이터베이스 사용자의 ARN을 추가합니다. 외부 ID는 고유한 문자열일 수 있습니다.

   예를 들어 다음 신뢰 관계는 `user1` 리전의 `user2` 클러스터에 속한 데이터베이스 사용자인 `my-cluster`과 `us-west-2`에게만 IAM 역할을 사용할 권한을 부여하고 있습니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
     {
       "Effect": "Allow",
       "Principal": { 
         "Service": "redshift.amazonaws.com" 
       },
       "Action": "sts:AssumeRole",
       "Condition": {
         "StringEquals": {
           "sts:ExternalId": [
             "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user1",
             "arn:aws:redshift:us-west-2:123456789012:dbuser:my-cluster/user2"
           ]
         }
       }
     }]
   }
   ```

------

1. **신뢰 정책 업데이트**를 선택합니다.

# IAM 역할을 한 AWS 리전으로 제한
<a name="authorizing-redshift-service-regions"></a>

특정 AWS 리전에만 액세스할 수 있도록 IAM 역할을 제한할 수 있습니다. 기본적으로 Amazon Redshift에 대한 IAM 역할은 단일 리전으로 제한되지 않습니다.

IAM 역할 사용을 리전별로 제한하려면 다음 단계를 수행합니다.<a name="identify-regionsfor-iam-role"></a>

**IAM 역할에 대해 허용되는 리전을 확인하려면**

1. [https://console.aws.amazon.com/](https://console.aws.amazon.com/)에서 [IAM 콘솔](https://console.aws.amazon.com/iam/home?#home)을 엽니다.

1. 탐색 창에서 **역할**을 선택합니다.

1. 특정 리전에 제한되도록 수정할 역할을 선택합니다.

1. **신뢰 관계(Trust Relationships)** 탭을 선택한 다음 **신뢰 관계 편집(Edit Trust Relationship)**을 선택합니다. Amazon Redshift가 귀하를 대신하여 다른 AWS 서비스에 액세스 할 수 있게 해주는 새로운 IAM 역할은 다음과 같이 신뢰 관계를 갖습니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "redshift.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. `Service`의 `Principal` 목록을 역할 사용을 허용할 특정 리전의 목록으로 수정합니다. `Service` 목록에서 각 리전은 `redshift.region.amazonaws.com` 형식이어야 합니다.

   예를 들어, 다음과 같이 편집된 신뢰 관계는 `us-east-1` 및 `us-west-2` 리전에서만 IAM 역할을 사용하도록 허용합니다.

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": [
             "redshift.us-east-1.amazonaws.com",
             "redshift.us-west-2.amazonaws.com"
           ]
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. **신뢰 정책 업데이트(Update Trust Policy)**를 선택합니다.

# Amazon Redshift에서 IAM 역할 연결
<a name="authorizing-redshift-service-chaining-roles"></a>

역할을 클러스터에 연결하면 클러스터가 Amazon S3, Amazon Athena, AWS Glue 및 AWS Lambda에 액세스할 수 있는 역할을 맡을 수 있습니다. 클러스터에 연결된 역할에 필요한 리소스에 대한 액세스 권한이 없는 경우 다른 계정에 속한 다른 역할을 함께 묶을 수 있습니다. 그러면 클러스터는 함께 묶은 역할을 일시적으로 수임하여 데이터에 액세스합니다. 역할을 함께 묶어 교차 계정 액세스를 부여할 수도 있습니다. 체인의 각 역할은 클러스터가 체인의 끝에 있는 역할을 수임할 때까지 체인의 다음 역할을 수임합니다. 연결할 수 있는 최대 IAM 역할 수는 할당량에 따라 달라집니다. 자세한 내용은 [Amazon Redshift 객체에 대한 할당량](amazon-redshift-limits.md#amazon-redshift-limits-quota)에서 할당량 "Amazon Redshift Redshift가 다른 AWS 서비스에 액세스하기 위한 클러스터 IAM 역할" 섹션을 참조하세요.

**참고**  
체인이 올바르게 작동하려면 IAM 역할을 지정해야 합니다.

예를 들어, 회사 A가 회사 B에 속한 Amazon S3 버킷의 데이터에 액세스하려고 한다고 가정합니다. 회사 A는 `RoleA`라는 Amazon Redshift에 대한 AWS 서비스 역할을 생성하고 해당 클러스터에 연결합니다. 회사 B는 `RoleB`라는 이름의 역할을 생성합니다. 이는 회사 B 버킷의 데이터에 액세스할 수 있는 권한을 받았습니다. 회사 B 버킷의 데이터에 액세스하려면 회사 A는 `iam_role` 파라미터를 사용하여 COPY 명령을 실행하고 `RoleA`와 `RoleB`를 묶습니다. COPY 작업 기간 동안 `RoleA`은 `RoleB`를 수임하여 Amazon S3 버킷에 액세스합니다.

역할을 함께 묶으려면 역할 간에 신뢰 관계를 구성해야 합니다. 또 다른 역할을 수임하는 역할(예: `RoleA`)에는 다음 묶인 역할(예: `RoleB`)을 수임하도록 허용하는 권한 정책이 있어야 합니다. 반대로 권한을 전달하는 역할(`RoleB`)에는 권한을 이전에 묶인 역할(`RoleA`)로 전달하도록 허용하는 신뢰 정책이 있어야 합니다. 자세한 내용은 IAM User Guide의 [Using IAM roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html)를 참조하세요.

체인의 첫 번째 역할은 클러스터에 연결된 역할이어야 합니다. 첫 번째 역할과 체인의 다음 역할을 수임하는 각 후속 역할에는 특정 문이 포함된 정책이 있어야 합니다. 이 문은 `Allow`작업 및 `sts:AssumeRole ` 요소에 있는 다음 역할의 Amazon 리소스 이름(ARN)에 `Resource` 효과를 줍니다. 예를 들어 `RoleA`에는 `RoleB`를 수임하도록 허용하는 권한 정책이 있고, 이는 AWS 계정 `210987654321`이 소유합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1487639602000",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "arn:aws:iam::111122223333:role/RoleB"        
       }
    ]
}
```

------

다른 역할로 전달하는 역할은 역할을 수임하는 역할 또는 해당 역할을 소유한 AWS 계정과의 신뢰 관계를 설정해야 합니다. 예를 들어 `RoleB`에는 신뢰 정책이 있어 `RoleA`와의 신뢰 관계를 설정합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/RoleA"
      }
    }
  ]
}
```

------

다음 신뢰 정책은 `RoleA`의 소유자인 AWS 계정 `123456789012`와의 신뢰 관계를 설정합니다.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      }
    }      
  ]
}
```

------

**참고**  
특정 사용자로 역할 연결 권한 부여를 제한하려면 조건을 정의합니다. 자세한 내용은 [IAM 역할에 대한 액세스 제한](authorizing-redshift-service-database-users.md) 섹션을 참조하세요.

UNLOAD, COPY, CREATE EXTERNAL FUNCTION 또는 CREATE EXTERNAL SCHEMA 명령을 실행할 때 `iam_role` 파라미터에서 쉼표로 구분된 역할 ARN 목록을 포함해 역할을 함께 묶습니다. 다음은 `iam_role` 파라미터에서 역할을 묶기 위한 구문을 나타냅니다.

```
unload ('select * from venue limit 10') 
to 's3://acmedata/redshift/venue_pipe_'
IAM_ROLE 'arn:aws:iam::<aws-account-id-1>:role/<role-name-1>[,arn:aws:iam::<aws-account-id-2>:role/<role-name-2>][,...]';
```

**참고**  
전체 역할 체인은 작은따옴표로 묶여 있으며, 공백을 포함해서는 안 됩니다.

다음 예에서 `RoleA`는 AWS 계정 `123456789012`에 속하는 클러스터에 연결됩니다. 계정 `210987654321`에 속한 `RoleB`는 `s3://companyb/redshift/`라는 버킷에 액세스할 수 있는 권한을 가집니다. 다음 예에서는 `RoleA`와 `RoleB`를 묶어 s3://companyb/redshift/ 버킷에 데이터 UNLOAD를 수행합니다.

```
unload ('select * from venue limit 10') 
to 's3://companyb/redshift/venue_pipe_'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

다음 예에서는 COPY 명령을 사용하여 이전 예에서 언로드된 데이터를 로드합니다.

```
copy venue 
from 's3://companyb/redshift/venue_pipe_'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

다음 예에서는 CREATE EXTERNAL SCHEMA가 묶인 역할을 사용하여 `RoleB`를 수임합니다.

```
create external schema spectrumexample from data catalog 
database 'exampledb' region 'us-west-2' 
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

다음 예에서는 CREATE EXTERNAL FUNCTION이 묶인 역할을 사용하여 역할 `RoleB`를 수임합니다.

```
create external function lambda_example(varchar)
returns varchar
volatile
lambda 'exampleLambdaFunction'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

# IAM 역할을 사용하여 COPY, UNLOAD, CREATE EXTERNAL FUNCTION 및 CREATE EXTERNAL SCHEMA 작업에 대한 권한 부여
<a name="copy-unload-iam-role"></a>

[COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html) 명령을 사용하여 데이터를 Amazon Redshift에 로드(또는 가져오기)하고 [UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html) 명령을 사용하여 Amazon Redshift에서 데이터를 언로드(또는 내보내기)할 수 있습니다. CREATE EXTERNAL FUNCTION 명령을 사용하여 AWS Lambda에서 함수를 호출하는 사용자 정의 함수를 생성할 수 있습니다.

Amazon Redshift Spectrum을 사용하면 [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html) 명령을 사용하여 데이터가 들어있는 Amazon S3 버킷의 위치를 지정할 수 있습니다. COPY, UNLOAD 또는 CREATE EXTERNAL SCHEMA 명령을 실행할 때 보안 자격 증명을 제공합니다. 이러한 자격 증명을 통해 Amazon Redshift 클러스터는 Amazon S3 버킷과 같은 대상에서 데이터를 읽거나 쓸 수 있습니다.

CREATE EXTERNAL FUNCTION을 실행할 때 IAM 역할 파라미터를 사용하여 보안 자격 증명을 제공합니다. 이러한 자격 증명은 AWS Lambda에서 Lambda 함수를 호출하도록 Amazon Redshift 클러스터에 권한을 부여합니다. 보안 자격 증명을 제공하는 데 선호되는 방법은 AWS Identity and Access Management(IAM) 역할을 지정하는 것입니다. COPY 및 UNLOAD의 경우 임시 자격 증명을 제공할 수 있습니다. IAM 역할 생성에 대한 자세한 내용은 [Amazon Redshift가 사용자를 대신하여 AWS 서비스에 액세스할 수 있도록 권한 부여](authorizing-redshift-service.md) 섹션을 참조하세요.

사용자가 AWS Management Console 외부에서 AWS와 상호 작용하려면 프로그래밍 방식의 액세스 권한이 필요합니다. 프로그래밍 방식의 액세스 권한을 부여하는 방법은 AWS에 액세스하는 사용자 유형에 따라 다릅니다.

사용자에게 프로그래밍 방식의 액세스 권한을 부여하려면 다음 옵션 중 하나를 선택합니다.


****  

| 프로그래밍 방식 액세스가 필요한 사용자 | 목적 | 방법 | 
| --- | --- | --- | 
| IAM | (권장됨) 콘솔 자격 증명을 임시 자격 증명으로 사용하여 AWS CLI, AWS SDK 또는 AWS API에 대한 프로그래밍 요청에 서명합니다. |  사용하고자 하는 인터페이스에 대한 지침을 따릅니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/copy-unload-iam-role.html)  | 
|  작업 인력 ID (IAM Identity Center에서 관리되는 사용자)  | 임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 AWS API에 대한 프로그래밍 요청에 서명합니다. |  사용하고자 하는 인터페이스에 대한 지침을 따릅니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/copy-unload-iam-role.html)  | 
| IAM | 임시 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 AWS API에 대한 프로그래밍 요청에 서명합니다. | IAM 사용자 설명서의 [AWS 리소스와 함께 임시 자격 증명 사용](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)에 나와 있는 지침을 따르세요. | 
| IAM | (권장되지 않음)장기 자격 증명을 사용하여 AWS CLI, AWS SDK 또는 AWS API에 대한 프로그래밍 요청에 서명합니다. |  사용하고자 하는 인터페이스에 대한 지침을 따릅니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/copy-unload-iam-role.html)  | 

IAM 역할 사용 단계는 다음과 같습니다.
+ Amazon Redshift 클러스터에서 사용할 IAM 역할을 생성합니다.
+ IAM 역할을 클러스터와 연결합니다.
+ COPY, UNLOAD, CREATE EXTERNAL SCHEMA 또는 CREATE EXTERNAL FUNCTION 명령을 호출할 때 IAM 역할의 ARN을 포함합니다.

# IAM 역할을 클러스터와 연결
<a name="copy-unload-iam-role-associating-with-clusters"></a>

Amazon Redshift가 다른 AWS 서비스에 액세스하도록 권한을 부여하는 IAM 역할을 만든 후에는 해당 역할을 Amazon Redshift 클러스터와 연결해야 합니다. 역할을 사용하여 데이터를 로드하거나 언로드하려면 먼저 이 작업을 수행해야 합니다.

## IAM 역할을 클러스터와 연결하는 데 필요한 권한
<a name="copy-unload-iam-role-associating-with-clusters-perms"></a>

IAM 역할을 클러스터와 연결하려면 사용자에게 해당 IAM 역할에 대한 `iam:PassRole` 권한이 필요합니다. 이 권한을 통해 관리자는 사용자가 Amazon Redshift 클러스터와 연결할 수있는 IAM 역할을 제한 할 수 있습니다. 가장 좋은 방법은 권한 정책을 IAM 역할에 연결한 다음 필요에 따라 사용자 및 그룹에 할당하는 것입니다. 자세한 내용은 [Amazon Redshift의 Identity and Access Management](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)를 참조하세요.

다음은 이러한 작업이 가능하도록 사용자에게 추가할 수 있는 IAM 정책 예입니다.
+ 해당 사용자의 계정이 소유한 모든 Amazon Redshift 클러스터에 대한 세부 정보를 가져옵니다.
+ 3가지 IAM 역할 중 하나를 2개의 Amazon Redshift 클러스터 중 하나와 연결합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "redshift:DescribeClusters",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                 "redshift:ModifyClusterIamRoles",
                 "redshift:CreateCluster"
            ],
            "Resource": [
                 "arn:aws:redshift:us-east-1:123456789012:cluster:my-redshift-cluster",
                 "arn:aws:redshift:us-east-1:123456789012:cluster:my-second-redshift-cluster"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": [
                "arn:aws:iam::123456789012:role/MyRedshiftRole",
                "arn:aws:iam::123456789012:role/SecondRedshiftRole",
                "arn:aws:iam::123456789012:role/ThirdRedshiftRole"
             ]
        }
    ]
}
```

------

사용자에게 적절한 권한이 부여되면 해당 사용자는 Amazon Redshift 클러스터와 IAM 역할을 연결할 수 있습니다. 그런 다음 IAM 역할은 COPY 또는 UNLOAD 명령이나 다른 Amazon Redshift 명령과 함께 사용할 수 있습니다.

IAM 정책에 대한 자세한 내용은 *IAM User Guide*의 [Overview of IAM policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html)를 참조하세요.

## 클러스터와 IAM 역할 연결 관리
<a name="managing-iam-role-association-with-cluster"></a>

클러스터를 생성할 때는 IAM 역할을 Amazon Redshift 클러스터와 연결할 수 있습니다. 또는 기존 클러스터를 수정하고 하나 이상의 IAM 역할 연결을 추가하거나 제거할 수 있습니다.

다음에 유의하세요.
+ 연결할 수 있는 최대 IAM 역할 수는 할당량에 따라 달라집니다.
+ IAM 역할을 여러 Amazon Redshift 클러스터와 연결할 수 있습니다.
+ IAM 역할과 클러스터가 동일한 AWS 계정에 의해 소유된 경우에만 IAM 역할을 Amazon Redshift 클러스터와 연결할 수 있습니다.

IAM 역할과 클러스터의 연결은 다음 단계에 따라 콘솔에서 관리할 수 있습니다.

**IAM 역할 연결을 관리하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. 탐색 메뉴에서 **클러스터(Clusters)**를 선택한 후 업그레이드할 클러스터를 선택합니다.

1. **작업(Actions)**에서 **IAM 역할 관리(Manage IAM roles)**를 선택하여 클러스터와 연결된 현재 목록 IAM 역할을 표시합니다.

1. **IAM 역할 관리(Manage IAM roles)** 페이지에서 추가하려는 사용 가능한 IAM 역할을 선택한 다음 **Add IAM role(IAM 역할 추가)**을 선택합니다.

1. **완료(Done)**를 선택하여 변경 사항을 저장합니다.

다음과 같은 접근 방법을 사용하여 AWS CLI에서 클러스터에 대한 IAM 역할을 관리할 수 있습니다.

클러스터를 생성할 때 IAM 역할을 클러스터와 연결하려면 `--iam-role-arns` 명령의 `create-cluster` 파라미터에서 IAM 역할의 Amazon 리소스 이름(ARN)을 지정해야 합니다. `create-cluster` 명령을 호출할 때 추가할 수 있는 최대 IAM 역할 수에는 할당량이 적용됩니다.

Amazon Redshift 클러스터와 IAM 역할의 연결 및 연결 해제는 비동기 프로세스입니다. IAM 역할과 클러스터의 모든 연결 상태는 `describe-clusters` 명령을 호출하여 확인할 수 있습니다.

다음은 IAM 역할 2개를 새롭게 생성한 클러스터인 `my-redshift-cluster`와 연결하는 예입니다.

```
aws redshift create-cluster \
    --cluster-identifier "my-redshift-cluster" \
    --node-type "ra3.4xlarge" \
    --number-of-nodes 16 \
    --iam-role-arns "arn:aws:iam::123456789012:role/RedshiftCopyUnload" \
                    "arn:aws:iam::123456789012:role/SecondRedshiftRole"
```

IAM 역할을 기존 Amazon Redshift 클러스터와 연결하려면 `modify-cluster-iam-roles` 명령의 `--add-iam-roles` 파라미터에 대한 IAM 역할의 Amazon 리소스 이름(ARN)을 지정합니다. `modify-cluster-iam-roles` 명령을 호출할 때 추가할 수 있는 최대 IAM 역할 수에는 할당량이 적용됩니다.

다음은 IAM 역할을 기존 클러스터인 `my-redshift-cluster`와 연결하는 예입니다.

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier "my-redshift-cluster" \
    --add-iam-roles "arn:aws:iam::123456789012:role/RedshiftCopyUnload"
```

클러스터에서 IAM 역할을 연결 해제하려면 `modify-cluster-iam-roles` 명령의 `--remove-iam-roles` 파라미터에서 IAM 역할의 ARN을 지정해야 합니다.`modify-cluster-iam-roles` `modify-cluster-iam-roles` 명령을 호출할 때 삭제할 수 있는 최대 IAM 역할 수에는 할당량이 적용됩니다.

다음은 `my-redshift-cluster`라는 클러스터에서 `123456789012` AWS 계정에 속한 IAM 역할 연결을 제거하는 예입니다.

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier "my-redshift-cluster" \
    --remove-iam-roles "arn:aws:iam::123456789012:role/RedshiftCopyUnload"
```

### AWS CLI를 사용하여 클러스터에 대한 IAM 역할 연결 나열
<a name="w2aac37c30c30c35c31b7b9c29"></a>

Amazon Redshift 클러스터와 관련된 모든 IAM 역할과 IAM 역할 연결의 상태를 나열하려면 `describe-clusters` 명령을 호출합니다. 그러면 다음 예 출력과 같이 클러스터와 연결되어 있는 IAM 역할 각각의 ARN이 `IamRoles` 목록으로 반환됩니다.

클러스터와 연결된 역할은 상태가 `in-sync`로 표시됩니다. 클러스터와 연결이 진행 중인 역할은 상태가 `adding`으로 표시됩니다. 클러스터와 연결 해제 중인 역할은 상태가 `removing`으로 표시됩니다.

```
{
    "Clusters": [
        {
            "ClusterIdentifier": "my-redshift-cluster",
            "NodeType": "ra3.4xlarge",
            "NumberOfNodes": 16,
            "IamRoles": [
                {
                    "IamRoleArn": "arn:aws:iam::123456789012:role/MyRedshiftRole",
                    "IamRoleApplyStatus": "in-sync"
                },
                {
                    "IamRoleArn": "arn:aws:iam::123456789012:role/SecondRedshiftRole",
                    "IamRoleApplyStatus": "in-sync"
                }
            ],
            ...
        },
        {
            "ClusterIdentifier": "my-second-redshift-cluster",
            "NodeType": "ra3.4xlarge",
            "NumberOfNodes": 10,
            "IamRoles": [
                {
                    "IamRoleArn": "arn:aws:iam::123456789012:role/MyRedshiftRole",
                    "IamRoleApplyStatus": "in-sync"
                },
                {
                    "IamRoleArn": "arn:aws:iam::123456789012:role/SecondRedshiftRole",
                    "IamRoleApplyStatus": "in-sync"
                },
                {
                    "IamRoleArn": "arn:aws:iam::123456789012:role/ThirdRedshiftRole",
                    "IamRoleApplyStatus": "in-sync"
                }
            ],
            ...
        }
    ]
}
```

AWS CLI 사용에 대한 자세한 내용은 *[AWS CLI User Guide](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)*를 참조하세요.

# Amazon Redshift의 기본값으로 IAM 역할 생성
<a name="default-iam-role"></a>

 Redshift 콘솔을 통해 IAM 역할을 생성하면 Amazon Redshift가 프로그래밍 방식으로 AWS 계정에 역할을 생성하고 기존 AWS 관리형 정책을 자동으로 해당 역할에 연결합니다. 이 접근 방식을 사용하면 Redshift 콘솔 내에 머물면서 역할 생성을 위해 IAM 콘솔로 전환할 필요가 없습니다. Amazon Redshift 콘솔에서 생성된 기존 IAM 역할에 대한 권한을 보다 세부적으로 제어하기 위해 IAM 역할에 사용자 지정된 관리형 정책을 연결할 수 있습니다.

## 콘솔에서 만들어진 IAM 역할
<a name="default-iam-role-overview"></a>

Amazon Redshift 콘솔을 사용하여 IAM 역할을 생성하면 Amazon Redshift는 콘솔을 통해 생성된 모든 IAM 역할을 추적합니다. Amazon Redshift는 모든 새 클러스터를 생성하고 스냅샷에서 클러스터를 복원하기 위한 가장 최근의 기본 IAM 역할을 미리 선택합니다.

SQL 명령을 실행할 수 있는 권한을 가진 정책이 있는 콘솔을 통해 IAM 역할을 생성할 수 있습니다. 이러한 명령에는 COPY, UNLOAD, CREATE EXTERNAL FUNCTION, CREATE EXTERNAL TABLE, CREATE EXTERNAL SCHEMA, CREATE MODEL 또는 CREATE LIBRARY가 포함됩니다. 필요에 따라 사용자 정의 정책을 생성하고 IAM 역할에 연결하여 AWS 리소스에 대한 사용자 액세스를 보다 세부적으로 제어할 수 있습니다.

IAM 역할을 생성하고 콘솔을 사용하여 클러스터의 기본값으로 설정한 경우 인증 및 권한 부여를 수행하기 위해 IAM 역할의 Amazon 리소스 이름(ARN)을 제공할 필요가 없습니다.

클러스터를 위해 콘솔을 통해 생성한 IAM 역할에는 `AmazonRedshiftAllCommandsFullAccess` 관리형 정책이 자동으로 연결됩니다. 이 IAM 역할을 통해 Amazon Redshift는 IAM 계정의 AWS 리소스에 대한 데이터를 복사, 언로드, 쿼리 및 분석할 수 있습니다. 관리형 정책은 [COPY](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-authorization.html), [UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html), [CREATE EXTERNAL FUNCTION](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_FUNCTION.html), [CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html), [CREATE MODEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html) 및 [CREATE LIBRARY](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_LIBRARY.html) 작업을 제공합니다. 이 정책은 Amazon S3, Amazon CloudWatch Logs, Amazon SageMaker AI 및 AWS Glue와 같은 관련 AWS 서비스에 대해 SELECT 문을 실행할 수 있는 권한도 부여합니다.

CREATE EXTERNAL FUNCTION, CREATE EXTERNAL SCHEMA, CREATE MODEL 및 CREATE LIBRARY 명령에는 `default` 키워드가 있습니다. 이러한 명령에 대한 이 키워드의 경우 Amazon Redshift는 기본값으로 설정되고 명령이 실행될 때 클러스터와 연결된 IAM 역할을 사용합니다. [DEFAULT\$1IAM\$1ROLE](https://docs.aws.amazon.com/redshift/latest/dg/r_DEFAULT_IAM_ROLE.html) 명령을 실행하여 클러스터에 연결된 현재 기본 IAM 역할을 확인할 수 있습니다.

Redshift 클러스터에 대해 생성되고 기본값으로 설정된 IAM 역할의 액세스 권한을 제어하려면 ASSUMEROLE 권한을 사용합니다. 이 액세스 제어는 데이터베이스 사용자 및 그룹이 앞에 나열된 것과 같은 명령을 실행할 때 적용됩니다. IAM 역할에 대해 사용자 또는 그룹에 ASSUMEROLE 권한을 부여한 후 사용자 또는 그룹은 이러한 명령을 실행할 때 해당 역할을 수임할 수 있습니다. ASSUMEROLE 권한을 사용하여 필요에 따라 적절한 명령에 대한 액세스 권한을 부여할 수 있습니다.

Amazon Redshift 콘솔을 사용하여 다음 작업을 수행할 수 있습니다.
+ [IAM 역할을 기본값으로 생성](#create-iam)
+ [클러스터에서 IAM 역할 제거](#remove-iam)
+ [클러스터와 IAM 역할 연결](#associate-iam)
+ [IAM 역할을 기본값으로 설정](#set-default-iam)
+ [클러스터의 기본값으로 IAM 역할 설정 취소](#clear-default-iam)

## AmazonRedshiftAllCommandsFullAccess 관리형 정책의 권한
<a name="default-iam-role-permissions"></a>

다음 예에서는 클러스터에 대해 기본값으로 설정된 IAM 역할에 대한 특정 작업을 허용하는 `AmazonRedshiftAllCommandsFullAccess` 관리형 정책의 권한을 보여줍니다. 권한 정책이 연결된 IAM 역할은 사용자 또는 그룹이 할 수 있는 것과 할 수 없는 것을 승인합니다. 이러한 권한이 주어지면 Amazon S3에서 COPY 명령을 실행하고 UNLOAD를 실행하고 CREATE MODEL 명령을 사용할 수 있습니다.

```
{
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetBucketAcl",
                "s3:GetBucketCors",
                "s3:GetEncryptionConfiguration",
                "s3:GetBucketLocation",
                "s3:ListBucket",
                "s3:ListAllMyBuckets",
                "s3:ListMultipartUploadParts",
                "s3:ListBucketMultipartUploads",
                "s3:PutObject",
                "s3:PutBucketAcl",
                "s3:PutBucketCors",
                "s3:DeleteObject",
                "s3:AbortMultipartUpload",
                "s3:CreateBucket"
            ],
            "Resource": [
                "arn:aws:s3:::redshift-downloads",
                "arn:aws:s3:::redshift-downloads/*",
                "arn:aws:s3:::*redshift*",
                "arn:aws:s3:::*redshift*/*"
            ]
}
```

다음 예에서는 클러스터에 대해 기본값으로 설정된 IAM 역할에 대한 특정 작업을 허용하는 `AmazonRedshiftAllCommandsFullAccess` 관리형 정책의 권한을 보여줍니다. 권한 정책이 연결된 IAM 역할은 사용자 또는 그룹이 할 수 있는 것과 할 수 없는 것을 승인합니다. 다음 권한이 주어지면 CREATE EXTERNAL FUNCTION 명령을 실행할 수 있습니다.

```
{
    "Action": [
        "lambda:InvokeFunction"
    ],
    "Resource": "arn:aws:lambda:*:*:function:*redshift*"
}
```

다음 예에서는 클러스터에 대해 기본값으로 설정된 IAM 역할에 대한 특정 작업을 허용하는 `AmazonRedshiftAllCommandsFullAccess` 관리형 정책의 권한을 보여줍니다. 권한 정책이 연결된 IAM 역할은 사용자 또는 그룹이 할 수 있는 것과 할 수 없는 것을 승인합니다. 다음 권한이 주어지면 Amazon Redshift Spectrum에 필요한 CREATE EXTERNAL SCHEMA 및 CREATE EXTERNAL TABLE 명령을 실행할 수 있습니다.

```
{
            "Effect": "Allow",
            "Action": [
                "glue:CreateDatabase",
                "glue:DeleteDatabase",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:UpdateDatabase",
                "glue:CreateTable",
                "glue:DeleteTable",
                "glue:BatchDeleteTable",
                "glue:UpdateTable",
                "glue:GetTable",
                "glue:GetTables",
                "glue:BatchCreatePartition",
                "glue:CreatePartition",
                "glue:DeletePartition",
                "glue:BatchDeletePartition",
                "glue:UpdatePartition",
                "glue:GetPartition",
                "glue:GetPartitions",
                "glue:BatchGetPartition"
            ],
            "Resource": [
                "arn:aws:glue:*:*:table/*redshift*/*",
                "arn:aws:glue:*:*:catalog",
                "arn:aws:glue:*:*:database/*redshift*"
            ]
}
```

다음 예에서는 클러스터에 대해 기본값으로 설정된 IAM 역할에 대한 특정 작업을 허용하는 `AmazonRedshiftAllCommandsFullAccess` 관리형 정책의 권한을 보여줍니다. 권한 정책이 연결된 IAM 역할은 사용자 또는 그룹이 할 수 있는 것과 할 수 없는 것을 승인합니다. 다음 권한이 주어지면 연합 쿼리를 사용하여 CREATE EXTERNAL SCHEMA 명령을 실행할 수 있습니다.

```
{
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": [
                "arn:aws:secretsmanager:*:*:secret:*Redshift*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "secretsmanager:ResourceTag/Redshift": "true"
                }
            }
},
```

## 콘솔을 사용하여 클러스터에 대해 생성된 IAM 역할 관리
<a name="managing-iam-role-console"></a>

Amazon Redshift 콘솔에서 생성된 IAM 역할을 생성, 수정 및 제거하려면 콘솔의 **클러스터(Clusters)** 섹션을 사용합니다.

### IAM 역할을 기본값으로 생성
<a name="create-iam"></a>

콘솔에서 `AmazonRedshiftAllCommandsFullAccess` 정책이 자동으로 연결된 클러스터에 대한 IAM 역할을 생성할 수 있습니다. 생성하는 새 IAM 역할을 통해 Amazon Redshift가 IAM 계정의 Amazon 리소스에서 데이터를 복사, 로드, 쿼리 및 분석할 수 있습니다.

클러스터의 기본값으로 설정된 IAM 역할은 하나만 있을 수 있습니다. 기존 IAM 역할이 현재 기본값으로 할당된 경우 다른 IAM 역할을 클러스터 기본값으로 생성하면 새 IAM 역할이 다른 역할을 기본값으로 대체합니다.

**새 클러스터와 해당 클러스터의 기본값으로 설정된 IAM 역할을 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. 탐색 메뉴에서 **클러스터(Clusters)**를 선택합니다. 현재 AWS 리전의 계정에 대한 클러스터가 나열됩니다. 각 클러스터의 속성 하위 집합이 목록의 열에 표시됩니다.

1. 클러스터를 생성하려면 **클러스터 생성(Create cluster)**을 선택합니다.

1. 콘솔 페이지의 지침에 따라 **클러스터 구성(Cluster configuration)**에 속성을 입력합니다. 이 단계에 대한 자세한 내용은 [클러스터 생성](create-cluster.md) 섹션을 참조하세요.

1. (선택 사항) **샘플 데이터 로드(Load sample data)**를 선택하여 Amazon Redshift 클러스터에 샘플 데이터 집합을 로드하여 쿼리 편집기로 데이터 쿼리를 시작합니다.

   방화벽 뒤에 있는 경우 데이터베이스 포트는 인바운드 연결을 허용하는 개방형 포트여야 합니다.

1. 콘솔 페이지의 지침에 따라 **데이터베이스 구성(Database configurations)**에 대한 속성을 입력합니다.

1. **클러스터 권한(Cluster permissions)**의 **IAM 역할 관리(Manage IAM roles)**에서 **IAM 역할 생성(Create IAM role)**을 선택합니다.

1. 다음 방법 중 하나를 선택하여 IAM 역할이 액세스할 Amazon S3 버킷을 지정합니다.
   + 특정 Amazon S3 버킷을 지정하지 않고 IAM 역할을 생성하려면 **추가 Amazon S3 버킷 없음(No additional Amazon S3 bucket)**을 선택합니다.
   + Amazon Redshift 클러스터에 대한 액세스 권한이 있는 사용자가 AWS 계정에 있는 Amazon S3 버킷 및 해당 콘텐츠에도 액세스할 수 있도록 하려면 **모든 Amazon S3 버킷(Any Amazon S3 bucket)**을 선택합니다.
   + **특정 Amazon S3 버킷(Specific Amazon S3 buckets)**을 선택하여 생성 중인 IAM 역할에 액세스 권한이 있는 하나 이상의 Amazon S3 버킷을 지정합니다. 그런 다음 테이블에서 Amazon S3 버킷을 하나 이상 선택합니다.

1. **기본값으로 IAM 역할 생성(Create IAM role as default)**을 선택합니다. Amazon Redshift는 IAM 역할을 자동으로 생성하고 클러스터의 기본값으로 설정합니다.

1. 클러스터를 생성하려면 **클러스터 생성(Create cluster)**을 선택합니다. 클러스터를 사용할 준비가 끝나려면 몇 분이 걸릴 수 있습니다.

### 클러스터에서 IAM 역할 제거
<a name="remove-iam"></a>

클러스터에서 IAM 역할을 하나 이상 제거할 수 있습니다.

**클러스터에서 IAM 역할을 제거하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. 탐색 메뉴에서 **클러스터(Clusters)**를 선택합니다. 현재 AWS 리전의 계정에 대한 클러스터가 나열됩니다. 각 클러스터의 속성 하위 집합이 목록의 열에 표시됩니다.

1. IAM 역할을 제거할 클러스터를 선택합니다.

1. **클러스터 권한(Cluster permissions)**에서 클러스터에서 제거할 IAM 역할을 하나 이상 선택합니다.

1. **IAM 역할 관리(Manage IAM roles)**에서 **IAM 역할 제거(Remove IAM roles)**를 선택합니다.

### 클러스터와 IAM 역할 연결
<a name="associate-iam"></a>

클러스터와 IAM 역할을 하나 이상 연결할 수 있습니다.

**클러스터와 IAM 역할을 연결하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. 탐색 메뉴에서 **클러스터(Clusters)**를 선택합니다. 현재 AWS 리전의 계정에 대한 클러스터가 나열됩니다. 각 클러스터의 속성 하위 집합이 목록의 열에 표시됩니다.

1. IAM 역할을 연결할 클러스터를 선택합니다.

1. **클러스터 권한(Cluster permissions)**에서 클러스터와 연결할 IAM 역할을 하나 이상 선택합니다.

1. **IAM 역할 관리(Manage IAM roles)**에서 **IAM 역할 연결(Associate IAM roles)**을 선택합니다.

1. 클러스터와 연결할 IAM 역할을 하나 이상 선택합니다.

1. **IAM 역할 연결(Associate IAM role)**을 선택합니다.

### IAM 역할을 기본값으로 설정
<a name="set-default-iam"></a>

IAM 역할을 클러스터의 기본값으로 설정할 수 있습니다.

**IAM 역할을 클러스터의 기본값으로 설정하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. 탐색 메뉴에서 **클러스터(Clusters)**를 선택합니다. 현재 AWS 리전의 계정에 대한 클러스터가 나열됩니다. 각 클러스터의 속성 하위 집합이 목록의 열에 표시됩니다.

1. 기본 IAM 역할을 설정하려는 클러스터를 선택합니다.

1. **클러스터 권한(Cluster permissions)**의 **연결된 IAM 역할(Associated IAM roles)**에서 클러스터의 기본값으로 설정할 IAM 역할을 선택합니다.

1. **기본값 설정(Set default)**에서 **기본값으로 설정(Make default)**을 선택합니다.

1. 메시지가 나타나면 **기본값 설정(Set default)**을 선택하여 지정된 IAM 역할을 기본값으로 설정하도록 확인합니다.

### 클러스터의 기본값으로 IAM 역할 설정 취소
<a name="clear-default-iam"></a>

클러스터의 기본값으로 IAM 역할 설정을 취소할 수 있습니다.

**클러스터의 기본값으로 IAM 역할 설정을 취소하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. 탐색 메뉴에서 **클러스터(Clusters)**를 선택합니다. 현재 AWS 리전의 계정에 대한 클러스터가 나열됩니다. 각 클러스터의 속성 하위 집합이 목록의 열에 표시됩니다.

1. IAM 역할을 연결할 클러스터를 선택합니다.

1. **클러스터 권한(Cluster permissions)**의 **연결된 IAM 역할(Associated IAM roles)**에서 기본 IAM 역할을 선택합니다.

1. **기본값 설정(Set default)**에서 **기본값 지우기(Clear default)**를 선택합니다.

1. 메시지가 나타나면 **기본값 지우기(Clear default)**를 선택하여 지정된 IAM 역할의 기본값 설정을 취소합니다.

## AWS CLI를 사용하여 클러스터에 생성된 IAM 역할 관리
<a name="managing-iam-role-association-with-cluster-cli"></a>

AWS CLI를 사용하여 클러스터에 생성된 IAM 역할을 관리할 수 있습니다.

### IAM 역할이 기본값으로 설정된 Amazon Redshift 클러스터를 생성하려면
<a name="create-cluster-iam"></a>

IAM 역할이 클러스터의 기본값으로 설정된 Amazon Redshift 클러스터를 생성하려면 `aws redshift create-cluster` AWS CLI 명령을 사용합니다.

다음 AWS CLI 명령은 Amazon Redshift 클러스터와 myrole1이라는 IAM 역할을 생성합니다. AWS CLI 명령은 또한 myrole1을 클러스터의 기본값으로 설정합니다.

```
aws redshift create-cluster \
    --node-type dc2.large \
    --number-of-nodes 2 \
    --master-username adminuser \
    --master-user-password TopSecret1 \
    --cluster-identifier mycluster \
    --iam-roles 'arn:aws:iam::012345678910:role/myrole1' 'arn:aws:iam::012345678910:role/myrole2' \
    --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole1'
```

다음은 코드 조각은 응답의 예입니다.

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",      
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "adding"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "adding"
            }
        ]
        ...
    }
}
```

### Amazon Redshift 클러스터에 IAM 역할을 하나 이상 추가하려면
<a name="modify-cluster-add-iam"></a>

클러스터에 연결된 IAM 역할을 하나 이상 추가하려면 `aws redshift modify-cluster-iam-roles` AWS CLI 명령을 사용합니다.

다음 AWS CLI 명령은 클러스터에 `myrole3`과 `myrole4`를 추가합니다.

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier mycluster \
    --add-iam-roles 'arn:aws:iam::012345678910:role/myrole3' 'arn:aws:iam::012345678910:role/myrole4'
```

다음은 코드 조각은 응답의 예입니다.

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3",
                "ApplyStatus": "adding"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole4",
                "ApplyStatus": "adding"
            }
        ],
        ...
    }
}
```

### Amazon Redshift 클러스터에서 IAM 역할을 하나 이상 제거하려면
<a name="modify-cluster-remove-iam"></a>

클러스터에 연결된 IAM 역할을 하나 이상 제거하려면 `aws redshift modify-cluster-iam-roles` AWS CLI 명령을 사용합니다.

다음 AWS CLI 명령은 클러스터에서 `myrole3`과 `myrole4`를 제거합니다.

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier mycluster \
    --remove-iam-roles 'arn:aws:iam::012345678910:role/myrole3' 'arn:aws:iam::012345678910:role/myrole4'
```

다음은 코드 조각은 응답의 예입니다.

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3",
                "ApplyStatus": "removing"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole4",
                "ApplyStatus": "removing"
            }
        ],
        ...
    }
}
```

### 연결된 IAM 역할을 클러스터의 기본값으로 설정하려면
<a name="modify-cluster-default-iam-associated"></a>

연결된 IAM 역할을 클러스터의 기본값으로 설정하려면 `aws redshift modify-cluster-iam-roles` AWS CLI 명령을 사용합니다.

다음 AWS CLI 명령은 `myrole2`를 클러스터의 기본값으로 설정합니다.

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier mycluster \
    --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole2'
```

다음은 코드 조각은 응답의 예입니다.

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "in-sync"
            }
        ],
        ...
    }
}
```

### 연결되지 않은 IAM 역할을 클러스터의 기본값으로 설정하려면
<a name="modify-cluster-default-iam-not-associated"></a>

연결되지 않은 IAM 역할을 클러스터의 기본값으로 설정하려면 `aws redshift modify-cluster-iam-roles` AWS CLI 명령을 사용합니다.

다음 AWS CLI 명령은 `myrole2`를 Amazon Redshift 클러스터에 추가하고 클러스터의 기본값으로 설정합니다.

```
aws redshift modify-cluster-iam-roles \
    --cluster-identifier mycluster \
    --add-iam-roles 'arn:aws:iam::012345678910:role/myrole3' \
    --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole3'
```

다음은 코드 조각은 응답의 예입니다.

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole3",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "in-sync"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole3",
                "ApplyStatus": "adding"
            }
        ],
        ...
    }
}
```

### 스냅샷에서 클러스터를 복원하고 IAM 역할을 클러스터의 기본값으로 설정하려면
<a name="restore-cluster-iam"></a>

스냅샷에서 클러스터를 복원할 때 기존 IAM 역할을 연결하거나 새 IAM 역할을 생성하여 클러스터의 기본값으로 설정할 수 있습니다.

스냅샷에서 Amazon Redshift 클러스터를 복원하고 IAM 역할을 클러스터 기본값으로 설정하려면 `aws redshift restore-from-cluster-snapshot` AWS CLI 명령을 사용합니다.

다음 AWS CLI 명령은 스냅샷에서 클러스터를 복원하고 `myrole2`를 클러스터의 기본값으로 설정합니다.

```
aws redshift restore-from-cluster-snapshot \
    --cluster-identifier mycluster-clone \
    --snapshot-identifier my-snapshot-id
    --iam-roles 'arn:aws:iam::012345678910:role/myrole1' 'arn:aws:iam::012345678910:role/myrole2' \
    --default-iam-role-arn 'arn:aws:iam::012345678910:role/myrole1'
```

다음은 코드 조각은 응답의 예입니다.

```
{
    "Cluster": {
        "ClusterIdentifier": "mycluster-clone",
        "NodeType": "dc2.large",
        "MasterUsername": "adminuser",
        "DefaultIamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
        "IamRoles": [
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole1",
                "ApplyStatus": "adding"
            },
            {
                "IamRoleArn": "arn:aws:iam::012345678910:role/myrole2",
                "ApplyStatus": "adding"
            }
        ],
        ...
    }
}
```

# 페더레이션형 ID를 사용하여 로컬 리소스 및 Amazon Redshift Spectrum 외부 테이블에 대한 Amazon Redshift 액세스 관리
<a name="authorization-fas-spectrum"></a>

`GetDatabaseCredentials`에서 제공한 보안 인증 정보와 함께 AWS에서 아이덴티티 페더레이션을 사용하면 로컬 데이터와 외부 데이터에 대한 권한 부여 및 액세스를 간소화할 수 있습니다. 이 자습서에서는 특정 IAM 역할을 사용하는 대신 AWS ID 페더레이션을 통해 리소스에 대한 액세스를 제공하는 방법을 보여 줍니다.

현재는 Amazon S3에 있는 외부 데이터에 대한 액세스 권한을 사용자에게 부여하려면 권한 정책에 정의된 권한으로 IAM 역할을 생성해야 합니다. 그러면 역할이 연결된 사용자가 외부 데이터에 액세스할 수 있습니다. 이 방법이 작동하지만 특정 사용자가 특정 열을 사용할 수 없도록 하는 것과 같은 세분화된 규칙을 제공하려는 경우 외부 스키마에서 추가 구성을 수행해야 할 수 있습니다.

`GetDatabaseCredentials`에서 제공된 자격 증명 인증 정보를 사용하는 ID 페더레이션은 지정 및 변경이 더 쉬운 세분화된 IAM 규칙을 통해 AWS Glue 및 Redshift Spectrum 리소스에 대한 액세스를 제공할 수 있습니다. 이렇게 하면 비즈니스 규칙을 준수하는 액세스를 쉽게 적용할 수 있습니다.

페더레이션형 보안 인증을 사용하면 다음과 같은 이점이 있습니다.
+ Redshift Spectrum용으로 클러스터에 연결된 IAM 역할을 관리할 필요가 없습니다.
+ 클러스터 관리자는 다양한 IAM 컨텍스트를 사용하는 소비자가 액세스할 수 있는 외부 스키마를 생성할 수 있습니다. 이는 예를 들어 여러 소비자가 한 테이블에서 동일한 외부 스키마를 쿼리하고 반환된 레코드에서 다양한 필드를 가져오는 열 필터링을 수행하는 데 유용합니다.
+ 역할뿐만 아니라 IAM 권한이 있는 사용자를 사용하여 Amazon Redshift를 쿼리할 수 있습니다.

## 페더레이션형 ID로 로그인하기 위한 ID 준비
<a name="authorization-fas-spectrum-getting-started-iam"></a>

페더레이션형 ID로 로그인하려면 먼저 몇 가지 예비 단계를 수행해야 합니다. 이 지침에서는 Amazon S3 버킷에 저장된 데이터 파일을 참조하는 기존 Redshift Spectrum 외부 스키마가 있고 해당 버킷이 Amazon Redshift 클러스터 또는 Amazon Redshift Serverless 데이터 웨어하우스와 동일한 계정에 있다고 가정합니다.

1. IAM ID를 생성합니다. 이는 사용자 또는 IAM 역할일 수 있습니다. IAM에서 지원하는 이름을 사용합니다.

1. ID에 권한 정책을 연결합니다. 다음 중 하나를 지정합니다.
   + `redshift:GetClusterCredentialsWithIAM`(Amazon Redshift에서 프로비저닝된 클러스터의 경우)
   + `redshift-serverless:GetCredentials`(Amazon Redshift Serverless의 경우)

   IAM 콘솔을 사용하여 정책 편집기로 권한을 추가할 수 있습니다.

   IAM ID에는 외부 데이터에 액세스할 수 있는 권한도 필요합니다. 다음 AWS 관리형 정책을 직접 추가하여 Amazon S3 대한 액세스 권한을 부여합니다.
   + `AmazonS3ReadOnlyAccess`
   + `AWSGlueConsoleFullAccess`

    AWS Glue를 사용하여 외부 데이터를 준비하는 경우 마지막 관리형 정책이 필요합니다. Amazon Redshift Spectrum에 대한 액세스 권한을 부여하는 단계에 대한 자세한 내용은 Amazon Redshift 및 Redshift Spectrum 시작 안내서의 일부인 [Amazon Redshift에 대한 IAM 역할 생성](https://docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum-create-role.html) 섹션을 참조하세요. Redshift Spectrum에 액세스하기 위한 IAM 정책을 추가하는 단계를 보여 줍니다.

1. Amazon Redshift에 연결하도록 SQL 클라이언트를 설정합니다. Amazon Redshift JDBC 드라이버를 사용하고 사용자의 보안 인증 정보를 도구의 보안 인증 정보 속성에 추가합니다. SQL Workbench/J와 같은 클라이언트가 이 작업에 적합합니다. 다음과 같은 클라이언트 연결 확장 속성을 설정합니다.
   + *AccessKeyID* - 액세스 키 식별자입니다.
   + *SecretAccessKey* - 비밀 액세스 키입니다. (암호화를 사용하지 않는 경우 비밀 키를 전송할 때 발생할 수 있는 보안 위험에 유의하세요.) 
   + *SessionToken* - IAM 역할용 임시 보안 인증 정보 집합입니다.
   + *groupFederation* - 프로비저닝된 클러스터의 페더레이션형 ID를 구성하는 경우 `true`로 설정합니다. Amazon Redshift Serverless를 사용하는 경우 이 파라미터를 설정하지 마세요.
   + *LogLevel* - 정수 로그 수준 값입니다. 이는 선택 사항입니다.

1. URL을 Amazon Redshift 또는 Amazon Redshift Serverless 콘솔에서 찾은 JDBC 엔드포인트로 설정합니다. URL 스키마를 *jdbc:redshift:iam:*으로 바꾸고 다음 형식을 사용합니다.
   + Amazon Redshift에서 프로비저닝된 클러스터의 형식: `jdbc:redshift:iam://<cluster_id>.<unique_suffix>.<region>.redshift.amazonaws.com:<port>/<database_name>`

     예시: `jdbc:redshift:iam://test1.12345abcdefg.us-east-1.redshift.amazonaws.com:5439/dev`
   + Amazon Redshift Serverless의 형식: `jdbc:redshift:iam://<workgroup-name>.<account-number>.<aws-region>.redshift-serverless.amazonaws.com:5439:<port>/<database_name>`

     예시: `jdbc:redshift:iam://default.123456789012.us-east-1.redshift-serverless.amazonaws.com:5439/dev`

   IAM ID를 사용하여 처음으로 데이터베이스에 연결한 후 Amazon Redshift는 접두사 `IAM:`(사용자의 경우) 또는 접두사 `IAMR:`(IAM 역할의 경우)가 붙은 동일한 이름의 Amazon Redshift ID를 자동으로 생성합니다. 이 주제의 나머지 단계에서는 사용자에 대한 예를 보여줍니다.

   Redshift 사용자가 자동으로 생성되지 않는 경우 관리자 계정으로 `IAM:<user name>` 형식의 사용자 이름을 지정해 `CREATE USER` 문을 실행하여 사용자를 생성할 수 있습니다.

1.  Amazon Redshift 클러스터 관리자로서 Redshift 사용자에게 외부 스키마에 액세스하는 데 필요한 권한을 부여합니다.

   ```
   GRANT ALL ON SCHEMA my_schema to "IAM:my_user";
   ```

   Redshift 사용자에게 외부 스키마에서 테이블을 생성할 수 있는 권한을 부여하려면 해당 사용자가 스키마 소유자여야 합니다. 예를 들면 다음과 같습니다.

   ```
   ALTER SCHEMA my_schema owner to "IAM:my_user";
   ```

1. 구성을 확인하려면 권한이 부여된 후 SQL 클라이언트를 사용하여 사용자로 쿼리를 실행합니다. 이 쿼리 샘플은 외부 테이블에서 데이터를 검색합니다.

   ```
   SELECT * FROM my_schema.my_table;
   ```

## Redshift Spectrum에 ID 및 권한 부여 전파 시작하기
<a name="authorization-fas-spectrum-getting-started"></a>

외부 테이블을 쿼리하기 위해 페더레이션형 ID를 전달하려면 `SESSION`을 `CREATE EXTERNAL SCHEMA`의 `IAM_ROLE` 쿼리 파라미터 값으로 설정합니다. 다음 단계에서는 `SESSION`을 설정하고 활용하여 외부 스키마에 대한 쿼리 권한을 부여하는 방법을 보여줍니다.

1. 로컬 테이블과 외부 테이블을 생성합니다. AWS Glue를 통해 카탈로그로 작성된 외부 테이블을 이에 사용할 수 있습니다.

1. IAM ID로 Amazon Redshift에 연결합니다. 이전 섹션에서 설명한 것처럼 ID가 Amazon Redshift에 연결되면 Redshift 데이터베이스 사용자가 생성됩니다. 사용자가 이전에 존재하지 않은 경우 생성됩니다. 사용자가 새 사용자인 경우 관리자는 Amazon Redshift에서 쿼리 및 테이블 생성과 같은 작업을 수행할 수 있는 권한을 사용자에게 부여해야 합니다.

1. 관리자 계정으로 Redshift에 연결합니다. `SESSION` 값을 사용해 명령을 실행하여 외부 스키마를 생성합니다.

   ```
   create external schema spectrum_schema from data catalog
   database '<my_external_database>' 
   region '<my_region>'
   iam_role 'SESSION'
   catalog_id '<my_catalog_id>';
   ```

   이 경우 `catalog_id`가 설정됩니다. `SESSION`이 특정 역할을 대체하기 때문에 기능에 추가된 새로운 설정입니다.

   이 예에서 쿼리의 값은 실제 값이 나타나는 방식을 모방한 것입니다.

   ```
   create external schema spectrum_schema from data catalog
   database 'spectrum_db' 
   region 'us-east-1'
   iam_role 'SESSION'
   catalog_id '123456789012'
   ```

   이 경우의 `catalog_id` 값은 AWS 계정 ID입니다.

1. 2단계에서 연결한 IAM ID를 사용해 쿼리를 실행하여 외부 데이터에 액세스합니다. 예를 들면 다음과 같습니다.

   ```
   select * from spectrum_schema.table1;
   ```

   이 경우 `table1`은 예를 들어 Amazon S3 버킷에 있는 파일의 JSON 형식 데이터일 수 있습니다.

1. 외부 데이터베이스 또는 스키마를 가리키는 클러스터 연결 IAM 역할을 사용하는 외부 스키마가 이미 있는 경우 이 단계에 설명된 대로 기존 스키마를 교체하고 페더레이션형 ID를 사용하거나 새 스키마를 생성할 수 있습니다.

`SESSION`은 페더레이션형 ID 보안 인증 정보가 외부 스키마를 쿼리하는 데 사용됨을 나타냅니다. `SESSION` 쿼리 파라미터를 사용할 때는 `catalog_id`를 설정해야 합니다. 스키마에 사용되는 데이터 카탈로그를 가리키기 때문에 필요합니다. 이전에는 `iam_role`에 할당된 값에서 `catalog_id`가 검색되었습니다. 예를 들어 외부 스키마를 쿼리할 때 페더레이션형 보안 인증 정보를 사용하여 Redshift Spectrum에 이러한 방식으로 ID 및 권한 부여를 전파하도록 설정하면 IAM 역할을 통한 권한 부여가 필요하지 않습니다.

### 사용 노트
<a name="authorization-fas-access-usage-notes"></a>

일반적인 연결 오류는 다음과 같습니다. **임시 자격 증명을 검색하는 중 IAM 오류: 제공된 언마셜러로 예외 응답을 언마셜링할 수 없음. 이 오류는 레거시 JDBC 드라이버가 있기 때문에 발생합니다. 페더레이션 ID에 필요한 최소 드라이버 버전은 2.1.0.9입니다. JDBC 드라이버는 [Amazon Redshift JDBC 드라이버, 버전 2.x 다운로드](https://docs.aws.amazon.com/redshift/latest/mgmt/jdbc20-download-driver.html)에서 다운로드할 수 있습니다.

### 추가 리소스
<a name="authorization-fas-spectrum-resources"></a>

이러한 링크는 외부 데이터에 대한 액세스를 관리하기 위한 추가 정보를 제공합니다.
+ IAM 역할을 사용하여 Redshift Spectrum 데이터에 액세스할 수 있습니다. 자세한 내용은 [Amazon Redshift가 사용자를 대신하여 AWS 서비스에 액세스할 수 있도록 권한 부여](authorizing-redshift-service.md) 섹션을 참조하세요.
+ AWS Lake Formation으로 외부 테이블에 대한 액세스를 관리할 때 페더레이션 IAM 자격 증명과 함께 Redshift Spectrum을 사용하여 쿼리할 수 있습니다. 더 이상 AWS Lake Formation에 등록된 데이터를 쿼리하기 위해 Redshift Spectrum에 대한 클러스터 연결 IAM 역할을 관리할 필요가 없습니다. 자세한 내용은 [Amazon Redshift Spectrum과 함께 AWS Lake Formation 사용](https://docs.aws.amazon.com/lake-formation/latest/dg/RSPC-lf.html) 섹션을 참조하세요.

# AWS Secrets Manager를 사용하여 Amazon Redshift 관리자 암호를 관리하는 방법
<a name="redshift-secrets-manager-integration"></a>

 Amazon Redshift는 AWS Secrets Manager와 통합하여 암호화된 보안 암호 내에서 관리자 보안 인증 정보를 생성하고 관리할 수 있습니다. AWS Secrets Manager를 사용하면 관리자 암호를 API 호출로 대체하여 필요할 때 프로그래밍 방식으로 보안 암호를 검색할 수 있습니다. 하드 코딩된 보안 인증 정보 대신 암호를 사용하면 보안 인증 정보가 노출되거나 손상될 위험이 줄어듭니다. AWS Secrets Manager에 대한 자세한 내용은 [https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)를 참조하세요.

다음 작업 중 하나를 수행할 때 Amazon Redshift가 AWS Secrets Manager를 사용하여 관리자 암호를 관리하도록 지정할 수 있습니다.
+ 프로비저닝된 클러스터 또는 서버리스 네임스페이스 생성
+ 프로비저닝된 클러스터 또는 서버리스 네임스페이스의 관리자 자격 증명 편집, 업데이트 또는 수정
+ 스냅샷에서 클러스터 또는 서버리스 네임스페이스 복원

Amazon Redshift가 AWS Secrets Manager에서 관리자 암호를 관리하도록 지정하면 Amazon Redshift 가 암호를 생성하여 Secrets Manager에 저장합니다. AWS Secrets Manager에서 직접 보안 암호에 액세스하여 관리자 사용자의 보안 인증 정보를 검색할 수 있습니다. 선택적으로, 다른 AWS 계정에서 보안 암호에 액세스해야 하는 경우 고객 관리형 키를 지정하여 보안 암호를 암호화할 수 있습니다. AWS Secrets Manager에서 제공하는 KMS 키를 사용할 수도 있습니다.

Amazon Redshift는 보안 암호 설정을 관리하고 기본적으로 30일마다 보안 암호를 교체합니다. 언제든지 보안 암호를 수동으로 교체할 수 있습니다. AWS Secrets Manager에서 보안 암호를 관리하는 프로비저닝된 클러스터 또는 서버리스 네임스페이스를 삭제하면 보안 암호와 관련 메타데이터도 삭제됩니다.

보안 암호 관리형 보안 인증 정보를 사용하여 클러스터 또는 서버리스 네임스페이스에 연결하려면 Secrets Manager 콘솔 또는 `GetSecretValue` Secrets Manager API 호출을 사용하여 AWS Secrets Manager에서 보안 암호를 검색하면 됩니다. 자세한 내용은 *AWS Secrets Manager 사용 설명서*의 [AWS Secrets Manager에서 비밀 검색](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets.html) 및 [AWS Secrets Manager 비밀에 있는 보안 인증 정보를 사용하여 SQL 데이터베이스에 연결](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_jdbc.html)을 참조하세요.

## AWS Secrets Manager 통합에 필요한 권한
<a name="redshift-secrets-manager-integration-permissions"></a>

사용자는 AWS Secrets Manager 통합과 관련된 작업을 수행하는 데 필요한 권한이 있어야 합니다. 사용자에게 필요한 지정된 리소스에서 특정 API 작업을 수행할 수 있는 권한을 부여하는 IAM 정책을 생성합니다. 그런 다음 해당 권한이 필요한 IAM 권한 세트 또는 역할에 이러한 정책을 연결합니다. 자세한 내용은 [Amazon Redshift의 Identity and Access Management](redshift-iam-authentication-access-control.md) 섹션을 참조하세요.

Amazon Redshift가 AWS Secrets Manager에서 관리자 암호를 관리하도록 지정하는 사용자는 다음 작업을 수행할 수 있는 권한이 있어야 합니다.
+ `secretsmanager:CreateSecret`
+ `secretsmanager:RotateSecret`
+ `secretsmanager:DescribeSecret`
+ `secretsmanager:UpdateSecret`
+ `secretsmanager:DeleteSecret`
+ `secretsmanager:GetRandomPassword`
+ `secretsmanager:TagResource`

프로비저닝된 클러스터의 `MasterPasswordSecretKmsKeyId` 파라미터 또는 서버리스 네임스페이스의 `AdminPasswordSecretKmsKeyId` 파라미터에 KMS 키를 전달하려는 사용자는 위에 나열된 권한 외에도 다음과 같은 권한이 필요합니다.
+ `kms:Decrypt`
+ `kms:GenerateDataKey`
+ `kms:CreateGrant`
+ `kms:RetireGrant`

## 관리자 보안 암호 교체
<a name="redshift-secrets-manager-integration-rotation"></a>

기본적으로 Amazon Redshift는 보안 인증 정보가 장기간 동일하게 유지되지 않도록 30일마다 보안 암호를 자동으로 교체합니다. Amazon Redshift가 관리자 암호 보안 암호를 교체하면 AWS Secrets Manager는 새 관리자 암호를 포함하도록 기존 보안 암호를 업데이트합니다. Amazon Redshift는 업데이트된 보안 암호의 암호와 일치하도록 클러스터의 관리자 암호를 변경합니다.

AWS Secrets Manager를 사용하여 예약된 교체 시점을 기다리지 않고 보안 암호를 즉시 교체할 수 있습니다. 보안 암호 교체에 대한 자세한 내용은 **AWS Secrets Manager 사용 설명서에서 [AWS Secrets Manager 보안 암호 교체](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets_jdbc.html)를 참조하세요.

## Amazon Redshift와 함께 AWS Secrets Manager 사용 시 고려 사항
<a name="redshift-secrets-manager-integration-considerations"></a>

 AWS Secrets Manager를 사용하여 프로비저닝된 클러스터 또는 서버리스 네임스페이스의 관리자 보안 인증 정보를 관리할 때는 다음 사항을 고려하세요.
+  관리자 보안 인증 정보가 AWS Secrets Manager에서 관리되는 클러스터를 일시 중지해도 클러스터의 보안 암호는 삭제되지 않으며 보안 암호에 대한 요금이 계속 청구됩니다. 보안 암호는 클러스터를 삭제한 경우에만 삭제됩니다.
+  Amazon Redshift가 연결된 보안 암호를 교체하려고 할 때 클러스터가 일시 중지되면 교체가 실패합니다. 이 경우 Amazon Redshift는 자동 교체를 중지하고 클러스터를 재개한 후에도 다시 교체를 시도하지 않습니다. `secretsmanager:RotateSecret`가 계속해서 보안 암호를 자동 교체하도록 하려면 AWS Secrets Manager API 호출을 사용하여 자동 교체 일정 예약을 다시 시작해야 합니다.
+  Amazon Redshift가 연결된 보안 암호를 교체하려고 할 때 서버리스 네임스페이스에 연결된 작업 그룹이 없는 경우, 교체는 실패하고 작업 그룹을 연결한 후에도 다시 교체를 시도하지 않습니다. `secretsmanager:RotateSecret`가 계속해서 보안 암호를 자동 교체하도록 하려면 AWS Secrets Manager API 호출을 사용하여 자동 교체 일정 예약을 다시 시작해야 합니다.

# Amazon Redshift에서 Amazon 리소스 이름(ARN) 보안 암호 검색
<a name="redshift-secrets-manager-integration-retrieving-secret"></a>

Amazon Redshift 콘솔을 사용하여 AWS Secrets Manager에서 관리되는 보안 암호의 Amazon 리소스 이름(ARN)을 볼 수 있습니다. 보안 암호의 ARN이 있으면 AWS Secrets Manager를 사용하여 보안 암호에 대한 세부 정보 및 보안 암호 내에 암호화된 데이터를 볼 수 있습니다. ARN을 사용하여 보안 암호를 검색하는 방법에 대한 자세한 내용은 **AWS Secrets Manager 사용 설명서에서 [보안 암호 가져오기](https://docs.aws.amazon.com/secretsmanager/latest/userguide/retrieving-secrets.html)를 참조하세요.

**Amazon Redshift 프로비저닝 클러스터의 보안 암호에 대한 세부 정보 보기**  
Amazon Redshift 콘솔을 사용하여 다음 절차에 따라 클러스터에 대한 보안 암호의 Amazon 리소스 이름(ARN)을 확인합니다.  

1. AWS Management Console에 로그인하고 Amazon Redshift 콘솔을 엽니다.

1. **클러스터 개요** 창에서 보안 암호를 보려는 클러스터를 선택합니다.

1. **속성** 탭을 선택합니다.

1. **관리자 보안 인증 정보 ARN**에서 보안 암호의 ARN을 확인합니다. 이 ARN은 보안 암호의 식별자이며, AWS Secrets Manager에서 보안 암호의 세부 정보를 보는 데 사용할 수 있습니다.

**Amazon Redshift Serverless 네임스페이스의 보안 암호에 대한 세부 정보 보기**  
Amazon Redshift 콘솔을 사용하여 다음 절차에 따라 서버리스 네임스페이스에 대한 보안 암호의 Amazon 리소스 이름(ARN)을 확인합니다.  

1. AWS Management Console에 로그인하고 Amazon Redshift 콘솔을 엽니다.

1. **프로비저닝된 클러스터** 대시보드에서 페이지 오른쪽 상단의 **Serverless로 이동**을 선택합니다.

1. **Serverless 대시보드**에서 **네임스페이스 / 작업 그룹** 창으로 스크롤하여 보안 암호를 보려는 네임스페이스를 선택합니다.

1. **일반 정보** 창의 **관리자 보안 인증 정보 ARN**에서 보안 암호의 ARN을 확인합니다. 이 ARN은 보안 암호의 식별자이며, AWS Secrets Manager에서 보안 암호의 세부 정보를 보는 데 사용할 수 있습니다.

# 데이터베이스 연결 자격 증명을 위한 보안 암호 생성
<a name="redshift-secrets-manager-integration-create"></a>

Secrets Manager 보안 암호를 생성하여 Amazon Redshift 프로비저닝된 클러스터 또는 Redshift Serverless 네임스페이스 및 작업 그룹에 연결하는 데 사용되는 자격 증명을 저장할 수 있습니다. 이 보안 암호는 Amazon Redshift 쿼리 에디터 v2에서 쿼리를 예약할 때도 사용할 수 있습니다.

**Secrets Manager 콘솔을 사용하여 Amazon Redshift 프로비저닝된 클러스터의 데이터베이스에 대한 보안 암호를 생성하려면**

1. [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)에서 Secrets Manager 콘솔을 엽니다.

1. **보안 암호** 목록으로 이동한 다음 **새 보안 암호 저장**을 선택합니다.

1. **Amazon Redshift 데이터 웨어하우스에 대한 자격 증명**을 선택합니다. 보안 암호를 생성하는 단계에서 다음과 같이 정보를 입력합니다.
   + **사용자 이름** **자격 증명**에 데이터 웨어하우스의 관리 사용자 이름을 입력합니다.
   + **암호** **자격 증명**에 **사용자 이름**의 암호를 입력합니다.
   + **암호화 키**에서 암호화 키를 선택합니다.
   + **데이터 웨어하우스**에서 데이터가 포함된 Amazon Redshift 프로비저닝된 클러스터를 선택합니다.
   + **보안 암호 이름**에 보안 암호 이름을 입력합니다.
   + **설명**에 보안 암호의 설명을 입력합니다.
   + **태그**에 **Redshift** 단어가 포함된 **태그 키**를 입력합니다. 이 태그 키는 Amazon Redshift 쿼리 에디터 v2를 사용하여 데이터 웨어하우스에 연결하려고 할 때 보안 암호를 나열하는 데 필요합니다. 보안 암호에 **Redshift** 문자열로 시작하는 태그 키가 있어야만 보안 암호가 관리 콘솔의 AWS Secrets Manager에 나열됩니다.

1. **검토** 단계에서 변경 내용을 **저장**할 때까지 여러 화면을 통해 보안 암호에 대한 정보를 계속 입력합니다.

   자격 증명, 엔진, 호스트, 포트 및 클러스터 식별자의 특정 값이 보안 암호에 저장됩니다. 또한 태그 키 `Redshift`를 사용하여 보안 암호에 태그가 지정됩니다.

**Redshift Serverless 콘솔을 사용하여 Redshift Serverless 네임스페이스에서 데이터베이스의 보안 암호를 생성하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. **Redshift Serverless**를 선택하고 **네임스페이스 구성**으로 이동합니다.

1. 보안 암호 자격 증명을 생성할 네임스페이스를 선택합니다.

1. **작업**, **관리자 자격 증명 편집**을 엽니다.

1. **관리자 암호**에서 **AWS Secrets Manager에서 관리자 자격 증명 관리**를 선택합니다.

1. 변경 사항을 저장하려면 **변경 사항 저장**을 선택합니다.

암호가 성공적으로 변경되었다는 메시지가 나타나는지 확인합니다. Secrets Manager 콘솔에서도 보안 암호를 볼 수 있습니다. 이 보안 암호를 사용하면 AWS Secrets Manager 연결 방법을 사용하여 Redshift Serverless 콘솔 및 Amazon Redshift 쿼리 에디터 v2에 있는 작업 그룹의 데이터베이스에 연결할 수 있습니다. 보안 암호에 'Redshift' 문자열로 시작하는 태그 키가 있어야만 쿼리 에디터 v2 웹 애플리케이션에 나열됩니다. 보안 암호에 **Redshift** 문자열로 시작하는 태그 키가 있어야만 보안 암호가 관리 콘솔의 AWS Secrets Manager에 나열됩니다.

**Secrets Manager 콘솔을 사용하여 Redshift Serverless 네임스페이스에서 데이터베이스의 보안 암호를 생성하려면**

1. [https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)에서 Secrets Manager 콘솔을 엽니다.

1. **보안 암호** 목록으로 이동한 다음 **새 보안 암호 저장**을 선택합니다.

1. **Amazon Redshift 데이터 웨어하우스에 대한 자격 증명**을 선택합니다. 보안 암호를 생성하는 단계에서 다음과 같이 정보를 입력합니다.
   + **사용자 이름** **자격 증명**에 데이터 웨어하우스의 관리 사용자 이름을 입력합니다.
   + **암호** **자격 증명**에 **사용자 이름**의 암호를 입력합니다.
   + **암호화 키**에서 암호화 키를 선택합니다.
   + **데이터 웨어하우스**에서 데이터가 포함된 Redshift Serverless 네임스페이스를 선택합니다.
   + **보안 암호 이름**에 보안 암호 이름을 입력합니다.
   + **설명**에 보안 암호의 설명을 입력합니다.
   + **태그**에 **Redshift** 단어가 포함된 **태그 키**를 입력합니다. 이 태그 키는 Amazon Redshift 쿼리 에디터 v2를 사용하여 데이터 웨어하우스에 연결하려고 할 때 보안 암호를 나열하는 데 필요합니다. 보안 암호에 **Redshift** 문자열로 시작하는 태그 키가 있어야만 보안 암호가 관리 콘솔의 AWS Secrets Manager에 나열됩니다.

1. **검토** 단계에서 변경 내용을 **저장**할 때까지 여러 화면을 통해 보안 암호에 대한 정보를 계속 입력합니다.

   자격 증명, 데이터베이스 이름, 호스트, 포트, 네임스페이스 및 엔진의 특정 값이 보안 암호에 저장됩니다. 또한 태그 키 `Redshift`를 사용하여 보안 암호에 태그가 지정됩니다.

**AWS CLI를 사용하여 Redshift Serverless 네임스페이스에서 데이터베이스의 보안 암호를 생성하려면**

AWS CLI를 사용하여 보안 암호를 생성할 수 있습니다. 한 가지 방법은 AWS CloudShell을 사용하여 다음과 같이 Secrets Manager AWS CLI 명령을 실행하는 것입니다. 다음 절차에 표시된 AWS CLI 명령을 실행하려면 적절한 권한이 있어야 합니다.

1. AWS 콘솔에서 AWS CloudShell 명령 프롬프트를 엽니다. AWS CloudShell에 대한 자세한 내용은 **AWS CloudShell 사용 설명서에서 [AWS CloudShell이란 무엇인가요](https://docs.aws.amazon.com/cloudshell/latest/userguide/welcome.html)를 참조하세요.

1. 예를 들어 보안 암호가 `MyTestSecret`인 경우, 데이터베이스에 연결하거나 Amazon Redshift 쿼리 에디터 v2 쿼리를 예약하는 데 사용되는 보안 암호를 저장하는 Secrets Manager 명령을 입력합니다. 명령에서 다음 값을 해당 환경의 값으로 바꿉니다.
   + *admin*은 데이터 웨어하우스의 관리 사용자 이름입니다.
   + *passw0rd*는 관리자의 암호입니다.
   + *dev*는 데이터 웨어하우스의 초기 데이터베이스 이름입니다.
   + *region*은 데이터 웨어하우스가 포함된 AWS 리전입니다. 예: `us-east-1`.
   + *123456789012*는 AWS 계정입니다.
   + *namespace-id*는 `c3928f0e-c889-4d2b-97a5-5738324d5d3e`와 비슷한 네임스페이스 식별자입니다. 이 식별자는 Amazon Redshift 콘솔의 서버리스 네임스페이스 세부 정보 페이지에서 찾을 수 있습니다.

   ```
   aws secretsmanager create-secret \
   --name MyTestSecret \
   --description "My test secret created with the CLI." \
   --secret-string "{\"username\":\"admin\",\"password\":\"passw0rd\",\"dbname\":\"dev\",\"engine\":\"redshift\"}" \
   --tags "[{\"Key\":\"redshift-serverless:namespaceArn\",\"Value\":\"arn:aws:redshift-serverless:region:123456789012:namespace/namespace-id\"}]"
   ```

# Amazon Redshift의 로깅 및 모니터링
<a name="security-incident-response"></a>

모니터링은 Amazon Redshift와 AWS 솔루션의 안정성, 가용성 및 성능을 유지하는 데 중요한 부분입니다. 다중 지점 실패가 발생할 경우 보다 쉽게 디버깅할 수 있도록 AWS 솔루션의 모든 부분으로부터 모니터링 데이터를 수집할 수 있습니다. AWS는 Amazon Redshift 리소스를 모니터링하고 잠재적 인시던트에 대응하기 위한 여러 도구를 제공합니다.

**Amazon CloudWatch 경보**  
Amazon CloudWatch 경보를 사용하면 지정한 기간 동안 단일 지표를 감시합니다. 지표가 지정된 임계값을 초과하면 Amazon SNS 주제 또는 AWS Auto Scaling 정책으로 알림이 전송됩니다. CloudWatch 경보는 단순히 특정 상태에 있다고 해서 작업을 호출하지 않습니다. 대신, 상태가 변경되어 지정된 기간 동안 유지되어야 합니다. 자세한 내용은 [경보 생성](performance-metrics-alarms.md) 섹션을 참조하세요. 지표 목록은 [Amazon Redshift의 성능 데이터](metrics-listing.md) 단원을 참조하십시오.

**AWS CloudTrail 로그**  
CloudTrail은 Amazon Redshift에서 사용자, IAM 역할 또는 AWS 서비스가 수행한 API 작업에 대한 레코드를 제공합니다. CloudTrail에서 수집한 정보를 사용하여 Amazon Redshift에 수행된 요청, 요청이 수행된 IP 주소, 요청을 수행한 사람, 요청이 수행된 시간 및 추가 세부 정보를 확인할 수 있습니다. 자세한 내용은 [CloudTrail을 사용하여 로깅](logging-with-cloudtrail.md) 섹션을 참조하세요.

# 데이터베이스 감사 로깅
<a name="db-auditing"></a>

Amazon Redshift는 연결 및 사용자 작업에 대한 정보를 데이터베이스에 기록합니다. 이렇게 기록되는 로그는 보안 및 문제 해결을 목적으로 데이터베이스를 모니터링하는 데 효과적입니다. 이러한 프로세스를 *데이터베이스 감사*라고 합니다. 로그는 다음 위치에 저장할 수 있습니다.
+ *Amazon S3 버킷* - 데이터베이스의 모니터링 작업을 담당하는 사용자를 위해 데이터 보안 기능으로 편리하게 액세스할 수 있습니다.
+ *Amazon CloudWatch* - 시각화 기능 및 설정 작업과 같은 CloudWatch에 내장된 기능을 사용하여 감사 로깅 데이터를 볼 수 있습니다.

**참고**  
[SYS\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_CONNECTION_LOG.html)는 Amazon Redshift Serverless에 대한 연결 로그 데이터를 수집합니다.  Amazon Redshift Serverless에 대한 감사 로깅 데이터를 수집할 때는 로그 파일로 전송할 수 없으며 CloudWatch로만 전송할 수 있다는 점에 유의하세요.

**Topics**
+ [

## Amazon Redshift 로그
](#db-auditing-logs)
+ [

## 감사 로그 및 Amazon CloudWatch
](#db-auditing-cloudwatch-provisioned)
+ [

# 감사 로깅 활성화
](db-auditing-console.md)
+ [

# 보안 로깅
](db-auditing-secure-logging.md)

## Amazon Redshift 로그
<a name="db-auditing-logs"></a>

Amazon Redshift는 다음 로그 파일에 정보를 로그합니다.
+ *연결 로그(Connection log)* - 인증 시도 횟수와 연결 및 연결 해제 정보를 로그합니다.
+ *사용자 로그(User log)* - 데이터베이스 사용자 정의 변경 사항에 대한 정보를 로그합니다.
+ *사용자 작업 로그(User activity log)* - 데이터베이스에서 실행하기 전에 각 쿼리를 로그합니다.

연결 및 사용자 로그는 주로 보안 목적으로 사용하기 좋습니다. 연결 로그를 사용하여 데이터베이스에 연결 중인 사용자에 대한 정보와 관련 연결 정보를 모니터링할 수 있습니다. 이 정보는 IP 주소, 요청한 시기, 사용한 인증 유형 등이 될 수 있습니다. 그리고 사용자 로그는 데이터베이스 사용자의 정의 변경 여부를 모니터링하는 데 사용됩니다.

사용자 작업 로그는 주로 문제 해결 목적으로 사용하기 좋습니다. 이 로그는 사용자와 시스템 모두 데이터베이스에서 실행하는 쿼리 유형에 대한 정보를 추적합니다.

연결 로그와 사용자 로그는 모두 데이터베이스의 시스템 테이블에 저장되는 정보와 일치합니다. 따라서 시스템 테이블을 사용해 동일한 정보를 얻을 수도 있지만 로그 파일이 가져오거나 살펴보는 데 더욱 간단한 메커니즘을 가지고 있습니다. 로그 파일은 데이터베이스 권한이 아닌 Amazon S3 권한을 이용하여 테이블에 대한 쿼리를 실행합니다. 또한 시스템 테이블에 대해 쿼리를 실행하기보다는 로그 파일의 정보를 확인하여 데이터베이스에 미치는 영향을 최소화합니다.

**참고**  
로그 파일은 시스템 로그 테이블인 [STL\$1USERLOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_USERLOG.html) 및 [STL\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_CONNECTION_LOG.html)만큼 최신 상태가 아닙니다. 최신 레코드를 제외하고 이보다 오래된 레코드를 로그 파일에 복사하였습니다.

**참고**  
Amazon Redshift Serverless의 경우 [SYS\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_CONNECTION_LOG.html)는 연결 로그 데이터를 수집합니다. Amazon Redshift Serverless에 대한 감사 로깅 데이터를 수집할 때는 로그 파일로 전송할 수 없으며 CloudWatch로만 전송할 수 있다는 점에 유의하세요.

### 연결 로그
<a name="db-auditing-connection-log"></a>

인증 시도 횟수와 연결 및 차단 정보를 기록합니다. 다음 표는 연결 로그에 기록되는 정보를 설명한 것입니다. 이러한 필드에 대한 자세한 내용은 *Amazon Redshift 데이터베이스 개발자 안내서*의 [STL\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_CONNECTION_LOG.html)를 참조하세요. 수집된 Amazon Redshift Serverless의 연결 로그 데이터에 대한 자세한 내용은 [SYS\$1CONNECTION\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_CONNECTION_LOG.html)를 참조하세요.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/db-auditing.html)

### 사용자 로그
<a name="db-auditing-user-log"></a>

 다음과 같이 데이터베이스 사용자의 변경 사항에 대한 세부 정보를 기록합니다.
+ 사용자 생성
+ 사용자 삭제
+ 사용자 변경(이름 변경)
+ 사용자 변경(속성 변경)

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/db-auditing.html)

사용자 변경 사항에 대한 추가 정보를 찾으려면 [SYS\$1USERLOG](https://docs.aws.amazon.com/redshift/latest/dg/SYS_USERLOG.html) 시스템 뷰를 쿼리합니다. 이 뷰에는 Amazon Redshift Serverless의 로그 데이터가 포함되어 있습니다.

### 사용자 작업 로그
<a name="db-auditing-user-activity-log"></a>

데이터베이스에서 실행하기 전에 각 쿼리를 기록합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/db-auditing.html)

## 감사 로그 및 Amazon CloudWatch
<a name="db-auditing-cloudwatch-provisioned"></a>

 Amazon Redshift에서는 감사 로깅이 기본적으로 설정되어 있지 않습니다. 클러스터에서 로깅을 설정하면 Amazon Redshift가 로그를 생성한 후 Amazon S3으로 업로드합니다. 이 로그는 감사 로깅이 사용된 시점부터 현재까지 데이터를 로그에 수집합니다. 각 로깅 업데이트는 이전 로그의 연속입니다.

CloudWatch 또는 Amazon S3에 업로드되는 감사 로깅은 수동 프로세스(옵션)입니다. 시스템 테이블로 업로드되는 로깅은 옵션이 아니며 자동으로 실행됩니다. 시스템 테이블에 로깅에 대한 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서의 [시스템 테이블 참조](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_system-tables.html)를 참조하세요.

연결 로그, 사용자 로그 및 사용자 작업 로그는 모두 AWS Management Console, Amazon Redshift API Reference 또는 AWS Command Line Interface(AWS CLI)에서 사용됩니다. 사용자 작업 로그의 경우에는 `enable_user_activity_logging` 데이터베이스 파라미터도 활성화해야 합니다. 연결된 파라미터를 제외하고 감사 로깅 기능만 활성화하면 데이터베이스 감사 로그가 사용자 작업 로그를 제외한 연결 로그와 사용자 로그 정보만 기록합니다. `enable_user_activity_logging` 파라미터는 기본적으로 활성화되어 있지 않습니다(`false`). `true`로 설정하여 사용자 활동 로그를 활성화하도록 할 수 있습니다. 자세한 내용은 [Amazon Redshift 파라미터 그룹](working-with-parameter-groups.md) 섹션을 참조하세요.

CloudWatch에 대한 로깅을 활성화하면 Amazon Redshift가 클러스터 연결, 사용자 및 사용자 활동 로그 데이터를 Amazon CloudWatch Logs 로그 그룹으로 내보냅니다. 스키마 측면에서 로그 데이터는 변경되지 않습니다. CloudWatch는 애플리케이션 모니터링을 위해 구축되었으며, 이를 사용하여 실시간 분석을 수행하거나 조치를 취하도록 설정할 수 있습니다. Amazon CloudWatch Logs를 사용하여 내구성이 우수한 스토리지에 로그 레코드를 저장할 수 있습니다.

Amazon S3 로그 파일을 저장하는 대신 CloudWatch를 사용하여 로그를 보는 것이 좋습니다. 구성이 많이 필요하지 않으며 모니터링 요구 사항에 맞을 수 있습니다. 특히 이미 다른 서비스 및 애플리케이션을 모니터링하는 데 사용하는 경우 더욱 그렇습니다.

### Amazon CloudWatch Logs의 로그 그룹 및 로그 이벤트
<a name="db-auditing-cloudwatch-provisioned-log-group"></a>

내보낼 Amazon Redshift 로그를 선택한 후 Amazon CloudWatch Logs에서 로그 이벤트를 모니터링할 수 있습니다. 다음 접두사 아래에 Amazon Redshift Serverless에 대한 새 로그 그룹이 자동으로 생성됩니다. 여기서 `log_type`은 로그 유형을 나타냅니다.

```
/aws/redshift/cluster/<cluster_name>/<log_type>
```

예를 들어 연결 로그 내보내기를 선택하면 로그 데이터는 다음 로그 그룹에 저장됩니다.

```
/aws/redshift/cluster/cluster1/connectionlog
```

로그 이벤트는 로그 스트림을 사용하여 로그 그룹으로 내보내집니다. 서버리스 엔드포인트에 대한 로그 이벤트 내에서 정보를 검색하려면 CloudWatch Logs 콘솔, AWS CLI 또는 Amazon CloudWatch Logs API를 사용합니다. 로그 데이터 검색 및 필터링에 대한 자세한 내용은 [필터를 사용하여 로그 이벤트에서 지표 생성](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html)을 참조하세요.

CloudWatch에서는 세분성과 유연성을 제공하는 쿼리 구문을 사용하여 로그 데이터를 검색할 수 있습니다. 자세한 내용은 [CloudWatch Logs Insights 쿼리 구문](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html)을 참조하세요.

### Amazon CloudWatch 감사 로깅으로 마이그레이션
<a name="db-auditing-cloudwatch-provisioned-migration"></a>

Amazon S3으로 로그를 전송하고 구성을 변경하는 경우(예: 로그를 CloudWatch로 전송하도록 변경) Amazon S3에 남아 있는 로그는 영향을 받지 않습니다. 로그 데이터가 있는 Amazon S3 버킷에서 계속 쿼리할 수 있습니다.

### Amazon S3의 로그 파일
<a name="db-auditing-manage-log-files"></a>

Amazon S3에서 Amazon Redshift 로그 파일의 수와 크기는 클러스터의 작업에 커다란 영향을 미칩니다. 다수의 로그를 생성하는 활성 클러스터가 하나 있다고 가정할 때 Amazon Redshift가 더욱 빈번하게 로그 파일을 생성할 수 있습니다. 같은 시간에 다수의 연결 로그가 만들어지는 등 동일한 유형의 작업에 대한 로그 파일이 연이어 생성되기도 합니다.

Amazon Redshift가 Amazon S3을 사용하여 로그를 저장하면 Amazon S3에서 사용하는 스토리지에 대한 요금이 발생합니다. Amazon S3에 대한 로깅을 구성하기 전에 로그 파일을 저장하는 데 걸리는 시간을 계획해야 합니다. 이 과정에서 감사 요구에 따라 로그 파일을 삭제하거나 보관할 수 있는 시기를 결정합니다. 저장 기간에 대한 계획은 규정 준수 또는 규제 요건에 관한 데이터처럼 저장하는 데이터 유형에 따라 크게 달라집니다. Amazon S3 요금에 대한 자세한 내용은 [Amazon Simple Storage Service(S3) 요금](https://aws.amazon.com/s3/pricing/)을 참조하세요.

#### Amazon S3에 로깅을 활성화할 때의 제한
<a name="db-auditing-enable-logging-limitations"></a>

감사 로깅은 다음과 같은 제약이 있습니다.
+ Amazon S3 관리형 키(SSE-S3) 암호화(AES-256)만 사용할 수 있습니다.
+ Amazon S3 버킷에 S3 객체 잠금 기능이 해제되어 있어야 합니다.

#### Amazon Redshift 감사 로깅을 위한 버킷 권한
<a name="db-auditing-bucket-permissions"></a>

Amazon S3에 대한 로깅을 설정하면 Amazon Redshift가 로깅 정보를 수집한 후 Amazon S3에 저장된 로그 파일로 업로드합니다. 기존 버킷이나 새 버킷을 사용할 수 있습니다. Amazon Redshift에는 버킷에 대한 다음 IAM 권한이 필요합니다.
+ `s3:GetBucketAcl` 이 서비스는 버킷 소유자 식별을 위해 Amazon S3 버킷에 대한 읽기 권한이 필요합니다.
+ `s3:PutObject` 이 서비스는 로그 업로드를 위해 객체 업로드 권한이 필요합니다. 또한 로깅을 사용하는 사용자 또는 IAM 역할에 Amazon S3 버킷에 대한 `s3:PutObject` 권한이 있어야 합니다. 로그가 업로드될 때마다 서비스는 현재 버킷 소유자가 로깅 활성화 시점의 버킷 소유자와 일치하는지 확인합니다. 이러한 소유자가 일치하지 않으면 오류가 발생합니다.

감사 로깅을 사용하도록 설정할 때 새 버킷을 생성하는 옵션을 선택하면 버킷에 올바른 권한이 적용됩니다. 하지만 Amazon S3에서 고유한 버킷을 생성하거나 기존 버킷을 사용하는 경우에는 버킷 이름을 포함하는 버킷 정책을 추가해야 합니다. 로그는 서비스 보안 주체 자격 증명을 사용하여 전달됩니다. 대부분의 AWS 리전의 경우 Redshift 서비스 보안 주체 이름인 *redshift.amazonaws.com*을 추가합니다.

버킷 정책은 다음 형식을 사용합니다. *ServiceName*과 *BucketName*은 값의 자리 표시자입니다. 또한 버킷 정책에서 연결된 작업 및 리소스를 지정합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Put bucket policy needed for audit logging",
            "Effect": "Allow",
            "Principal": {
                "Service": "ServiceName"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetBucketAcl"
            ],
            "Resource": [
                "arn:aws:s3:::BucketName",
                "arn:aws:s3:::BucketName/*"
            ]
        }
    ]
}
```

------

다음 예는 미국 동부(버지니아 북부) 리전과 `AuditLogs`라는 버킷에 대한 버킷 정책입니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Put bucket policy needed for audit logging",
            "Effect": "Allow",
            "Principal": {
                "Service": "redshift.amazonaws.com"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetBucketAcl"
            ],
            "Resource": [
                "arn:aws:s3:::AuditLogs",
                "arn:aws:s3:::AuditLogs/*"
            ]
        }
    ]
}
```

------

기본적으로 사용되지 않는 리전('옵트인' 리전이라고도 함)에는 리전별 서비스 보안 주체 이름이 필요합니다. 이러한 경우 서비스 보안 주체 이름에는 `redshift.region.amazonaws.com` 형식으로 리전이 포함됩니다. 아시아 태평양(홍콩) 리전의 *redshift.ap-east-1.amazonaws.com*을 예로 들 수 있습니다. 기본적으로 활성화되어 있지 않은 리전의 목록은 *AWS 일반 참조*의 [AWS 리전 관리](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)를 참조하세요.

**참고**  
리전별 서비스 보안 주체 이름은 클러스터가 위치한 리전과 일치합니다.

##### 로그 파일에 대한 모범 사례
<a name="db-auditing-bucket-permissions-confused-deputy"></a>

 Redshift가 Amazon S3에 로그 파일을 업로드할 때 대용량 파일을 부분적으로 업로드할 수 있습니다. 멀티파트 업로드에 실패하면 파일의 일부가 Amazon S3 버킷에 남아 있을 수 있습니다. 이로 인해 추가 스토리지 비용이 발생할 수 있으므로 멀티파트 업로드가 실패할 때 어떤 일이 발생하는지 이해하는 것이 중요합니다. 감사 로그의 멀티파트 업로드에 대한 자세한 설명은 [멀티파트 업로드를 사용하여 객체 업로드 및 복사](https://docs.aws.amazon.com/AmazonS3/latest/userguide/mpuoverview.html)와 [멀티파트 업로드 중단](https://docs.aws.amazon.com/AmazonS3/latest/userguide/abort-mpu.html)을 참조하세요.

S3 버킷 생성 및 버킷 정책 추가에 대한 자세한 내용은 *Amazon Simple Storage Service 사용 설명서*의 [범용 버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) 및 [Amazon S3의 버킷 정책](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)을 참조하세요.

#### Amazon Redshift 감사 로깅을 위한 버킷 구조
<a name="db-auditing-bucket-structure"></a>

기본적으로 Amazon Redshift는 다음 버킷 및 객체 구조를 사용하여 Amazon S3 버킷의 로그 파일을 구성합니다. `` 

`AWSLogs/AccountID/ServiceName/Region/Year/Month/Day/AccountID_ServiceName_Region_ClusterName_LogType_Timestamp.gz` 

`AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz`를 예로 들 수 있습니다.

 Amazon S3 키 접두사를 제공하는 경우 접두사를 키 시작 부분에 넣습니다.

예를 들어 접두사로 myprefix를 지정한다면 다음과 같습니다. `myprefix/AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz` 

Amazon S3 키 접두사는 512자를 초과할 수 없습니다. 또한 공백( ), 큰 따옴표("), 작은 따옴표('), 백슬래시(\$1)가 포함되어서도 안 됩니다. 허용되지 않는 특수 문자와 제어 문자도 다수 있습니다. 이러한 문자의 16진수 코드는 다음과 같습니다.
+ x00\$1x20
+ x22
+ x27
+ x5c
+ x7f 이상

### Amazon S3에서 감사 로깅 고려 사항
<a name="db-auditing-failures"></a>

 Amazon Redshift 감사 로깅은 다음과 같은 이유로 중단될 수 있습니다.
+  Amazon Redshift에는 Amazon S3 버킷에 로그를 업로드할 권한이 없습니다. 버킷이 올바른 IAM 정책으로 구성되었는지 확인합니다. 자세한 내용은 [Amazon Redshift 감사 로깅을 위한 버킷 권한](#db-auditing-bucket-permissions) 섹션을 참조하세요.
+  버킷 소유자가 변경된 경우. Amazon Redshift가 로그를 업로드할 때는 버킷 소유자가 로깅 사용 시점의 소유자와 동일한지 확인합니다. 버킷 소유자가 바뀐 경우에는 감사 로깅에 사용할 버킷이 다른 것으로 구성될 때까지 Amazon Redshift가 로그를 업로드하지 못합니다.
+  버킷을 찾을 수 없는 경우. Amazon S3에서 버킷이 삭제되면 Amazon Redshift가 로그를 업로드할 수 없습니다. 이때 버킷을 다시 생성하거나, Amazon Redshift를 구성하여 로그를 다른 버킷으로 업로드해야 합니다.

### AWS CloudTrail을 사용한 API 직접 호출
<a name="rs-db-auditing-cloud-trail"></a>

Amazon Redshift는 Amazon Redshift에서 사용자, 역할 또는 AWS 서비스가 수행한 작업에 대한 레코드를 제공하는 서비스인 AWS CloudTrail과 통합됩니다. CloudTrail은 Amazon Redshift에 대한 모든 API 호출을 이벤트로 캡처합니다. Amazon Redshift와 AWS CloudTrail 통합에 대한 자세한 내용은 [CloudTrail을 사용한 로깅](https://docs.aws.amazon.com/redshift/latest/mgmt/logging-with-cloudtrail.html)을 참조하십시오.

CloudTrail은 Amazon Redshift 데이터베이스 감사 로깅과 별도로 또는 추가로 사용할 수 있습니다.

CloudTrail에 대한 자세한 내용은 [AWS CloudTrail 사용 설명서](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)를 참조하세요.

# 감사 로깅 활성화
<a name="db-auditing-console"></a>

감사 로그 데이터를 내보내도록 Amazon Redshift Redshift를 구성합니다. 로그는 CloudWatch로 내보내거나 Amazon S3 버킷에 파일로 내보낼 수 있습니다.

## 콘솔을 사용한 감사 로깅 활성화
<a name="enable-auditing-logging-task"></a>

### 콘솔 단계
<a name="cluster-audit-logging"></a>

**클러스터에 대한 감사 로깅을 활성화하려면**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/redshiftv2/](https://console.aws.amazon.com/redshiftv2/)에서 Amazon Redshift 콘솔을 엽니다.

1. 탐색 메뉴에서 **클러스터(Clusters)**를 선택한 후 업그레이드할 클러스터를 선택합니다.

1. **속성** 탭을 선택합니다. **데이터베이스 구성(Database configurations)** 패널에서 **편집(Edit)**을 선택한 다음 **감사 로깅 편집(Edit audit logging)**을 선택합니다.

1. **감사 로깅 편집(Edit audit logging)** 페이지에서 **설정(Turn on)**을 선택하고 **S3 버킷(S3 bucket)** 또는 **CloudWatch**를 선택합니다. 관리가 쉽고 데이터 시각화에 유용한 기능이 있으므로 CloudWatch를 사용하는 것이 좋습니다.

1. 내보낼 로그를 선택합니다.

1. 선택 사항을 저장하려면 **변경 사항 저장(Save changes)**을 선택합니다.

# 보안 로깅
<a name="db-auditing-secure-logging"></a>

Amazon Redshift가 하나 이상의 AWS Glue Data Catalog 뷰를 참조하는 쿼리를 로깅하는 경우, Amazon Redshift는 해당 쿼리에 대한 메타데이터를 로깅할 때 특정 시스템 테이블 및 뷰 열의 필드를 자동으로 마스킹합니다.

보안 로그 마스킹은 마스킹 조건에 맞는 쿼리를 실행하는 동안 Amazon Redshift가 생성하는 모든 시스템 테이블 및 뷰 항목에 적용됩니다. 다음 표에는 텍스트를 `******`로, 숫자를 `-1`로 마스킹하여 보안 로깅이 적용된 시스템 뷰와 열이 나와 있습니다. 텍스트를 마스킹하는 데 사용되는 별표의 수는 원본 텍스트의 문자 수와 일치하며 최대 6자입니다. 6자를 초과하는 문자열은 6개의 별표로 표시됩니다.


****  

| 시스템 테이블 | 중요한 열 | 
| --- | --- | 
| [SYS\$1EXTERNAL\$1QUERY\$1DETAIL](https://docs.aws.amazon.com/redshift/latest/dg/SYS_EXTERNAL_QUERY_DETAIL.html) | **열:** source\$1type, total\$1partitions, qualified\$1partitions, scanned\$1files, returned\$1rows, returned\$1bytes, file\$1format, file\$1location, external\$1query\$1text, warning\$1message | 
| [SYS\$1EXTERNAL\$1QUERY\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/SYS_EXTERNAL_QUERY_ERROR.html) | **열:** file\$1location, rowid, column\$1name, original\$1value, modified\$1value, trigger, action, action\$1value, error\$1code | 
| [SYS\$1QUERY\$1DETAIL](https://docs.aws.amazon.com/redshift/latest/dg/SYS_QUERY_DETAIL.html) | **열:** step\$1id, step\$1name, table\$1id, table\$1name, input\$1bytes, input\$1rows, output\$1bytes, output\$1rows, blocks\$1read, blocks\$1write, local\$1read\$1IO, remote\$1read\$1IO, spilled\$1block\$1local\$1disk, spilled\$1block\$1remote\$1disk, step\$1attribute | 
| [SYS\$1QUERY\$1HISTORY](https://docs.aws.amazon.com/redshift/latest/dg/SYS_QUERY_HISTORY.html) | **열:** returned\$1rows, returned\$1bytes | 
| [STL\$1AGGR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_AGGR.html) | **열**: rows, bytes, tbl, type | 
| [STL\$1BCAST](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_BCAST.html) | **열:** rows, bytes, packets | 
| [STL\$1DDLTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_DDLTEXT.html) | **열:** label, text | 
| [STL\$1DELETE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_DELETE.html) | **열:** rows, tbl | 
| [STL\$1DIST](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_DIST.html) | **열:** rows, bytes, packets | 
| [STL\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_ERROR.html) | **열:** file, linenum, context, error | 
| [STL\$1EXPLAIN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_EXPLAIN.html) | **열:** plannode, info | 
| [STL\$1FILE\$1SCAN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_FILE_SCAN.html) | **열:** name, line, bytes | 
| [STL\$1HASH](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_HASH.html) | **열:** rows, bytes, tbl, est\$1rows | 
| [STL\$1HASHJOIN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_HASHJOIN.html) | **열:** rows, tbl, num\$1parts, join\$1type | 
| [STL\$1INSERT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_INSERT.html) | **열:** rows, tbl | 
| [STL\$1LIMIT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_LIMIT.html) | **열:** rows | 
| [STL\$1MERGE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_MERGE.html) | **열:** rows | 
| [STL\$1MERGEJOIN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_MERGEJOIN.html) | **열:** rows, tbl | 
| [STL\$1NESTLOOP](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_NESTLOOP.html) | **열:** rows, tbl | 
| [STL\$1PARSE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_PARSE.html) | **열:** rows | 
| [STL\$1PLAN\$1INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_PLAN_INFO.html) | **열:** startupcost, totalcost, rows, bytes | 
| [STL\$1PROJECT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_PROJECT.html) | **열:** rows, tbl | 
| [STL\$1QUERY](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_QUERY.html) | **열:** querytxt | 
| [STL\$1QUERY\$1METRICS](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_QUERY_METRICS.html) | **열:** max\$1rows, rows, max\$1blocks\$1read, blocks\$1read, max\$1blocks\$1to\$1disk, blocks\$1to\$1disk, max\$1query\$1scan\$1size, query\$1scan\$1size | 
| [STL\$1QUERYTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_QUERYTEXT.html) | **열:** text | 
| [STL\$1RETURN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_RETURN.html) | **열:** rows, bytes | 
| [STL\$1S3CLIENT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_S3CLIENT.html) | **열:** bucket, key, transfer\$1size, data\$1size | 
| [STL\$1S3CLIENT\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_S3CLIENT_ERROR.html) | **열:** bucket, key, error, transfer\$1size | 
| [STL\$1SAVE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SAVE.html) | **열:** rows, bytes, tbl | 
| [STL\$1SCAN](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SCAN.html) | **열:** rows, bytes, fetches, type, tbl, rows\$1pre\$1filter, rows\$1pre\$1user\$1filter, perm\$1table\$1name, scanned\$1mega\$1value | 
| [STL\$1SORT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SORT.html) | **열:** rows, bytes, tbl | 
| [STL\$1SSHCLIENT\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_SSHCLIENT_ERROR) | **열:** ssh\$1username, endpoint, command, error | 
| [STL\$1TR\$1CONFLICT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_TR_CONFLICT.html) | **열:** table\$1id | 
| [STL\$1UNDONE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_UNDONE.html) | **열:** table\$1id | 
| [STL\$1UNIQUE](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_UNIQUE.html) | **열:** rows, type, bytes | 
| [STL\$1UTILITYTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_UTILITYTEXT.html) | **열:** label, text | 
| [STL\$1WINDOW](https://docs.aws.amazon.com/redshift/latest/dg/r_STL_WINDOW.html) | **열:** rows | 
| [STV\$1BLOCKLIST](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_BLOCKLIST.html) | **열:** col, tbl, num\$1values, minvalue, maxvalue | 
| [STV\$1EXEC\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_EXEC_STATE.html) | **열:** rows, bytes, label | 
| [STV\$1INFLIGHT](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_INFLIGHT.html) | **열:** label, text | 
| [STV\$1LOCKS](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_LOCKS.html) | **열:** table\$1id | 
| [STV\$1QUERY\$1METRICS](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_QUERY_METRICS.html) | **열:** rows, max\$1rows, blocks\$1read, max\$1blocks\$1read, max\$1blocks\$1to\$1disk, blocks\$1to\$1disk, max\$1query\$1scan\$1size, query\$1scan\$1size | 
| [STV\$1STARTUP\$1RECOVERY\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_STARTUP_RECOVERY_STATE.html) | **열:** table\$1id, table\$1name | 
| [STV\$1TBL\$1PERM](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_TBL_PERM.html) | **열:** id, name, rows, sorted\$1rows, temp, block\$1count, query\$1scan\$1size | 
| [STV\$1TBL\$1TRANS](https://docs.aws.amazon.com/redshift/latest/dg/r_STV_TBL_TRANS.html) | **열:** id, rows, size | 
| [SVCS\$1EXPLAIN](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_EXPLAIN.html) | **열:** plannode, info | 
| [SVCS\$1PLAN\$1INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_PLAN_INFO.html) | **열:** rows, bytes | 
| [SVCS\$1QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_QUERY_SUMMARY.html) | **열:** step, rows, bytes, rate\$1row, rate\$1byte, label, rows\$1pre\$1filter | 
| [SVCS\$1S3LIST](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3LIST.html) | **열:** bucket, prefix, retrieved\$1files, max\$1file\$1size, avg\$1file\$1size | 
| [SVCS\$1S3LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3LOG.html) | **컬럼:** message | 
| [SVCS\$1S3PARTITION\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3PARTITION_SUMMARY.html) | **열:** total\$1partitions, qualified\$1partitions, min\$1assigned\$1partitions, max\$1assigned\$1partitions, avg\$1assigned\$1partitions | 
| [SVCS\$1S3QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVCS_S3QUERY_SUMMARY.html) | **열:** external\$1table\$1name, file\$1format, s3\$1scanned\$1rows, s3\$1scanned\$1bytes, s3query\$1returned\$1rows, s3query\$1returned\$1bytes | 
| [SVL\$1QUERY\$1METRICS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_METRICS.html) | **열:** step\$1label, scan\$1row\$1count, join\$1row\$1count, nested\$1loop\$1join\$1row\$1count, return\$1row\$1count, spectrum\$1scan\$1row\$1count, spectrum\$1scan\$1size\$1mb | 
| [SVL\$1QUERY\$1METRICS\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_METRICS_SUMMARY.html) | **열:** step\$1label, scan\$1row\$1count, join\$1row\$1count, nested\$1loop\$1join\$1row\$1count, return\$1row\$1count, spectrum\$1scan\$1row\$1count, spectrum\$1scan\$1size\$1mb | 
| [SVL\$1QUERY\$1REPORT](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_REPORT.html) | **열:** rows, bytes, label, rows\$1pre\$1filter | 
| [SVL\$1QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_QUERY_SUMMARY.html) | **열:** rows, bytes, rows\$1pre\$1filter | 
| [SVL\$1S3LIST](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3LIST.html) | **열:** bucket, prefix, retrieved\$1files, max\$1file\$1size, avg\$1file\$1size | 
| [SVL\$1S3LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3LOG.html) | **컬럼:** message | 
| [SVL\$1S3PARTITION](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3PARTITION.html) | **열:** rows, bytes, label, rows\$1pre\$1filter | 
| [SVL\$1S3PARTITION\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3PARTITION_SUMMARY.html) | **열:** total\$1partitions, qualified\$1partitions, min\$1assigned\$1partitions, max\$1assigned\$1partitions, avg\$1assigned\$1partitions | 
| [SVL\$1S3QUERY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3QUERY.html) | **열:** external\$1table\$1name, file\$1format, s3\$1scanned\$1rows, s3\$1scanned\$1bytes, s3query\$1returned\$1rows, s3query\$1returned\$1bytes, files | 
| [SVL\$1S3QUERY\$1SUMMARY](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3QUERY_SUMMARY.html) | **열:** external\$1table\$1name, file\$1format, s3\$1scanned\$1rows, s3\$1scanned\$1bytes, s3query\$1returned\$1rows, s3query\$1returned\$1bytes | 
| [SVL\$1S3RETRIES](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_S3RETRIES.html) | **열:** file\$1size, location, message | 
| [SVL\$1SPECTRUM\$1SCAN\$1ERROR](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_SPECTRUM_SCAN_ERROR.html) | **열:** location, rowid, colname, original\$1value, modified\$1value, trigger, action, action\$1value, error\$1code | 
| [SVL\$1STATEMENTTEXT](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_STATEMENTTEXT.html) | **열:** type, text | 
| [SVL\$1STORED\$1PROC\$1CALL](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_STORED_PROC_CALL.html) | **열:** querytxt | 
| [SVL\$1STORED\$1PROC\$1MESSAGES](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_STORED_PROC_MESSAGES.html) | **열:** message, linenum, querytext | 
| [SVL\$1UDF\$1LOG](https://docs.aws.amazon.com/redshift/latest/dg/r_SVL_UDF_LOG.html) | **열:** message, funcname | 
| [SVV\$1DISKUSAGE](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_DISKUSAGE.html) | **열:** name, col, tbl, blocknum, num\$1values, minvalue, maxvalue | 
| [SVV\$1QUERY\$1STATE](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_QUERY_STATE.html) | **열:** rows, bytes, label | 
| [SVV\$1TABLE\$1INFO](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_TABLE_INFO.html) | **열:** table\$1id, table | 
| [SVV\$1TRANSACTIONS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_TRANSACTIONS.html) | **열:** relation | 

시스템 테이블 및 뷰에 대한 자세한 내용은 *Amazon Redshift 데이터베이스 개발자 안내서*의 [시스템 테이블 및 뷰 참조](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_system-tables.html)를 참조하세요. 쿼리 결과를 동적으로 마스킹하는 Amazon Redshift의 기능에 대한 자세한 내용은 *Amazon Redshift 데이터베이스 개발자 안내서*의 [ 동적 데이터 마스킹](https://docs.aws.amazon.com/redshift/latest/dg/t_ddm.html)을 참조하세요. Amazon Redshift를 사용하여 AWS Glue Data Catalog에서 뷰를 생성하는 방법에 대한 자세한 내용은 *Amazon Redshift 데이터베이스 개발자 안내서*의 [AWS Glue Data Catalog 뷰](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html)를 참조하세요.

# CloudTrail을 사용하여 로깅
<a name="logging-with-cloudtrail"></a>

Amazon Redshift, 데이터 공유, Amazon Redshift Serverless, Amazon Redshift Data API 및 쿼리 에디터 v2는 모두 AWS CloudTrail에 통합됩니다. CloudTrail은 Amazon Redshift에서 사용자, 역할 또는 AWS 서비스가 수행한 작업의 레코드를 제공하는 서비스입니다. CloudTrail은 Amazon Redshift에 대한 모든 API 호출을 이벤트로 캡처합니다. 캡처된 호출에는 Redshift 콘솔의 호출과 Redshift 작업에 대한 코드 호출이 포함됩니다.

CloudTrail 추적을 생성하면 Redshift 이벤트를 비롯한 CloudTrail 이벤트를 Amazon S3 버킷에 지속적으로 전달할 수 있습니다. 추적을 구성하지 않은 경우에도 CloudTrail 콘솔의 **이벤트 기록**에서 최신 이벤트를 볼 수 있습니다. CloudTrail에서 수집한 정보를 사용하여 특정 사항을 확인할 수 있습니다. 여기에는 Redshift로 수행한 요청, 요청이 이루어진 IP 주소, 요청 주체, 요청 시점 및 추가 세부 정보가 포함됩니다.

CloudTrail은 Amazon Redshift 데이터베이스 감사 로깅과 별도로 또는 추가로 사용할 수 있습니다.

CloudTrail에 대한 자세한 설명은 [AWS CloudTrail 사용자 가이드](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)를 참조하십시오.

## CloudTrail의 정보
<a name="working-with-info-in-cloudtrail"></a>

CloudTrail은 계정 생성 시 AWS 계정에서 켜집니다. 활동이 발생하면 해당 활동이 **Event history**(이벤트 기록) 내의 다른 AWS 서비스 이벤트와 함께 CloudTrail 이벤트에 기록됩니다. AWS 계정에서 최신 이벤트를 확인, 검색 및 다운로드할 수 있습니다. 자세한 내용은 *AWS CloudTrail 사용 설명서*에서 [CloudTrail 이벤트 기록을 사용하여 이벤트 보기](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)를 참조하세요.

Redshift의 이벤트를 포함하여 AWS 계정에 이벤트를 지속적으로 기록하려는 경우 추적을 생성합니다. CloudTrail은 *추적*을 사용하여 Amazon S3 버킷으로 로그 파일을 전송합니다. 콘솔에서 추적을 생성하면 기본적으로 모든 AWS 지역에 추적이 적용됩니다. 추적은 AWS 파티션에 있는 모든 지역의 이벤트를 로깅하고 지정된 Amazon S3 버킷으로 로그 파일을 전송합니다. 또한 CloudTrail 로그에서 수집된 이벤트 데이터를 추가 분석 및 작업하도록 다른 AWS 서비스를 구성할 수 있습니다. 자세한 내용은 *AWS CloudTrail User Guide*의 다음 섹션을 참조하세요.
+ [트레일 생성 개요](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 지원 서비스 및 통합](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [CloudTrail에서 Amazon SNS 알림 구성](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [여러 리전으로부터 CloudTrail 로그 파일 받기](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html) 및 [여러 계정으로부터 CloudTrail 로그 파일 받기](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

모든 Amazon Redshift, Amazon Redshift Serverless, Data API, 데이터 공유 및 쿼리 에디터 v2 작업은 CloudTrail이 로깅합니다. 예를 들어 `AuthorizeDatashare`, `CreateNamespace`, `ExecuteStatement` 및 `CreateConnection` 작업을 호출하면 CloudTrail 로그 파일에 항목이 생성됩니다.

모든 이벤트 또는 로그 항목에는 요청을 생성했던 사용자에 대한 정보가 포함됩니다. 보안 인증 정보를 이용하면 다음을 쉽게 판단할 수 있습니다.
+ 요청을 루트로 했는지 아니면 사용자 자격 증명으로 했는지 여부
+ 역할 또는 페더레이션 사용자에 대한 임시 보안 인증을 사용하여 요청이 생성되었는지 여부.
+ 다른 AWS 서비스에서 요청했는지.

자세한 내용은 *AWS CloudTrail User Guide*의 [CloudTrail userIdentity Element](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)를 참조하세요.

## 로그 파일 항목
<a name="understanding-cloudtrail-log-files"></a>

*추적*이란 지정한 Amazon S3 버킷에 이벤트를 로그 파일로 입력할 수 있도록 하는 구성입니다. CloudTrail 로그 파일에는 하나 이상의 로그 항목이 포함될 수 있습니다. 이벤트**는 모든 소스로부터의 단일 요청을 나타내며 요청 작업, 작업 날짜와 시간, 요청 파라미터 등에 대한 정보가 들어 있습니다. CloudTrail 로그 파일은 퍼블릭 API 직접 호출의 주문 스택 트레이스가 아니므로 특정 순서로 표시되지 않습니다.

## Amazon Redshift 데이터 공유 예제
<a name="datashare-cloudtrail-example"></a>

다음 예제는 `AuthorizeDataShare` 작업을 보여주는 CloudTrail 로그 항목입니다.

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AKIAIOSFODNN7EXAMPLE:janedoe",
        "arn": "arn:aws:sts::111122223333:user/janedoe",
        "accountId": "111122223333",
        "accessKeyId": "AKIAI44QH8DHBEXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AKIAIOSFODNN7EXAMPLE:janedoe",
                "arn": "arn:aws:sts::111122223333:user/janedoe",
                "accountId": "111122223333",
                "userName": "janedoe"
            },
            "attributes": {
                "creationDate": "2021-08-02T23:40:45Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2021-08-02T23:40:58Z",
    "eventSource": "redshift.amazonaws.com",
    "eventName": "AuthorizeDataShare",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "3.227.36.75",
    "userAgent":"aws-cli/1.18.118 Python/3.6.10 Linux/4.9.217-0.1.ac.205.84.332.metal1.x86_64 botocore/1.17.41", 
    "requestParameters": {
        "dataShareArn": "arn:aws:redshift:us-east-1:111122223333:datashare:4c64c6ec-73d5-42be-869b-b7f7c43c7a53/testshare",
        "consumerIdentifier": "555555555555"
    },
    "responseElements": {
        "dataShareArn": "arn:aws:redshift:us-east-1:111122223333:datashare:4c64c6ec-73d5-42be-869b-b7f7c43c7a53/testshare",
        "producerNamespaceArn": "arn:aws:redshift:us-east-1:123456789012:namespace:4c64c6ec-73d5-42be-869b-b7f7c43c7a53",
        "producerArn": "arn:aws:redshift:us-east-1:111122223333:namespace:4c64c6ec-73d5-42be-869b-b7f7c43c7a53",
        "allowPubliclyAccessibleConsumers": true,
        "dataShareAssociations": [
            {
                "consumerIdentifier": "555555555555",
                "status": "AUTHORIZED",
                "createdDate": "Aug 2, 2021 11:40:56 PM",
                "statusChangeDate": "Aug 2, 2021 11:40:57 PM"
            }
        ]
    },
    "requestID": "87ee1c99-9e41-42be-a5c4-00495f928422",
    "eventID": "03a3d818-37c8-46a6-aad5-0151803bdb09",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

## Amazon Redshift Serverless 예제
<a name="serverless-cloudtrail-example"></a>

Amazon Redshift Serverless는 Amazon Redshift Serverless에서 수행한 작업의 기록을 제공하기 위해 AWS CloudTrail과 통합됩니다. CloudTrail은 Amazon Redshift Serverless에 대한 모든 API 호출을 이벤트로 캡처합니다. Amazon Redshift Serverless 기능에 대한 자세한 내용은 [Amazon Redshift Serverless 기능 개요](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-considerations.html)를 참조하십시오.

다음은 `CreateNamespace` 작업을 설명하는 CloudTrail 로그 항목을 보여 주는 예시입니다.

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AAKEOFPINEXAMPLE:admin",
        "arn": "arn:aws:sts::111111111111:assumed-role/admin/admin",
        "accountId": "111111111111",
        "accessKeyId": "AAKEOFPINEXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AAKEOFPINEXAMPLE",
                "arn": "arn:aws:iam::111111111111:role/admin",
                "accountId": "111111111111",
                "userName": "admin"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2022-03-21T20:51:58Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2022-03-21T23:15:40Z",
    "eventSource": "redshift-serverless.amazonaws.com",
    "eventName": "CreateNamespace",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "56.23.155.33",
    "userAgent": "aws-cli/2.4.14 Python/3.8.8 Linux/5.4.181-109.354.amzn2int.x86_64 exe/x86_64.amzn.2 prompt/off command/redshift-serverless.create-namespace",
    "requestParameters": {
        "adminUserPassword": "HIDDEN_DUE_TO_SECURITY_REASONS",
        "adminUsername": "HIDDEN_DUE_TO_SECURITY_REASONS",
        "dbName": "dev",
        "namespaceName": "testnamespace"
    },
    "responseElements": {
        "namespace": {
            "adminUsername": "HIDDEN_DUE_TO_SECURITY_REASONS",
            "creationDate": "Mar 21, 2022 11:15:40 PM",
            "defaultIamRoleArn": "",
            "iamRoles": [],
            "logExports": [],
            "namespaceArn": "arn:aws:redshift-serverless:us-east-1:111111111111:namespace/befa5123-16c2-4449-afca-1d27cb40fc99",
            "namespaceId": "8b726a0c-16ca-4799-acca-1d27cb403599",
            "namespaceName": "testnamespace",
            "status": "AVAILABLE"
        }
    },
    "requestID": "ed4bb777-8127-4dae-aea3-bac009999163",
    "eventID": "1dbee944-f889-4beb-b228-7ad0f312464",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111111111111",
    "eventCategory": "Management",
}
```

## Amazon Redshift Data API 예제
<a name="data-api-cloudtrail"></a>

다음은 `ExecuteStatement` 작업을 설명하는 CloudTrail 로그 항목을 보여 주는 예시입니다.

```
{
    "eventVersion":"1.05",
    "userIdentity":{
        "type":"IAMUser",
        "principalId":"AKIAIOSFODNN7EXAMPLE:janedoe",
        "arn":"arn:aws:sts::123456789012:user/janedoe",
        "accountId":"123456789012",
        "accessKeyId":"AKIAI44QH8DHBEXAMPLE",
        "userName": "janedoe"
    },
    "eventTime":"2020-08-19T17:55:59Z",
    "eventSource":"redshift-data.amazonaws.com",
    "eventName":"ExecuteStatement",
    "awsRegion":"us-east-1",
    "sourceIPAddress":"192.0.2.0",
    "userAgent":"aws-cli/1.18.118 Python/3.6.10 Linux/4.9.217-0.1.ac.205.84.332.metal1.x86_64 botocore/1.17.41",
    "requestParameters":{
        "clusterIdentifier":"example-cluster-identifier",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "sql":"***OMITTED***"
    },
    "responseElements":{
        "clusterIdentifier":"example-cluster-identifier",
        "createdAt":"Aug 19, 2020 5:55:58 PM",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "id":"5c52b37b-9e07-40c1-98de-12ccd1419be7"
    },
    "requestID":"00c924d3-652e-4939-8a7a-cd0612eeb8ac",
    "eventID":"c1fb7076-102f-43e5-9ec9-40820bcc1175",
    "readOnly":false,
    "eventType":"AwsApiCall",
    "recipientAccountId":"123456789012"
}
```

다음 예는 멱등성에 사용된 `clientToken`을 보여주는 `ExecuteStatement` 작업을 보여주는 CloudTrail 로그 항목을 보여줍니다.

```
{
    "eventVersion":"1.05",
    "userIdentity":{
        "type":"IAMUser",
        "principalId":"AKIAIOSFODNN7EXAMPLE:janedoe",
        "arn":"arn:aws:sts::123456789012:user/janedoe",
        "accountId":"123456789012",
        "accessKeyId":"AKIAI44QH8DHBEXAMPLE",
        "userName": "janedoe"
    },
    "eventTime":"2020-08-19T17:55:59Z",
    "eventSource":"redshift-data.amazonaws.com",
    "eventName":"ExecuteStatement",
    "awsRegion":"us-east-1",
    "sourceIPAddress":"192.0.2.0",
    "userAgent":"aws-cli/1.18.118 Python/3.6.10 Linux/4.9.217-0.1.ac.205.84.332.metal1.x86_64 botocore/1.17.41",
    "requestParameters":{
        "clusterIdentifier":"example-cluster-identifier",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "sql":"***OMITTED***",
        "clientToken":"32db2e10-69ac-4534-b3fc-a191052616ce"
    },
    "responseElements":{
        "clusterIdentifier":"example-cluster-identifier",
        "createdAt":"Aug 19, 2020 5:55:58 PM",
        "database":"example-database-name",
        "dbUser":"example_db_user_name",
        "id":"5c52b37b-9e07-40c1-98de-12ccd1419be7"
    },
    "requestID":"00c924d3-652e-4939-8a7a-cd0612eeb8ac",
    "eventID":"c1fb7076-102f-43e5-9ec9-40820bcc1175",
    "readOnly":false,
    "eventType":"AwsApiCall",
    "recipientAccountId":"123456789012"
}
```

## Amazon Redshift 쿼리 에디터 v2 예제
<a name="query-editor-cloudtrail"></a>

다음은 `CreateConnection` 작업을 설명하는 CloudTrail 로그 항목을 보여 주는 예시입니다.

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AAKEOFPINEXAMPLE:session",
        "arn": "arn:aws:sts::123456789012:assumed-role/MyRole/session",
        "accountId": "123456789012",
        "accessKeyId": "AKIAI44QH8DHBEXAMPLE",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AAKEOFPINEXAMPLE",
                "arn": "arn:aws:iam::123456789012:role/MyRole",
                "accountId": "123456789012",
                "userName": "MyRole"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2022-09-21T17:19:02Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2022-09-21T22:22:05Z",
    "eventSource": "sqlworkbench.amazonaws.com",
    "eventName": "CreateConnection",
    "awsRegion": "ca-central-1",
    "sourceIPAddress": "192.2.0.2",
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0",
    "requestParameters": {
        "password": "***",
        "databaseName": "***",
        "isServerless": false,
        "name": "***",
        "host": "redshift-cluster-2.c8robpbxvbf9.ca-central-1.redshift.amazonaws.com",
        "authenticationType": "***",
        "clusterId": "redshift-cluster-2",
        "username": "***",
        "tags": {
            "sqlworkbench-resource-owner": "AAKEOFPINEXAMPLE:session"
        }
    },
    "responseElements": {
        "result": true,
        "code": "",
        "data": {
            "id": "arn:aws:sqlworkbench:ca-central-1:123456789012:connection/ce56b1be-dd65-4bfb-8b17-12345123456",
            "name": "***",
            "authenticationType": "***",
            "databaseName": "***",
            "secretArn": "arn:aws:secretsmanager:ca-central-1:123456789012:secret:sqlworkbench!7da333b4-9a07-4917-b1dc-12345123456-qTCoFm",
            "clusterId": "redshift-cluster-2",
            "dbUser": "***",
            "userSettings": "***",
            "recordDate": "2022-09-21 22:22:05",
            "updatedDate": "2022-09-21 22:22:05",
            "accountId": "123456789012",
            "tags": {
                "sqlworkbench-resource-owner": "AAKEOFPINEXAMPLE:session"
            },
            "isServerless": false
        }
    },
    "requestID": "9b82f483-9c03-4cdd-bb49-a7009e7da714",
    "eventID": "a7cdd442-e92f-46a2-bc82-2325588d41c3",
    "readOnly": false,
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "123456789012",
    "eventCategory": "Management"
}
```

## AWS CloudTrail 로그의 Amazon Redshift 계정 ID
<a name="cloudtrail-rs-acct-ids"></a>

Amazon Redshift가 다른 AWS 서비스를 호출하면 Amazon Redshift에 속하는 계정 ID로 호출이 기록됩니다. 사용자의 계정 ID로 기록되지는 않습니다. 예를 들어 Amazon Redshift가 `CreateGrant`, `Decrypt`, `Encrypt`, `RetireGrant` 등의 AWS Key Management Service(AWS KMS) 작업을 호출하여 클러스터의 암호화를 관리한다고 가정합니다. 이 경우 호출은 AWS CloudTrail에 의해 Amazon Redshift 계정 ID를 사용하여 기록됩니다.

Amazon Redshift는 다른 AWS 서비스를 호출할 때 다음 표의 계정 ID를 사용합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/redshift/latest/mgmt/logging-with-cloudtrail.html)

다음은 Amazon Redshift가 호출한 AWS KMS Decrypt 작업의 CloudTrail 로그 항목을 보여주는 예입니다.

```
{

    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAI5QPCMKLTL4VHFCYY:i-0f53e22dbe5df8a89",
        "arn": "arn:aws:sts::790247189693:assumed-role/prod-23264-role-wp/i-0f53e22dbe5df8a89",
        "accountId": "790247189693",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2017-03-03T16:24:54Z"
            },
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAI5QPCMKLTL4VHFCYY",
                "arn": "arn:aws:iam::790247189693:role/prod-23264-role-wp",
                "accountId": "790247189693",
                "userName": "prod-23264-role-wp"
            }
        }
    },
    "eventTime": "2017-03-03T17:16:51Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-east-2",
    "sourceIPAddress": "52.14.143.61",
    "userAgent": "aws-internal/3",
    "requestParameters": {
        "encryptionContext": {
            "aws:redshift:createtime": "20170303T1710Z",
            "aws:redshift:arn": "arn:aws:redshift:us-east-2:123456789012:cluster:my-dw-instance-2"
        }
    },
    "responseElements": null,
    "requestID": "30d2fe51-0035-11e7-ab67-17595a8411c8",
    "eventID": "619bad54-1764-4de4-a786-8898b0a7f40c",
    "readOnly": true,
    "resources": [
        {
            "ARN": "arn:aws:kms:us-east-2:123456789012:key/f8f4f94f-e588-4254-b7e8-078b99270be7",
            "accountId": "123456789012",
            "type": "AWS::KMS::Key"
        }
    ],
    "eventType": "AwsApiCall",
    "recipientAccountId": "123456789012",
    "sharedEventID": "c1daefea-a5c2-4fab-b6f4-d8eaa1e522dc"

}
```

# Amazon Redshift의 규정 준수 확인
<a name="security-compliance"></a>

서드 파티 감사자는 여러 AWS 규정 준수 프로그램의 일환으로 Amazon Redshift의 보안 및 규정 준수를 평가합니다. 여기에는 SOC, PCI, FedRAMP, HIPAA 등이 포함됩니다.

특정 규정 준수 프로그램 범위에 속하는 AWS 서비스의 목록은 [규정 준수 프로그램 제공 AWS 범위 내 서비스](https://aws.amazon.com/compliance/services-in-scope/)를 참조하세요. 일반 정보는 [AWS 규정 준수 프로그램](https://aws.amazon.com/compliance/programs/)을 참조하세요.

AWS Artifact를 사용하여 타사 감사 보고서를 다운로드할 수 있습니다. 자세한 내용은 [AWS Artifact의 보고서 다운로드](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)를 참조하세요.

Amazon Redshift 사용 시 귀하의 규정 준수 책임은 데이터의 민감도, 조직의 규정 준수 목표, 관련 법률과 규정에 따라 결정됩니다. Amazon Redshift 사용 시 HIPAA, PCI 또는 FedRAMP와 같은 표준을 준수해야 하는 경우 다음과 같은 AWS의 도움말 리소스를 활용하세요.
+ [보안 및 규정 준수 빠른 시작 안내서](https://aws.amazon.com/quickstart/?awsf.quickstart-homepage-filter=categories%23security-identity-compliance)에서는 아키텍처 고려 사항에 대해 설명하고 보안 및 규정 준수에 중점을 둔 기본 환경을 AWS에 배포하기 위한 단계를 안내합니다.
+ [HIPAA 보안 및 규정 준수에 맞는 아키텍처 설계 백서](https://docs.aws.amazon.com/whitepapers/latest/architecting-hipaa-security-and-compliance-on-aws/architecting-hipaa-security-and-compliance-on-aws.html)는 기업에서 AWS를 사용하여 HIPAA를 준수하는 애플리케이션을 생성하는 방법을 설명합니다.
+ [AWS 규정 준수 리소스](https://aws.amazon.com/compliance/resources/), 워크북 및 안내서는 특정 산업 및 위치에 적용할 수 있습니다.
+ AWS 서비스인 [AWS Config](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config.html)로 리소스 구성이 내부 관행, 업계 지침 및 규정을 준수하는 정도를 평가할 수 있습니다.
+ AWS 서비스인 [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html)는 보안 업계 표준 및 모범 사례 준수 여부를 확인하는 데 도움이 되는 AWS 내 보안 상태에 대한 포괄적인 관점을 제공합니다. Security Hub CSPM은 보안 제어를 사용하여 리소스 구성 및 보안 표준을 평가하여 다양한 규정 준수 프레임워크를 준수할 수 있도록 지원합니다. Security Hub CSPM을 사용하여 Amazon Redshift 리소스를 평가하는 방법에 대한 자세한 내용은 *AWS Security Hub 사용 설명서*의 [Amazon Redshift 제어](https://docs.aws.amazon.com/securityhub/latest/userguide/redshift-controls.html)를 참조하세요.

다음의 규정 준수 및 보안 문서는 Amazon Redshift를 다루고 있으며, 필요 시 AWS Artifact를 통해 다운로드할 수 있습니다. [자세한 내용은 AWS Artifact 단원을 참조하세요.](https://aws.amazon.com/artifact)
+ C5(Cloud Computing Compliance Controls Catalogue)
+ ISO 27001:2013 적용성 보고서(SoA)
+ ISO 27001:2013 인증서
+ ISO 27017:2015 적용성 보고서(SoA)
+ ISO 27017:2015 인증서
+ ISO 27018:2015 적용성 보고서(SoA)
+ ISO 27018:2014 인증서
+ ISO 9001:2015 인증서
+ PCI DSS 규정 준수 증명(AOC) 및 책임 요약
+ SOC(Service Organization Controls) 1 보고서
+ SOC(Service Organization Controls) 2 보고서
+ 기밀성에 대한 SOC(Service Organization Controls) 2 보고서

# Amazon Redshift의 복원성
<a name="security-disaster-recovery-resiliency"></a>

AWS 글로벌 인프라는 AWS 리전 및 가용 영역(AZ)을 중심으로 구축됩니다. AWS 리전에서는 물리적으로 분리되고 격리된 다수의 가용 영역을 제공하며 이러한 가용 영역은 짧은 지연 시간, 높은 처리량 및 높은 중복성을 갖춘 네트워크에 연결되어 있습니다. 가용 영역을 사용하면 중단 없이 가용 영역 간에 자동으로 장애 조치가 이루어지는 애플리케이션 및 데이터베이스를 설계하고 운영할 수 있습니다. 가용 영역은 기존의 단일 또는 다중 데이터 센터 인프라보다 가용성, 내결함성 및 확장성이 뛰어납니다.

거의 모든 AWS 리전은 여러 개의 가용 영역과 데이터 센터를 가지고 있습니다. 내결함성과 짧은 지연 시간을 위해 같은 리전에 있는 여러 가용 영역에 애플리케이션을 배포할 수 있습니다.

데이터 손실이나 애플리케이션 변경 없이 클러스터를 다른 가용 영역으로 이동하려면 클러스터에 대한 재배치를 구성할 수 있습니다. 재배치를 사용하면 클러스터에서 서비스 중단이 발생할 때 영향을 최소화하면서 작업을 계속할 수 있습니다. 클러스터 재배치가 켜지면 Amazon Redshift가 일부 상황에서 클러스터를 재배치하도록 선택할 수 있습니다. Amazon Redshift의 재배치에 대한 자세한 내용은 [클러스터 재부팅](managing-cluster-recovery.md) 섹션을 참조하세요.

가용 영역에서 예기치 않은 이벤트가 발생하는 장애 시나리오에서 여러 가용 영역(다중 AZ) 배포를 구성하여 Amazon Redshift 데이터 웨어하우스가 계속 작동하도록 할 수 있습니다. Amazon Redshift는 단일 엔드포인트를 통해 액세스할 수 있는 두 개의 가용 영역에 동일한 컴퓨팅 리소스를 배포합니다. 전체 가용 영역에 장애가 발생하는 경우 두 번째 가용 영역의 나머지 컴퓨팅 리소스를 계속해서 워크로드를 처리하는 데 사용할 수 있습니다. 다중 AZ 배포에 대한 자세한 내용은 [다중 AZ 배포](managing-cluster-multi-az.md) 단원을 참조하십시오.

AWS 리전 및 가용 영역에 대한 자세한 내용은 [AWS 글로벌 인프라](https://aws.amazon.com/about-aws/global-infrastructure/)를 참조하십시오. 재해 복구에 Amazon Redshift를 사용하는 방법에 대한 자세한 내용은 [Implement disaster recovery with Amazon Redshift](https://aws.amazon.com/blogs/big-data/implement-disaster-recovery-with-amazon-redshift/)를 참조하세요.

. 

# Amazon Redshift의 인프라 보안
<a name="security-network-isolation"></a>

관리형 서비스인 Amazon Redshift는 AWS 글로벌 네트워크 보안으로 보호됩니다. AWS 보안 서비스와 AWS의 인프라 보호 방법에 대한 자세한 내용은 [AWS 클라우드 보안](https://aws.amazon.com/security/)을 참조하세요. 인프라 보안에 대한 모범 사례를 사용하여 AWS 환경을 설계하려면 *보안 원칙 AWS Well‐Architected 프레임워크*의 [인프라 보호](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)를 참조하세요.

AWS에서 게시한 API 호출을 사용하여 네트워크를 통해 Amazon Redshift에 액세스합니다. 클라이언트는 다음을 지원해야 합니다.
+ Transport Layer Security(TLS). TLS 1.2는 필수이며 TLS 1.3을 권장합니다.
+ DHE(Ephemeral Diffie-Hellman) 또는 ECDHE(Elliptic Curve Ephemeral Diffie-Hellman)와 같은 완전 전송 보안(PFS)이 포함된 암호 제품군. Java 7 이상의 최신 시스템은 대부분 이러한 모드를 지원합니다.

## 네트워크 격리
<a name="network-isolation"></a>

Amazon VPC 서비스 기반의 Virtual Private Cloud(VPC)는 AWS 클라우드에서 개인적이고 논리적으로 격리된 네트워크입니다. 다음 단계를 수행하여 VPC 내에 Amazon Redshift 클러스터 또는 Redshift Serverless 작업 그룹을 배포할 수 있습니다.
+ AWS 리전에서 VPC를 생성합니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [Amazon VPC란 무엇입니까?](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html)를 참조하세요.
+ 프라이빗 VPC 서브넷을 두 개 이상 생성합니다. 자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC 및 서브넷](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html)을 참조하세요.
+ Amazon Redshift 클러스터 또는 Redshift Serverless 작업 그룹을 배포합니다. 자세한 내용은 [Redshift 리소스의 서브넷](working-with-cluster-subnet-groups.md) 또는 [작업 그룹 및 네임스페이스](serverless-workgroup-namespace.md) 섹션을 참조하세요.

Amazon Redshift 클러스터는 프로비저닝 시 기본적으로 잠금 상태입니다. Amazon Redshift 클라이언트로부터 들어오는 인바운드 네트워크 트래픽을 허용하려면 VPC 보안 그룹을 Amazon Redshift 클러스터에 연결합니다. 자세한 내용은 [Redshift 리소스의 서브넷](working-with-cluster-subnet-groups.md) 섹션을 참조하세요.

특정 IP 주소 범위에서 들어 오고 나가는 트래픽만 허용하려면 VPC에서 보안 그룹을 업데이트합니다. 예를 들어 기업 네트워크에서 들어오고 나가는 트래픽만 허용할 수 있습니다.

Amazon Redshift 클러스터가 태깅된 서브넷과 관련한 네트워크 액세스 제어 목록을 구성하는 동안 각 AWS 리전의 S3 CIDR 범위를 수신 및 송신 규칙 모두의 허용 목록에 추가해야 합니다. 이렇게 하면 Redshift Spectrum, COPY 및 UNLOAD와 같은 S3 기반 작업을 중단 없이 실행할 수 있습니다.

다음 예제 명령은 us-east-1 리전의 Amazon S3에 사용된 모든 IPv4 주소에 대한 JSON 응답을 구문 분석합니다.

```
curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.region=="us-east-1") | select(.service=="S3") | .ip_prefix'

54.231.0.0/17

52.92.16.0/20

52.216.0.0/15
```

특정 리전의 S3 IP 범위를 가져오는 방법에 대한 지침은 [AWS IP 주소 범위](https://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html)를 참조하세요.

Amazon Redshift는 클러스터를 전용 테넌시 VPC에 배포하도록 지원합니다. 자세한 내용은 *Amazon EC2 User Guide*의 [Dedicated instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/dedicated-instance.html)를 참조하세요.

## Amazon Redshift 보안 그룹
<a name="working-with-security-groups"></a>

Amazon Redshift 클러스터를 프로비저닝할 때는 기본적으로 아무도 액세스하지 못하도록 클러스터가 잠깁니다. 이때 다른 사용자에게 Amazon Redshift 클러스터에 대한 인바운드 액세스 권한을 부여하려면 클러스터를 보안 그룹과 연결해야 합니다. EC2-VPC 플랫폼을 사용하는 기존 Amazon VPC 보안 그룹을 사용하거나, 혹은 새로운 보안 그룹을 정의한 후 클러스터와 연결할 수도 있습니다. EC2-VPC 플랫폼을 기반으로 클러스터를 관리하는 방법에 대한 자세한 내용은 [VPC의 Redshift 리소스](managing-clusters-vpc.md) 단원을 참조하십시오.

## 인터페이스 VPC 엔드포인트
<a name="security-private-link"></a>

인터넷을 통해 연결하는 대신 Virtual Private Cloud(VPC)의 VPC 엔드포인트(AWS PrivateLink) 인터페이스를 사용하여 Amazon Redshift 및 Amazon Redshift Serverless API 서비스에 직접 연결할 수 있습니다. Amazon Redshift API 작업에 대한 자세한 내용은 *Amazon Redshift API Reference*의 [Actions](https://docs.aws.amazon.com/redshift/latest/APIReference/API_Operations.html)를 참조하세요. Redshift Serverless API 작업에 대한 자세한 내용은 **Amazon Redshift Serverless API 참조의 [작업](https://docs.aws.amazon.com/redshift-serverless/latest/APIReference/API_Operations.html)을 참조하세요. AWS PrivateLink에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [인터페이스 VPC 엔드포인트(AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)를 참조하세요. 클러스터 또는 작업 그룹에 대한 JDBC/ODBC 연결은 Amazon Redshift API 서비스의 일부가 아닙니다.

인터페이스 VPC 엔드포인트를 사용하는 경우 VPC와 Amazon Redshift 또는 Redshift Serverless 사이의 통신은 모두 AWS 네트워크에서 수행되므로 더 안전할 수 있습니다. 각 VPC 엔드포인트는 하나 이상의 탄력적 네트워크 인터페이스 및 VPC 서브넷의 프라이빗 IP 주소로 표현됩니다. 탄력적 네트워크 인터페이스에 대한 자세한 내용은 *Amazon EC2 사용 설명서*의 [탄력적 네트워크 인터페이스](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)를 참조하세요.

인터페이스 VPC 엔드포인트는 VPC를 Amazon Redshift에 직접 연결합니다. 인터넷 게이트웨이, NAT(Network Address Translation) 장치, 가상 사설 네트워크(VPN) 연결 또는Direct Connect 연결을 사용하지 않습니다. VPC에 있는 인스턴스는 퍼블릭 IP 주소가 없어도 Amazon Redshift API와 통신할 수 있습니다.

2가지 옵션으로 VPC를 통해 Amazon Redshift 또는 Redshift Serverless를 사용할 수 있습니다. 하나는 VPC 내부에 있는 인스턴스에서 연결하는 것입니다. 다른 하나는 Site-to-Site VPN 옵션이나 Direct Connect를 사용하여 사설망을 VPC에 연결하는 것입니다. Site-to-Site VPN 옵션에 대한 자세한 내용은 *Amazon VPC 사용 설명서*의 [VPN 연결](https://docs.aws.amazon.com/vpc/latest/userguide/vpn-connections.html)을 참조하세요. Direct Connect에 대한 자세한 내용은 *Direct Connect 사용 설명서*의 [연결 생성](https://docs.aws.amazon.com/directconnect/latest/UserGuide/create-connection.html)을 참조하세요.

AWS Management Console 또는 AWS Command Line Interface(AWS CLI) 명령을 사용하여 Amazon Redshift에 연결할 인터페이스 VPC 엔드포인트를 생성할 수 있습니다. 자세한 내용은 [인터페이스 엔드포인트 생성](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpce-interface.html#create-interface-endpoint)을 참조하세요.

인터페이스 VPC 엔드포인트를 생성한 후 엔드포인트에 대한 프라이빗 DNS 호스트 이름을 사용할 수 있습니다. 그렇게 하면 기본 엔드포인트는 다음과 같습니다.
+ **Amazon Redshift 프로비저닝**: `https://redshift.Region.amazonaws.com`
+ **Amazon Redshift Serverless**: `https://redshift-serverless.Region.amazonaws.com`

프라이빗 DNS 호스트 이름을 사용하지 않는 경우 Amazon VPC는 다음 형식으로 사용할 수 있는 DNS 엔드포인트 이름을 제공합니다.
+ **Amazon Redshift 프로비저닝**: `VPC_endpoint_ID.redshift.Region.vpce.amazonaws.com`
+ **Amazon Redshift Serverless**: `VPC_endpoint_ID.redshift-serverless.Region.vpce.amazonaws.com`

자세한 내용은 *Amazon VPC 사용 설명서*의 [인터페이스 VPC 엔드포인트(AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-interface.html)를 참조하세요.

Amazon Redshift 및 Redshift Serverless는 VPC 내의 모든 [Amazon Redshift API 작업](https://docs.aws.amazon.com/redshift/latest/APIReference/API_Operations.html)과 [Redshift Serverless API 작업](https://docs.aws.amazon.com/redshift-serverless/latest/APIReference/API_Operations.html)에 대한 직접 호출을 지원합니다.

VPC 엔드포인트 정책을 VPC 엔드포인트에 연결하여 AWS Identity and Access Management(IAM) 보안 주체에 대한 액세스를 제어할 수 있습니다. 보안 그룹을 VPC 엔드포인트와 연결하여 네트워크 트래픽의 소스와 대상을 기반으로 인바운드 및 아웃바운드 액세스를 제어할 수도 있습니다. 예는 IP 주소의 범위입니다. 자세한 내용은 Amazon VPC 사용 설명서**의 [VPC 엔드포인트를 통해 서비스에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)를 참조하세요.

### Amazon Redshift의 VPC 엔드포인트 정책
<a name="security-private-link-vpc_endpoint-policy"></a>

Amazon Redshift에 대한 VPC 엔드포인트 정책을 생성하여 다음을 지정할 수 있습니다.
+ 작업을 수행할 수 있거나 수행할 수 없는 보안 주체
+ 수행할 수 있는 작업
+ 작업을 수행할 수 있는 리소스

자세한 내용은 *Amazon VPC 사용 설명서*의 [VPC 엔드포인트를 통해 서비스에 대한 액세스 제어](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)를 참조하세요.

다음으로 VPC 엔드포인트 정책의 예를 찾아볼 수 있습니다.

#### Amazon Redshift 프로비저닝된 엔드포인트 정책 예제
<a name="security-private-link-examples-provisioned"></a>

다음으로 Amazon Redshift 프로비저닝에 대한 VPC 엔드포인트 정책의 예제를 찾아볼 수 있습니다.

##### 예: 지정된 AWS 계정의 모든 액세스를 거부하는 VPC 엔드포인트 정책
<a name="security-private-link-example-1"></a>

다음 VPC 엔드포인트 정책은 AWS 계정 `123456789012`가 이 엔드포인트를 사용하는 리소스에 대한 모든 액세스를 거부합니다.

```
{
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 예: 지정된 IAM 역할에 대해서만 VPC 액세스를 허용하는 VPC 엔드포인트 정책
<a name="security-private-link-example-1.1"></a>

다음 VPC 엔드포인트 정책은 AWS 계정 *123456789012*의 IAM 역할 *`redshiftrole`*에만 전체 액세스 권한을 허용합니다. 다른 모든 IAM 보안 주체는 엔드포인트를 사용하는 액세스가 거부됩니다.

```
   {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:role/redshiftrole"
                ]
            }
        }]
}
```

이것은 예시입니다. 대부분의 사용 사례에서는 특정 작업에 권한을 연결하여 권한 범위를 좁히는 것이 좋습니다.

##### 예: 지정된 IAM 보안 주체(사용자)에 대해서만 VPC 액세스를 허용하는 VPC 엔드포인트 정책
<a name="security-private-link-example-2"></a>

다음 VPC 엔드포인트 정책은 AWS 계정 *123456789012*의 IAM 사용자 *`redshiftadmin`*에게만 전체 액세스 권한을 허용합니다. 다른 모든 IAM 보안 주체는 엔드포인트를 사용하는 액세스가 거부됩니다.

```
   {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:user/redshiftadmin"
                ]
            }
        }]
}
```

이것은 예시입니다. 대부분의 사용 사례에서는 사용자에게 할당하기 전에 역할에 권한을 연결하는 것이 좋습니다. 또한 특정 작업을 사용하여 권한 범위를 좁히는 것이 좋습니다.

##### 예: 읽기 전용 Amazon Redshift 작업을 허용하는 VPC 엔드포인트 정책
<a name="security-private-link-example-3"></a>

다음 VPC 엔드포인트 정책은 AWS 계정 *`123456789012`*만 지정된 Amazon Redshift 작업을 수행할 수 있도록 허용합니다.

지정된 작업은 Amazon Redshift에 대한 읽기 전용 액세스 권한을 제공합니다. VPC의 다른 모든 작업은 지정된 계정에 대해 거부됩니다. 다른 모든 계정의 액세스도 거부됩니다. Amazon Redshift 작업 목록은 *IAM User Guide*의 [Actions, Resources, and Condition Keys for Amazon Redshift](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshift.html)를 참조하세요.

```
  {
    "Statement": [
        {
            "Action": [
                "redshift:DescribeAccountAttributes",
                "redshift:DescribeClusterParameterGroups",
                "redshift:DescribeClusterParameters",
                "redshift:DescribeClusterSecurityGroups",
                "redshift:DescribeClusterSnapshots",
                "redshift:DescribeClusterSubnetGroups",
                "redshift:DescribeClusterVersions",
                "redshift:DescribeDefaultClusterParameters",
                "redshift:DescribeEventCategories",
                "redshift:DescribeEventSubscriptions",
                "redshift:DescribeHsmClientCertificates",
                "redshift:DescribeHsmConfigurations",
                "redshift:DescribeLoggingStatus",
                "redshift:DescribeOrderableClusterOptions",
                "redshift:DescribeQuery",
                "redshift:DescribeReservedNodeOfferings",
                "redshift:DescribeReservedNodes",
                "redshift:DescribeResize",
                "redshift:DescribeSavedQueries",
                "redshift:DescribeScheduledActions",
                "redshift:DescribeSnapshotCopyGrants",
                "redshift:DescribeSnapshotSchedules",
                "redshift:DescribeStorage",
                "redshift:DescribeTable",
                "redshift:DescribeTableRestoreStatus",
                "redshift:DescribeTags",
                "redshift:FetchResults",
                "redshift:GetReservedNodeExchangeOfferings"            
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 예: 지정된 클러스터에 대한 액세스를 거부하는 VPC 엔드포인트 정책
<a name="security-private-link-example-4"></a>

다음 VPC 엔드포인트 정책은 모든 계정 및 보안 주체에 대한 전체 액세스 권한을 허용합니다. 동시에 클러스터 ID가 `my-redshift-cluster`인 Amazon Redshift 클러스터에서 수행되는 작업에 대한 AWS 계정 *`123456789012`*의 액세스를 거부합니다. 클러스터에 대한 리소스 수준 권한을 지원하지 않는 다른 Amazon Redshift 작업은 여전히 허용됩니다. Amazon Redshift 작업 및 해당 리소스 유형 목록은 *IAM User Guide*의 [Actions, Resources, and Condition Keys for Amazon Redshift](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshift.html)를 참조하세요.

```
 {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "arn:aws:redshift:us-east-1:123456789012:cluster:my-redshift-cluster",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

#### Amazon Redshift Serverless 엔드포인트 정책 예제
<a name="security-private-link-examples-serverless"></a>

다음으로 Redshift Serverless에 대한 VPC 엔드포인트 정책의 예제를 찾아볼 수 있습니다.

##### 예: 읽기 전용 Redshift Serverless 작업을 허용하는 VPC 엔드포인트 정책
<a name="security-private-link-serverless-example-1"></a>

다음 VPC 엔드포인트 정책은 AWS 계정 *`123456789012`*만 지정된 Redshift Serverless 작업을 수행할 수 있도록 허용합니다.

지정된 작업은 Redshift Serverless에 대한 읽기 전용 액세스 권한을 제공합니다. VPC의 다른 모든 작업은 지정된 계정에 대해 거부됩니다. 다른 모든 계정의 액세스도 거부됩니다. Redshift Serverless 작업 목록은 **IAM 사용 설명서에서 [Redshift Serverless의 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshiftserverless.html)를 참조하세요.

```
  {
    "Statement": [
        {
            "Action": [
                "redshift-serverless:DescribeOneTimeCredit",
                "redshift-serverless:GetCustomDomainAssociation",
                "redshift-serverless:GetEndpointAccess",
                "redshift-serverless:GetNamespace",
                "redshift-serverless:GetRecoveryPoint",
                "redshift-serverless:GetResourcePolicy",
                "redshift-serverless:GetScheduledAction",
                "redshift-serverless:GetSnapshot",
                "redshift-serverless:GetTableRestoreStatus",
                "redshift-serverless:GetUsageLimit",
                "redshift-serverless:GetWorkgroup"
            ],
            "Effect": "Allow",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

##### 예: 지정된 작업 그룹에 대한 액세스를 거부하는 VPC 엔드포인트 정책
<a name="security-private-link-serverless-example-2"></a>

다음 VPC 엔드포인트 정책은 모든 계정 및 보안 주체에 대한 전체 액세스 권한을 허용합니다. 동시에 작업 그룹 ID가 `my-redshift-workgroup`인 Amazon Redshift 작업 그룹에서 수행되는 작업에 대한 AWS 계정 *`123456789012`*의 액세스를 거부합니다. 작업 그룹에 대한 리소스 수준 권한을 지원하지 않는 다른 Amazon Redshift 작업은 여전히 허용됩니다. Redshift Serverless 작업 및 해당 리소스 유형 목록은 **IAM 사용 설명서에서 [Redshift Serverless의 작업, 리소스 및 조건 키](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonredshiftserverless.html)를 참조하세요.

```
 {
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*",
            "Principal": "*"
        },
        {
            "Action": "*",
            "Effect": "Deny",
            "Resource": "arn:aws:redshift-serverless:us-east-1:123456789012:workgroup:my-redshift-workgroup",
            "Principal": {
                "AWS": [
                    "123456789012"
                ]
            }
        }
    ]
}
```

# Amazon Redshift의 구성 및 취약성 분석
<a name="security-vulnerability-analysis-and-management"></a>

AWS가 게스트 운영 체제(OS) 및 데이터베이스 패치 적용, 방화벽 구성, 재해 복구(DR) 등의 기본 보안 태스크를 처리합니다. 공인된 제3자가 이러한 절차를 검토했습니다. 자세한 내용은 [Amazon Redshift의 규정 준수 확인](security-compliance.md), [공동 책임 모델](https://aws.amazon.com/compliance/shared-responsibility-model/) 및 [보안, 자격 증명 및 규정 준수를 위한 모범 사례](https://aws.amazon.com/architecture/security-identity-compliance/)를 참조하세요.

Amazon Redshift에서는 데이터 웨어하우스에 자동으로 업그레이드 및 패치를 적용하므로 애플리케이션 관리가 아니라 애플리케이션 자체에 더 집중할 수 있습니다. 구성 가능한 유지 관리 기간 동안에 패치 및 업그레이드가 적용됩니다. 자세한 내용은 [유지 관리 기간](managing-cluster-considerations.md#rs-maintenance-windows) 단원을 참조하십시오.

Amazon Redshift 쿼리 편집기 v2는 AWS 관리형 애플리케이션입니다. 모든 패치와 업데이트는 필요에 따라 AWS에 의해 적용됩니다.