Amazon Redshift에서 IAM 역할 연결 - Amazon Redshift

Amazon Redshift에서 IAM 역할 연결

역할을 클러스터에 연결하면 클러스터가 Amazon S3, Amazon Athena, AWS Glue 및 AWS Lambda에 액세스할 수 있는 역할을 맡을 수 있습니다. 클러스터에 연결된 역할에 필요한 리소스에 대한 액세스 권한이 없는 경우 다른 계정에 속한 다른 역할을 함께 묶을 수 있습니다. 그러면 클러스터는 함께 묶은 역할을 일시적으로 수임하여 데이터에 액세스합니다. 역할을 함께 묶어 교차 계정 액세스를 부여할 수도 있습니다. 체인의 각 역할은 클러스터가 체인의 끝에 있는 역할을 수임할 때까지 체인의 다음 역할을 수임합니다. 연결할 수 있는 최대 IAM 역할 수는 할당량에 따라 달라집니다. 자세한 내용은 Amazon Redshift 객체에 대한 할당량에서 할당량 "Amazon Redshift Redshift가 다른 AWS 서비스에 액세스하기 위한 클러스터 IAM 역할" 섹션을 참조하세요.

예를 들어, 회사 A가 회사 B에 속한 Amazon S3 버킷의 데이터에 액세스하려고 한다고 가정합니다. 회사 A는 RoleA라는 Amazon Redshift에 대한 AWS 서비스 역할을 생성하고 해당 클러스터에 연결합니다. 회사 B는 RoleB라는 이름의 역할을 생성합니다. 이는 회사 B 버킷의 데이터에 액세스할 수 있는 권한을 받았습니다. 회사 B 버킷의 데이터에 액세스하려면 회사 A는 iam_role 파라미터를 사용하여 COPY 명령을 실행하고 RoleARoleB를 묶습니다. COPY 작업 기간 동안 RoleARoleB를 수임하여 Amazon S3 버킷에 액세스합니다.

역할을 함께 묶으려면 역할 간에 신뢰 관계를 구성해야 합니다. 또 다른 역할을 수임하는 역할(예: RoleA)에는 다음 묶인 역할(예: RoleB)을 수임하도록 허용하는 권한 정책이 있어야 합니다. 반대로 권한을 전달하는 역할(RoleB)에는 권한을 이전에 묶인 역할(RoleA)로 전달하도록 허용하는 신뢰 정책이 있어야 합니다. 자세한 내용은 IAM User Guide의 Using IAM roles를 참조하세요.

체인의 첫 번째 역할은 클러스터에 연결된 역할이어야 합니다. 첫 번째 역할과 체인의 다음 역할을 수임하는 각 후속 역할에는 특정 문이 포함된 정책이 있어야 합니다. 이 문은 Allow작업 및 sts:AssumeRole 요소에 있는 다음 역할의 Amazon 리소스 이름(ARN)에 Resource 효과를 줍니다. 예를 들어 RoleA에는 RoleB를 수임하도록 허용하는 권한 정책이 있고, 이는 AWS 계정 210987654321이 소유합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1487639602000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::210987654321:role/RoleB" } ] }

다른 역할로 전달하는 역할은 역할을 수임하는 역할 또는 해당 역할을 소유한 AWS 계정과의 신뢰 관계를 설정해야 합니다. 예를 들어 RoleB에는 신뢰 정책이 있어 RoleA와의 신뢰 관계를 설정합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::role/RoleA" } } ] }

다음 신뢰 정책은 RoleA의 소유자인 AWS 계정 123456789012와의 신뢰 관계를 설정합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::123456789012:root" } } ] }
참고

특정 사용자로 역할 연결 권한 부여를 제한하려면 조건을 정의합니다. 자세한 내용은 IAM 역할에 대한 액세스 제한 섹션을 참조하세요.

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에 속한 RoleBs3://companyb/redshift/라는 버킷에 액세스할 수 있는 권한을 가집니다. 다음 예에서는 RoleARoleB를 묶어 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';