Amazon Redshift IAM OAuth 설정
Tableau 2023.3.2부터 OAuth 2.0/OIDC를 사용하여 외부 ID 공급자의 ID를 Amazon Redshift에 페더레이션할 수 있습니다.
이들 지침은 이전 AWS IAM 서비스에 적용됩니다. IAM IDC 통합에 대해서는 Amazon Redshift IAM 아이덴티티 센터 OAuth 설정을 참조하십시오.
ID 공급자에 따라 통합을 구성하는 데 여러 단계가 필요할 수 있습니다. 다음은 개요 수준의 정보입니다. Tableau는 AWS 또는 IDP를 구성하는 방법에 대한 자세한 지침을 제공할 수 없지만 일반적인 접근 방식은 아래에 설명되어 있습니다.
1단계: IDP 구성
Tableau Desktop용 IDP 및 Tableau Server 또는 Tableau Cloud에서 OAuth 클라이언트를 만듭니다. Desktop 클라이언트에는
PKCE
활성화가 필요하고http://localhost
리디렉션을 사용해야 합니다.권한 부여에 사용할 사용자 지정 클레임을 역할에 추가합니다. 특히 원본 IAM을 사용하는 경우
DbUser
및DbGroups
에 대한 클레임을 추가하려 할 수 있습니다. 이들은 나중에 IAM 정책에서 사용될 수 있습니다.Tableau OAuth 구성 파일을 만듭니다. GitHub(링크가 새 창에서 열림)의 설명서와 여기(링크가 새 창에서 열림)에서 예시를 참조하십시오. 다른 IDP의 사례도 유용합니다.
Tableau OAuth 구성 ID 앞에 '
custom_
'을 붙여야 합니다.IDP가 동적 localhost 포트를 지원하는 경우
OAUTH_CAP_FIXED_PORT_IN_CALLBACK_URL
을 사용하지 않도록 설정합니다. IDP가 지원하지 않는 경우 구성 파일과 IDP의 허용 목록에 여러 localhost 콜백 URL을 추가해야 합니다.
데스크톱 호스트의 각 응용 프로그램과 연결된
OAuthConfigs
폴더(Tableau Desktop, Tableau Prep Builder, Tableau Bridge)와 OAuth를 사용할 각 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(링크가 새 창에서 열림)라고 합니다.
토큰
기본적으로 Redshift OAuth IAM은 ID 토큰을 드라이버에 전달합니다. Tableau Bridge를 사용하는 고객을 포함하여 온프레미스 고객의 경우 대신 TDC 파일을 사용하여 액세스 토큰을 전달할 수 있습니다.
<connection-customization class='redshift' enabled='true' version='10.0'> <vendor name='redshift' /> <driver name='redshift' /> <customizations> <customization name='CAP_OAUTH_FEDERATE_ACCCESS_TOKEN' value='yes'/> </customizations> </connection-customization>
.tdc 파일 구성 및 설치에 대한 자세한 내용은 연결 사용자 지정 및 조정(링크가 새 창에서 열림) 및 Tableau Server에서 .tdc 파일 사용(링크가 새 창에서 열림)을 참조하십시오.
Okta
Okta를 사용하는 경우 '조직 권한 부여 서버'보다는 '사용자 지정 권한 부여 서버'를 사용하는 것이 더 좋습니다. 사용자 지정 권한 부여 서버가 더 유연합니다. 기본적으로 생성된 'default'라는 사용자 지정 권한 부여 서버가 있습니다. 권한 부여 URL은 다음과 같이 표시됩니다.
https://${yourOktaDomain}/oauth2/{authServerName}/v1/authorize
드라이버 업데이트
기존 IAM 서비스를 사용하는 Redshift OAuth의 경우 다음 중 하나를 사용할 수 있습니다.
버전 1.59 이상의 Redshift ODBC v1 드라이버(https://docs.aws.amazon.com/redshift/latest/mgmt/configure-odbc-connection.html(링크가 새 창에서 열림)에서 다운로드 가능)
버전 2.0.1.0 이상의 Redshift ODBC v2 드라이버(https://github.com/aws/amazon-redshift-odbc-driver/tags(링크가 새 창에서 열림)에서 다운로드 가능). 참고로, OSX용 v2 드라이버는 없습니다.
문제 해결
오류를 진단하는 가장 좋은 방법은 Tableau를 제거하는 것입니다. 대신 드라이버 관리자 또는 유사한 도구를 사용하여 테스트할 수 있습니다. 이 테스트는 문제 해결을 위한 것이므로 이 기능을 일상적으로 사용할 때는 DSN 또는 '기타 ODBC' 커넥터를 사용해서는 안 됩니다. 유효한 테스트를 보장하기 위해, 클러스터 정보, 데이터베이스, 토큰 및 네임스페이스를 제외한 매개 변수는 아래와 같아야 합니다.
첫 번째 연결 시 드라이버에서 유효하지 않거나 만료된 토큰에 대한 오류 메시지가 표시되면(오류 메시지에 [28000] 또는 [08001]과 같은 SQLState 오류 코드가 표시됨) Tableau에서 OAuth 흐름이 성공적으로 완료되었고 드라이버에서 실패한 것입니다. 이는 AWS 측이나 IDP 측의 구성이 잘못되었음을 의미합니다. 또한 드라이버에서 반환되는 사용 권한 또는 권한 부여 오류가 있을 수도 있으며, 이는 또한 Tableau에서 제어할 수 없는 부분입니다.
테스트를 시작하기 전에, 먼저 드라이버에 보낼 액세스 토큰(IAM IDC의 기본값) 또는 새로 고침 토큰(사용자 지정한 경우)을 가져와야 합니다.
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 명령줄 도구를 사용할 수 있습니다.
다른 플러그인은 서버 환경에서 작동하지 않을 수 있으므로 테스트에 사용하지 않는 것이 좋습니다. 고정된 AWS 프로필을 사용하거나 브라우저에 직접 액세스해야 합니다.
다음은 Windows에서 ODBC 드라이버 관리자를 사용하는 예입니다.