

# Athena를 IAM Identity Center에 연결
<a name="using-trusted-identity-propagation-setup"></a>

다음 섹션에서는 Athena를 IAM Identity Center에 연결하는 프로세스를 나열합니다.

## 신뢰할 수 있는 토큰 발급자 설정
<a name="using-trusted-identity-propagation-step1"></a>

신뢰할 수 있는 토큰 발급자를 설정하려면 [신뢰할 수 있는 토큰 발급자 설정](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html) 가이드를 따릅니다. 그러면 AWS IAM Identity Center이 생성됩니다.

**참고**  
**제공업체 유형**에서 **OpenID 연결**을 선택합니다. **제공업체 URL**에 ID 제공업체의 발급자 URL을 입력합니다. **대상**에서 앱의 ID 제공업체가 발급한 클라이언트 ID를 지정합니다.  
 

AWS IAM ID 제공업체의 애플리케이션 리소스 이름(ARN)을 복사합니다. 자세한 내용은 [Identity providers and federation(자격 증명 공급자 및 페더레이션)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)을 참조하세요.

## IAM 역할 설정
<a name="using-trusted-identity-propagation-step2"></a>

### IAM 애플리케이션 역할 설정
<a name="using-trusted-identity-propagation-step2-application-role"></a>

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 왼쪽 탐색 창에서 **역할**을 선택한 다음, **역할 생성**을 선택합니다.

1. **신뢰할 수 있는 엔터티 유형**에서 다음과 같이 **사용자 지정 신뢰 정책**을 선택합니다.

   1. **페더레이션 위탁자**의 경우, 신뢰할 수 있는 토큰 발급자 설정 중에 복사한 AWS IAM ID 제공업체의 ARN을 추가합니다.

   1. 정책 조건의 경우 외부 페더레이션 ID 제공업체의 대상을 추가합니다.

1. [CreateTokenWithIAM](https://docs.aws.amazon.com/singlesignon/latest/OIDCAPIReference/API_CreateTokenWithIAM.html), [ListTagsForResource](https://docs.aws.amazon.com/athena/latest/APIReference/API_ListTagsForResource.html) 및 [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)에 대한 액세스 권한을 사용자에게 부여하려면 다음 인라인 정책을 추가합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "athena:ListTags*",
                   "sso:ListTags*"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------
**참고**  
`CreateTokenWithIam` 권한은 고객 관리형 IAM Identity Center 애플리케이션에서 부여됩니다.

1. 애플리케이션 역할의 ARN을 복사합니다.

### IAM 액세스 역할 설정
<a name="using-trusted-identity-propagation-step2-access-role"></a>

1. IAM 콘솔([https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/))을 엽니다.

1. 왼쪽 탐색 창에서 **역할**을 선택한 다음, **역할 생성**을 선택합니다.

1. **신뢰할 수 있는 엔터티 유형**에서 다음과 같이 **사용자 지정 신뢰 정책**을 선택합니다.

   1. **페더레이션 위탁자**의 경우 신뢰할 수 있는 토큰 발급자 설정 중에 복사된 AWS IAM Identity Center의 ARN을 추가합니다.

   1. **AWS 위탁자**의 경우 IAM 애플리케이션 역할 설정 중에 복사된 AWS IAM 애플리케이션 역할에 대한 ARN을 추가합니다.

1. 다음 **인라인 정책**을 추가하여 드라이버 워크플로에 대한 액세스 권한을 부여합니다.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "athena:StartQueryExecution",
                   "athena:GetQueryExecution",
                   "athena:GetQueryResults",
                   "athena:ListWorkGroups",
                   "athena:ListDataCatalogs",
                   "athena:ListDatabases",
                   "athena:ListTableMetadata"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3:ListBucket",
                   "s3:GetObject",
                   "s3:PutObject"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "glue:GetDatabase",
                   "glue:GetDatabases",
                   "glue:CreateTable",
                   "glue:GetTable",
                   "glue:GetTables",
                   "glue:UpdateTable",
                   "glue:DeleteTable",
                   "glue:BatchDeleteTable",
                   "glue:GetTableVersion",
                   "glue:GetTableVersions",
                   "glue:DeleteTableVersion",
                   "glue:BatchDeleteTableVersion",
                   "glue:CreatePartition",
                   "glue:BatchCreatePartition",
                   "glue:GetPartition",
                   "glue:GetPartitions",
                   "glue:BatchGetPartition",
                   "glue:UpdatePartition",
                   "glue:DeletePartition",
                   "glue:BatchDeletePartition"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lakeformation:GetDataAccess"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

1. 액세스 역할의 ARN을 복사합니다.

## AWS IAM Identity Center 고객 관리형 애플리케이션 구성
<a name="using-trusted-identity-propagation-step3"></a>

고객 관리형 애플리케이션을 구성하려면 [Set up customer managed OAuth 2.0 applications for trusted identity propagation](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2.html)의 단계를 따릅니다. Athena에 대해서는 다음 고려 사항을 따르세요.
+ **태그**에 다음 키-값 페어를 추가합니다.
  + **키** - **AthenaDriverOidcAppArn**
  + **값** - IAM 액세스 역할 설정 중에 복사된 **AccessRoleARN**입니다.
+ [애플리케이션 자격 증명을 지정할](https://docs.aws.amazon.com/singlesignon/latest/userguide/customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2.html#customermanagedapps-trusted-identity-propagation-set-up-your-own-app-OAuth2-specify-application-credentials) 때 IAM 애플리케이션 역할 설정 중에 복사한 AWS IAM 애플리케이션 역할에 대한 ARN을 추가합니다.
+ **요청을 수신할 수 있는 애플리케이션**의 경우 **AWS-Lake-Formation-AWS-Glue-Data-Catalog-<account-id>**를 선택합니다.
+ **적용할 액세스 범위**에서 IAM 지원 작업 그룹의 경우 **lakeformation:query**를 선택하고 Identity Center 지원 작업 그룹의 경우 **lakeformation:query**, **athena:workgroup:read\$1write** 및 **s3:access\$1grants:read\$1write**를 선택합니다.

## 작업 그룹 연결 구성
<a name="using-trusted-identity-propagation-step4"></a>

1. Athena 콘솔 탐색 창에서 **작업 그룹(Workgroups)**을 선택합니다.

1. 목록에서 작업 그룹을 선택하고 **태그** 탭을 엽니다.

1. **태그 관리**를 선택하고 다음을 입력합니다.

   1. **키**-`AthenaDriverOidcAppArn`

   1. **값** - AWS IAM Identity Center 애플리케이션의 ARN입니다.

1. **저장**을 선택합니다.

관리자가 일회성 설정을 완료하면 사용자에게 필수 연결 세부 정보를 배포할 수 있습니다. 사용자가 SQL 워크로드를 실행하려면 다음 다섯 가지 파라미터가 필요합니다.

1. **ApplicationRoleARN** - 애플리케이션 역할의 ARN

1. **JwtWebIdentityToken** – ID 확인을 위한 JWT 토큰

1. **WorkgroupARN** - Athena 작업 그룹의 ARN

1. **JwtRoleSessionName** - JWT 역할의 세션 이름

1. **CredentialsProvider** - 자격 증명 제공업체 구성

**참고**  
전략적 태그 지정을 통해 연결 문자열 구성을 간소화했습니다. Athena 작업 그룹과 AWS IAM Identity Center 고객 관리형 애플리케이션 모두에 태그를 올바르게 지정하면 사용자가 `AccessRoleArn` 및 `CustomerIdcApplicationArn`을 제공하지 않아도 됩니다. 플러그인은 애플리케이션 역할을 사용하여 필요한 태그를 찾고 워크플로에 해당하는 ARN 값을 검색하여 이를 자동으로 처리합니다.  
관리자는 필요에 따라 애플리케이션 역할 권한을 조정하여 사용자가 연결 문자열에서 `AccessRoleArn` 또는 `CustomerIdcApplicationArn`을 제공하도록 할 수 있습니다.

## 신뢰할 수 있는 ID 전파가 활성화된 Athena 드라이버를 사용하여 쿼리 실행
<a name="using-trusted-identity-propagation-step5"></a>

사용하려는 최신 버전의 드라이버를 다운로드합니다. JDBC 설치에 대한 자세한 내용은 [JDBC 3.x 드라이버 시작하기](jdbc-v3-driver-getting-started.md) 섹션을 참조하세요. 지원되는 플랫폼을 기반으로 ODBC 드라이버를 설치하도록 선택할 수 있습니다. 자세한 내용은 [ODBC 2.x 드라이버 시작하기](odbc-v2-driver-getting-started.md) 섹션을 참조하세요. 사용하려는 드라이버에 따라 다음에 나열된 파라미터를 제공합니다.
+ [JDBC 인증 플러그인 연결 파라미터](jdbc-v3-driver-jwt-tip-credentials.md)
+ [ODBC 인증 플러그인 연결 파라미터](odbc-v2-driver-jwt-tip.md)

**참고**  
드라이버를 사용한 신뢰할 수 있는 ID 전파는 JDBC의 버전 3.6.0과 ODBC의 버전 2.0.5.0 이후에만 사용할 수 있습니다.

## DBeaver에서 Athena 드라이버 및 신뢰할 수 있는 ID 전파 사용
<a name="using-trusted-identity-propagation-step6"></a>

1. Athena에서 종속성이 있는 최신 JDBC jar를 다운로드합니다. 자세한 내용은 [Athena JDBC 3.x 드라이버](jdbc-v3-driver.md) 섹션을 참조하세요.

1. 컴퓨터에서 DBeaver 애플리케이션을 엽니다.

1. 화면 상단에서 **데이터베이스** 메뉴로 이동한 다음 **드라이버 관리자**를 선택합니다.

1. **새로 만들기**를 선택한 다음 **라이브러리**를 선택합니다.

1. 최신 드라이버를 추가하고 **클래스 찾기**를 선택합니다. 그러면 `com.amazon.athena.jdbc.AthenaDriver`와 같은 파일 경로가 제공됩니다.

1. **설정** 탭을 열고 다음 필드를 입력합니다.

   1. **드라이버 이름** - Athena JDBC 신뢰할 수 있는 ID 전파

   1. **클래스 이름** - `com.amazon.athena.jdbc.AthenaDriver`

   1. **인증 없음** 옵션을 선택합니다.

1. **데이터베이스에 연결**을 선택하고 Athena JDBC 신뢰할 수 있는 ID 전파를 찾습니다. 그러면 JDBC URL로 이동합니다. 자세한 내용은 [드라이버 구성](jdbc-v3-driver-getting-started.md#jdbc-v3-driver-configuring-the-driver) 섹션을 참조하세요.

1. 다음 세부 정보를 제공합니다.

   1. **작업 그룹** - 쿼리를 실행할 작업 그룹입니다. 작업 그룹에 대한 자세한 내용은 [WorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html)을 참조하세요.

   1. **리전** - 쿼리를 실행할 AWS 리전입니다. 리전 목록은 [Amazon Athena 엔드포인트 및 할당량](https://docs.aws.amazon.com/general/latest/gr/athena.html)을 참조하세요.

   1. **OutputLocation** - 쿼리 결과를 저장할 Amazon S3의 위치입니다. 출력 위치에 대한 자세한 내용은 [ResultConfiguration](https://docs.aws.amazon.com/athena/latest/APIReference/API_ResultConfiguration.html)을 참조하세요.

   1. **CredentialsProvider** - `JWT_TIP`을 입력합니다.

   1. **ApplicationRoleArn** - `AssumeRoleWithWebIdentity`를 활성화할 역할의 ARN입니다. ARN 역할에 대한 자세한 내용은 AWS Security Token Service API 참조의 [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)을 참조하세요.

   1. **WorkgroupArn** - 쿼리가 실행될 작업 그룹의 ARN입니다. **작업 그룹** 필드에 입력한 것과 동일한 작업 그룹이어야 합니다. 작업 그룹에 대한 자세한 내용은 [WorkGroup](https://docs.aws.amazon.com/athena/latest/APIReference/API_WorkGroup.html)을 참조하세요.

   1. **JwtRoleSessionName** – 인증에 JWT 자격 증명을 사용할 때의 세션 이름입니다. 원하는 아무 이름이나 사용할 수 있습니다.

   1. **JwtWebIdentityToken** – 외부 페더레이션형 ID 제공업체로부터 얻은 JWT 토큰입니다. 이 토큰은 Athena로 인증하는 데 사용됩니다.

      ```
      jdbc:athena://Workgroup=<value>;Region=<region>;OutputLocation=<location>;CredentialsProvider=JWT_TIP;ApplicationRoleArn=<arn>;WorkgroupArn=<arn>;JwtRoleSessionName=JDBC_TIP_SESSION;JwtWebIdentityToken=<token>;
      ```

1. **OK**를 선택하여 창을 닫습니다. 이 단계 후에 DBeaver는 메타데이터 로드를 시작하며 카탈로그, 데이터베이스 및 테이블이 채워지는 것을 볼 수 있습니다.
**참고**  
토큰에 JTI 클레임이 존재하고 **OK**를 선택하기 전에 **연결 테스트**를 선택하면 동일한 JTI가 토큰 교환에 재사용되지 않습니다. 자세한 내용은 [신뢰할 수 있는 토큰 발급자의 사전 조건 및 고려 사항](https://docs.aws.amazon.com/singlesignon/latest/userguide/using-apps-with-trusted-token-issuer.html#trusted-token-issuer-prerequisites)을 참조하세요. 이를 처리하기 위해 JDBC는 기본 드라이버 인스턴스에 따라 수명 주기가 달라지는 인 메모리 캐시를 구현합니다. ODBC의 경우 임시 자격 증명을 캐시하고 재사용하여 세션 수명 주기 동안 사용되는 웹 ID 토큰 수를 줄일 수 있는 [파일 캐시](odbc-v2-driver-jwt-tip.md#odbc-v2-driver-jwt-tip-file-cache)를 선택적으로 활용할 수 있습니다.

1. **SQL 쿼리 편집기**를 열고 쿼리 실행을 시작합니다. 사용자의 전파된 ID를 확인하려면 [Cloudtrail 로그](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)를 참조하세요.