Amazon Redshift IAM OAuth 설정

온프레미스(Tableau Desktop, Tableau Server 및 Tableau Prep)의 경우 Tableau 2023.3.2부터, Tableau Cloud의 경우 2024년 3월 말부터 OAuth 2.0/OIDC를 사용하여 외부 ID 공급자의 ID를 Amazon Redshift에 페더레이션할 수 있습니다. 이 기능이 제공될 때까지 Tableau Cloud에서 해결 방법으로 Tableau Bridge를 사용할 수 있습니다. Bridge에 대한 자세한 정보는 Bridge를 사용하여 데이터를 최신 상태로 유지를 참조하십시오.

이들 지침은 이전 AWS IAM 서비스에 적용됩니다. IAM IDC 통합에 대해서는 Amazon Redshift IAM 아이덴티티 센터 OAuth 설정을 참조하십시오.

ID 공급자에 따라 통합을 구성하는 데 여러 단계가 필요할 수 있습니다. 다음은 개요 수준의 정보입니다. Tableau는 AWS 또는 IDP를 구성하는 방법에 대한 자세한 지침을 제공할 수 없지만 일반적인 접근 방식은 아래에 설명되어 있습니다.

IdP 구성

  1. Tableau Desktop용 IDP 및 Tableau Server 또는 Tableau Cloud에서 OAuth 클라이언트를 만듭니다. Desktop 클라이언트에는 PKCE 활성화가 필요하고 http://localhost 리디렉션을 사용해야 합니다.

  2. 권한 부여에 사용할 사용자 지정 클레임을 역할에 추가합니다. 특히 원본 IAM을 사용하는 경우 DbUserDbGroups에 대한 클레임을 추가하려 할 수 있습니다. 이들은 나중에 IAM 정책에서 사용될 수 있습니다.

  3. Tableau OAuth 구성 파일을 만듭니다. GitHub(링크가 새 창에서 열림)의 설명서와 여기(링크가 새 창에서 열림)에서 예시를 참조하십시오. 다른 IDP의 사례도 유용합니다.

    1. Tableau OAuth 구성 ID 앞에 'custom_'을 붙여야 합니다.

    2. IDP가 동적 localhost 포트를 지원하는 경우 OAUTH_CAP_FIXED_PORT_IN_CALLBACK_URL을 사용하지 않도록 설정합니다. IDP가 지원하지 않는 경우 구성 파일과 IDP의 허용 목록에 여러 localhost 콜백 URL을 추가해야 합니다.

  4. 데스크톱 컴퓨터 및 Tableau Server 또는 Tableau Cloud 사이트에 Tableau OAuth 구성 파일을 설치합니다.

AWS에서 IDP 구성

1. AWS에서 IDP 모델을 만듭니다. Amazon 설명서 웹 아이덴티티 페더레이션(링크가 새 창에서 열림)OIDC ID 공급자 생성(링크가 새 창에서 열림)을 참조하십시오.

2. 특히 IDP를 위해 역할과 정책을 만듭니다. AWS 설명서에서 OIDC를 위한 역할 생성(링크가 새 창에서 열림)을 참조하십시오.

Redshift 사용자의 역할 구성

Redshift에 필요한 정책을 연결할 수 있습니다. 토큰의 사용자 지정 클레임을 사용하여 역할에 권한을 부여할 수도 있습니다. AWS 설명서(링크가 새 창에서 열림)에 SAML을 사용한 몇 가지 예가 있습니다. 이들 예는 OAuth에 쉽게 적용할 수 있습니다. OAuth의 경우 클레임은 'DbUser', 'DbGroups' 등입니다.

다음은 AWS 설명서에 있는 정책의 예입니다.

{
"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:12345:dbuser:cluster-identifier/${redshift:DbUser}"
},
{
"Effect": "Allow",
"Action": "redshift:JoinGroup",
"Resource": "arn:aws:redshift:us-west-1:12345:dbgroup:cluster-identifier/my_dbgroup"
},
{
"Effect": "Allow",
"Action": [
"redshift:DescribeClusters",
"iam:ListRoles"
],
"Resource": "*"
}
]
}

Redshift에 연결

사용자는 맡을 역할 ARN을 지정한 다음 이전에 설치된 OAuth 구성을 선택해야 합니다.

올바로 구성되면 사용자는 Tableau에 대해 토큰을 인증하고 권한을 부여할 수 있도록 IDP로 리디렉션됩니다. Tableau에 openid 및 새로 고침 토큰이 수신됩니다. AWS는 IDP에서 토큰과 서명을 검증하고, 토큰에서 클레임을 추출하고, 클레임과 IAM 역할의 매핑을 조회하고, Tableau가 사용자를 대신하여 역할을 맡는 것을 허용하거나 차단할 수 있습니다. 이를 AssumeRoleWithWebIdentity(링크가 새 창에서 열림)라고 합니다.

Okta

Okta를 사용하는 경우 '조직 권한 부여 서버'보다는 '사용자 지정 권한 부여 서버'를 사용하는 것이 더 좋습니다. 사용자 지정 권한 부여 서버가 더 유연합니다. 기본적으로 생성된 'default'라는 사용자 지정 권한 부여 서버가 있습니다. 권한 부여 URL은 다음과 같이 표시됩니다.

https://${yourOktaDomain}/oauth2/{authServerName}/v1/authorize

 

드라이버 업데이트

기존 IAM 서비스를 사용하는 Redshift OAuth의 경우 다음 중 하나를 사용할 수 있습니다.

문제 해결

첫 번째 연결 시 드라이버에서 유효하지 않거나 만료된 토큰에 대한 오류 메시지가 표시되면(오류 메시지에 [28000] 또는 [08001]과 같은 SQLState 오류 코드가 표시됨) OAuth 흐름이 성공적으로 완료되었고 드라이버에서 실패한 것입니다. 이는 AWS 측이나 IDP 측의 구성이 잘못되었음을 의미합니다. 또한 드라이버에서 반환되는 사용 권한 또는 권한 부여 오류가 있을 수도 있으며, 이는 또한 당사가 제어할 수 없는 부분입니다.

이러한 오류를 진단하는 가장 좋은 방법은 Tableau를 제거하는 것입니다. 먼저 드라이버에 보낼 ID 토큰(기본값) 또는 액세스 토큰(사용자 지정한 경우)을 가져와야 합니다. Okta를 예로 들면 다음과 같습니다. 이를 수행하는 방법은 거의 모든 IDP에서 매우 유사합니다. 이 방식을 사용하려면 리소스 소유자 비밀번호 부여 유형을 사용하도록 설정해야 합니다. IDP URL, 클라이언트 암호, 클라이언트 ID, 사용자 이름 및 비밀번호를 입력하십시오.

curl -X POST "https://OKTA_URL/v1/token" \
-H 'accept: application/json' \
-H "Authorization: Basic $(echo -n 'CLIENTID:CLIENTSECRET' | base64)" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=password&username=USER&password=PASSWORD&scope=openid"

토큰이 있으면 DSN을 사용하여 테스트할 수 있습니다. 다음은 Windows에서 ODBC 드라이버 관리자를 사용하는 예입니다. Mac에서는 iODBC 드라이버 관리자 UI를 사용할 수 있습니다. Linux에서는 Tableau Server의 customer-bin 폴더에 포함된 isql 명령줄 도구를 사용할 수 있습니다.

피드백을 제공해 주셔서 감사합니다!귀하의 피드백이 제출되었습니다. 감사합니다!