Amazon Athena에서 사용자 고유의 ID 공급자 사용
Amazon Athena 커넥터에 사용자 고유의 IdP(ID 공급자)를 사용할 수 있습니다.
참고: ID 공급자가 OAuth 2.0/OIDC를 지원해야 합니다.
개요
사용자 고유의 IdP(ID 공급자)를 설정하는 단계는 사용하는 ID 공급자에 따라 다릅니다. 다음은 프로세스에 대한 대략적인 개요입니다.
- ID 공급자, Tableau 및 데이터 원본 간의 신뢰 관계를 설정합니다.
- Tableau용 OAuth 클라이언트 자격 증명을 만듭니다.
- Tableau에서 OAuth 클라이언트 세부 정보를 구현합니다.
- 페더레이션 ID에 대한 정책을 만듭니다.
- Amazon Athena에 연결합니다.
Amazon Athena 및 Okta 예
다음 예에서는 Tableau, Okta 및 AWS 간에 3방향 신뢰 및 연합 OAuth 솔루션을 만드는 다단계 프로세스를 보여줍니다. 이 문서의 내용은 독자가 이미 Okta 및 AWS 계정을 갖고 있음을 전제로 합니다.
Tableau가 OAuth와 상호 작용하는 방식
이 예에서는 OAuth를 사용하여 Tableau를 데이터에 연결합니다. 올바르게 구성된 경우 사용자가 데이터에 연결을 시도하면 Tableau는 자동으로 사용자를 ID 공급자에게 보내 사용자를 인증하고 데이터에 대한 사용 권한을 위임하는 데 동의합니다. Tableau는 OAuth 액세스 및 새로 고침 토큰을 받아 사용하여 데이터 원본에 연결합니다.
참고: 자세한 지침은 Tableau의 단계에 대해서만 제공됩니다.
1단계: AWS IAM 아이덴티티 센터에서 Okta를 ID 공급자로 설정
이 단계를 수행하려면 Okta와 AWS 모두에서 설정해야 합니다. 자세한 지침은 Amazon 설명서를 참조하십시오.
2단계: Okta에서 Tableau용 OAuth 클라이언트 응용 프로그램 만들기
시작하려면 Okta 설명서에서 응용 프로그램 및 연결을 참조하십시오.
3단계: Tableau에서 OAuth 클라이언트 구현
OAuth는 위임된 액세스 프로토콜입니다. 사용자는 자신을 인증한 후 사용자를 대신하여 작업할 수 있는 권한을 Tableau에 위임합니다. OAuth 클라이언트를 설정하려면 다음 단계를 완료하십시오.
참고: 다음 단계에서는 OAuth 구성 파일을 사용해야 합니다. OAuth 구성 파일이 없는 경우 이 페이지 하단이나 Github 페이지의 OAuth 구성 파일 아래에서 예시를 찾을 수 있습니다.
Tableau Server 또는 Tableau Cloud
- Tableau Server 또는 Tableau Cloud 사이트 설정으로 이동합니다.
- Okta 응용 프로그램에서 OAuth 클라이언트 ID와 클라이언트 암호를 추가합니다.
- OAuth 구성 파일을 업로드합니다.
- OAuth 클라이언트 추가를 선택하여 완료합니다.
Tableau Desktop 및 Tableau Bridge 클라이언트
- OAuth 구성 파일을 저장한 디렉터리에서 엽니다.
- Tableau Desktop용 Okta 앱의 정보를 사용하여 XML 파일의 ClientID, 클라이언트 암호, authUri 및 tokenUri를 조정합니다.
- 내 Tableau 리포지토리 폴더의 "OAuthConfigs" 폴더에 OAuth 구성 파일을 저장합니다.
- Bridge 클라이언트를 실행 중인 경우 Bridge 클라이언트를 다시 시작하여 새 OAuth 구성이 로드되었는지 확인합니다.
4단계. AWS에서 페더레이션 ID에 대한 정책 만들기
Tableau 페더레이션 ID 응용 프로그램(clientID)이 AssumeRoleWithWebIdentity에서 신뢰할 수 있도록 허용하는 AWS 신뢰 관계를 만듭니다. 이 단계는 AWS에서 수행해야 하며, 자세한 지침은 Amazon 설명서에서 사용자 및 그룹에 AWS 리소스에 대한 액세스 권한 부여(영문)를 참조하십시오.
4단계를 수행하면 사용자가 AWS에 제공한 IAM 역할과 함께 Okta에서 받은 OIDC ID 토큰(사용자 인증 후)을 Tableau가 제공할 수 있습니다. AWS는 Okta에서 토큰과 서명을 검증하고, 토큰에서 사용자 ID를 추출하고, 사용자와 IAM 역할의 매핑을 조회하고, Tableau가 사용자를 대신하여 역할을 맡는 것을 허용하거나 차단할 수 있습니다. 즉, AssumeRoleWithWebIdentity를 사용할 수 있습니다.
5단계: Athena에 연결
Tableau Server, Tableau Cloud 또는 Tableau Desktop에서 다음 단계를 완료하십시오.
- Tableau에 로그인합니다.
- 연결 아래에서 서버에 연결을 선택합니다.
- Amazon Athena를 선택합니다.
- 연결 대화 상자에서 Tableau가 맡을 역할에 해당하는 연결 매개 변수와 ARN을 입력합니다.
- 3단계에서 구성한 OAuth 공급자를 선택합니다. (OAuth 클라이언트가 하나만 존재하는 경우 해당 클라이언트가 기본값이 됩니다. OAuth 클라이언트가 두 개 이상 존재하는 경우 Creator는 필요에 따라 선택할 수 있습니다.)
- 로그인을 선택하여 Amazon Athena에 연결합니다.
OAuth 구성 파일 예
다음 파일을 템플릿으로 사용하여 사용자 자신의 OAuth 파일을 만들 수 있습니다. 단, 클라이언트 ID와 같은 특정 정보로 업데이트해야 합니다.
OAuth 구성 파일 예
<pluginOAuthConfig>
<dbclass>athena</dbclass>
<oauthConfigId>custom_NAME</oauthConfigId>
<!-- MUST INCLUDE "custom_" -->
<clientIdDesktop>CLIENT_ID</clientIdDesktop>
<clientSecretDesktop>CLIENT_SECRET</clientSecretDesktop>
<redirectUrisDesktop>http://localhost:56666/Callback</redirectUrisDesktop>
<redirectUrisDesktop>http://localhost:56667/Callback</redirectUrisDesktop>
<!--
<redirectUrisDesktop>http://localhost:56668/Callback</redirectUrisDesktop>
-->
<authUri>AUTH_URI</authUri>
<tokenUri>TOKEN_URI</tokenUri>
<!-- EXAMPLEs
<authUri>https://EXAMPLE.okta.com/oauth2/v1/authorize</authUri>
<tokenUri>https://EXAMPLE.okta.com/oauth2/v1/token</tokenUri>
-->
<!--
<scopes>openid</scopes>
<scopes>email</scopes>
<scopes>profile</scopes>
<scopes>offline_access</scopes>
-->
<scopes>openid email profile offline_access</scopes>
<capabilities>
<entry>
<key>OAUTH_CAP_SUPPORTS_HTTP_SCHEME_LOOPBACK_REDIRECT_URLS</key>
<value>false</value>
</entry>
<entry>
<key>OAUTH_CAP_FIXED_PORT_IN_CALLBACK_URL</key>
<value>true</value>
</entry>
<entry>
<key>OAUTH_CAP_PKCE_REQUIRES_CODE_CHALLENGE_METHOD</key>
<value>false</value>
</entry>
<entry>
<key>OAUTH_CAP_REQUIRE_PKCE</key>
<value>false</value>
</entry>
<entry>
<key>OAUTH_CAP_SUPPORTS_STATE</key>
<value>true</value>
</entry>
<entry>
<key>OAUTH_CAP_SUPPORTS_CUSTOM_DOMAIN</key>
<value>false</value>
</entry>
<entry>
<key>OAUTH_CAP_CLIENT_SECRET_IN_URL_QUERY_PARAM</key>
<value>true</value>
</entry>
<entry>
<key>OAUTH_CAP_SUPPORTS_GET_USERINFO_FROM_ID_TOKEN</key>
<value>true</value>
</entry>
<entry>
<key>OAUTH_CAP_USE_SCOPE_IN_REFRESH_REQUEST</key>
<value>true</value>
</entry>
</capabilities>
<accessTokenResponseMaps>
<entry>
<key>ACCESSTOKEN</key>
<value>access_token</value>
</entry>
<entry>
<key>REFRESHTOKEN</key>
<value>refresh_token</value>
</entry>
<entry>
<key>id-token</key>
<value>id_token</value>
</entry>
<entry>
<key>access-token-issue-time</key>
<value>issued_at</value>
</entry>
<entry>
<key>access-token-expires-in</key>
<value>expires_in</value>
</entry>
<entry>
<key>username</key>
<value>preferred_username</value>
</entry>
</accessTokenResponseMaps>
<refreshTokenResponseMaps>
<entry>
<key>ACCESSTOKEN</key>
<value>access_token</value>
</entry>
<entry>
<key>REFRESHTOKEN</key>
<value>refresh_token</value>
</entry>
<entry>
<key>id-token</key>
<value>id_token</value>
</entry>
<entry>
<key>access-token-issue-time</key>
<value>issued_at</value>
</entry>
<entry>
<key>access-token-expires-in</key>
<value>expires_in</value>
</entry>
</refreshTokenResponseMaps>
</pluginOAuthConfig>