

 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에서 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';
```