제퍼넷 로고

Active Directory Federation Services를 사용하여 AWS 중국 리전의 Amazon Redshift 클러스터에 대한 연동 액세스

시간

많은 고객이 이미 싱글 사인온 액세스를 위해 ID 공급자(IdP)를 통해 사용자 ID를 관리하고 있습니다. AD FS(Active Directory Federation Services)와 같은 IdP를 사용하여 연합 액세스를 설정할 수 있습니다. 아마존 레드 시프트 클러스터를 비즈니스 그룹별로 데이터베이스 개체에 대한 권한을 제어하는 ​​메커니즘으로 사용합니다. 이는 원활한 사용자 경험을 제공하고 최종 사용자에 대한 인증 및 권한 거버넌스를 중앙 집중화합니다. 자세한 내용은 블로그 게시물 시리즈 "Active Directory Federation Services(AD FS)를 사용하여 Amazon Redshift 클러스터에 대한 액세스 연합"(일부 1, 일부 2).

구현 방식의 차이로 인해 중국의 아마존 웹 서비스, 고객은 그에 따라 구성을 조정해야 합니다. 예를 들어 AWS 중국 리전(베이징 및 닝샤)은 별도의 AWS 파티션, 따라서 모든 Amazon 리소스 이름(ARN)에는 접미사가 포함됩니다. -cn. AWS 중국 리전은 다른 도메인에서도 호스팅됩니다. www.amazonaws.cn.

이 게시물에서는 AWS 중국 리전에서 Amazon Redshift에 대한 연동 액세스를 설정하는 단계별 절차를 소개합니다. 주의해야 할 주요 차이점을 정확히 지적하고 일반적인 오류에 대한 문제 해결 가이드를 제공합니다.

솔루션 개요

다음 다이어그램은 프로세스를 보여줍니다. 보안 주장 마크업 언어 2.0 (SAML) AWS 중국 리전의 Amazon Redshift에 대한 연동 액세스. 워크플로에는 다음과 같은 주요 단계가 포함됩니다.

  1. SQL 클라이언트는 AD FS에 사용자 이름과 암호를 제공합니다.
  2. AD FS는 자격 증명을 인증하고 SAML 응답을 반환합니다. 성공하면.
  3. SQL 클라이언트는 API를 호출합니다. AWS 보안 토큰 서비스 (AWS STS) SAML에서 선호하는 역할을 맡습니다..
  4. AWS STS는 상호 신뢰를 기반으로 SAML 응답을 인증하고 성공하면 임시 자격 증명을 반환합니다.
  5. SQL 클라이언트는 Amazon Redshift와 통신하여 임시 자격 증명이 있는 데이터베이스 사용자, 그런 다음 이를 사용하여 데이터베이스 그룹에 가입하고 지정된 데이터베이스에 연결합니다.

건축

다음과 같은 높은 수준의 단계로 연습을 구성합니다.

  1. AWS 중국 리전에 대한 AD FS 신뢰 당사자 트러스트를 구성하고 기본 클레임 규칙을 정의합니다.
  2. 프로비저닝 AWS 자격 증명 및 액세스 관리 (IAM) 자격 증명 공급자 및 역할.
  3. IAM 리소스를 기반으로 나머지 신뢰 당사자 트러스트의 클레임 규칙을 완료합니다.
  4. JDBC 기반 SQL 클라이언트를 통해 연동 액세스로 Amazon Redshift에 연결합니다.

사전 조건

이 게시물은 다음과 같은 전제 조건이 있다고 가정합니다.

  • 윈도우 서버 2016
  • AD에서 사용자 및 그룹 생성 기능
  • AD FS에서 신뢰 당사자 트러스트를 구성하고 클레임 규칙을 정의하는 기능
  • AWS 계정
  • IAM 자격 증명 공급자, 역할, 아마존 가상 프라이빗 클라우드 (Amazon VPC) 관련 리소스 및 Amazon Redshift 클러스터 AWS 클라우드 개발 키트 (AWS 씨디케이)

AD FS 신뢰 당사자 트러스트 구성 및 클레임 규칙 정의

신뢰 당사자 트러스트를 통해 AWS와 AD FS는 서로 통신할 수 있습니다. 동일한 AD FS에서 AWS 중국 리전과 AWS 리전 모두에 대해 두 개의 신뢰 당사자 트러스트를 동시에 구성할 수 있습니다. AWS 중국 리전의 경우 다른 SAML 메타데이터 문서 at https://signin.amazonaws.cn/static/saml-metadata.xml. AWS 중국 리전에 대한 신뢰 당사자의 식별자는 urn:amazon:webservices:cn-north-1, AWS 글로벌 리전의 경우 urn:amazon:webservices. 이 게시물의 뒷부분에서 사용할 이 식별자를 기록해 둡니다.

신뢰 당사자 메타데이터 XML

AD 그룹 및 사용자 추가

SAML 기반 연동을 통해 최종 사용자는 IAM 역할을 수임하고 이를 사용하여 여러 데이터베이스(DB) 그룹에 조인합니다. 이러한 역할 및 DB 그룹에 대한 권한은 AD 그룹에서 효과적으로 관리할 수 있습니다. AD 그룹 이름에 서로 다른 접두사를 사용하여 구분하므로 역할 및 DB 그룹 클레임 규칙에 매핑하는 데 도움이 됩니다. 두 가지 유형의 AD 그룹은 서로 다른 AWS 리소스에 매핑되기 때문에 올바르게 구별하는 것이 중요합니다.

예제를 통해 연습을 계속합니다. 비즈니스에서 데이터 과학자와 데이터 엔지니어라는 두 가지 역할과 종양학과 약학이라는 두 개의 DB 그룹이 있다고 가정합니다. 데이터 과학자는 두 그룹에 모두 가입할 수 있으며 데이터 엔지니어는 약국 그룹에만 가입할 수 있습니다. AD 측에서는 각 역할 및 그룹에 대해 하나의 AD 그룹을 정의합니다. AWS 측에서는 각 역할에 대해 하나의 IAM 역할을 정의하고 각 DB 그룹에 대해 하나의 Amazon Redshift DB 그룹을 정의합니다. Clement가 데이터 과학자이고 Jimmy가 데이터 엔지니어이며 둘 다 이미 AD에서 관리하고 있다고 가정합니다. 다음 다이어그램은 이 관계를 보여줍니다.

IAM 역할 및 DB 그룹에 대한 AD 그룹 및 사용자 매핑

당신은 할 수있다 AD 그룹 및 사용자 생성 둘 중 하나와 AWS 명령 줄 인터페이스 (AWS CLI) 또는 AWS 관리 콘솔. README 파일에 샘플 명령을 제공합니다. GitHub 리포지토리.

하위 단계 따르기 ao 2단계의 AD FS를 사용하여 JDBC 또는 ODBC Single Sign-on 인증 설정 AWS 중국 리전에 대한 올바른 SAML 메타데이터 문서로 신뢰 당사자를 설정하고 처음 세 가지 클레임 규칙(NameId, RoleSessionNameGet AD Groups). IAM 자격 증명 공급자와 역할이 프로비저닝된 후 재개됩니다.

IAM 자격 증명 공급자 및 역할 프로비저닝

IAM 자격 증명 공급자를 프로비저닝하여 AWS와 AD에 대한 신뢰를 구축합니다. IAM 자격 증명 공급자와 수임된 역할은 하나의 AWS 계정에 있어야 합니다. 그렇지 않으면 연동 액세스 중에 "Principal이 수임 중인 역할의 계정 외부에 있습니다."라는 오류 메시지가 표시됩니다. 리소스를 프로비저닝하려면 다음 단계를 따르세요.

  1. 에서 메타데이터 파일을 다운로드하십시오. https://yourcompany.com/FederationMetadata/2007-06/FederationMetadata.xml AD FS 서버에서.
  2. 로컬에 저장 /tmp/FederationMetadata.xml.
  3. 체크 아웃 GitHub의 AWS CDK 코드.
  4. AWS CDK를 사용하여 redshift-cn:
export AWS_ACCOUNT=YOUR_AWS_ACCOUNT
export AWS_DEFAULT_REGION=cn-north-1
export AWS_PROFILE=YOUR_PROFILE cdk deploy redshift-cn --require-approval never

AWS CDK 버전은 2.0 이상이어야 합니다.. 테스트 목적으로 다음을 사용할 수 있습니다. AdministratorAccess 배포를 위한 관리형 정책. 프로덕션 용도의 경우 최소 권한이 있는 프로필을 사용하십시오.

다음 표에는 AWS CDK 패키지가 프로비저닝하는 리소스가 요약되어 있습니다.

예배 자원 카운트 노트
아마존 VPC VPC 1 .
서브넷 2 .
인터넷 게이트웨이 1 .
라우팅 테이블 1 .
보안 그룹 1 .
IAM SAML ID 공급자 1 .
직위별 3 클러스터에 대한 1개의 서비스 역할
2개의 연합 역할
아마존 레드 시프트 클러스터 1 노드 1개, dc2.large
AWS 비밀 관리자 비밀 1 .

이 예에서 공개적으로 접근 가능 Amazon Redshift 클러스터의 설정은 사용 단순함을 위해. 그러나 프로덕션 환경에서는 이 설정을 비활성화하고 클러스터를 프라이빗 서브넷 그룹에 배치해야 합니다. 인용하다 로컬 시스템에서 프라이빗 Amazon Redshift 클러스터에 액세스하려면 어떻게 해야 합니까?

보안 그룹 구성

Amazon Redshift 클러스터에 대한 연결을 허용하도록 IP 주소에 대한 인바운드 규칙을 추가합니다.

  1. 이름이 지정된 보안 그룹 찾기 RC Default Security Group.
  2. 컴퓨터의 공개 IP 주소를 얻습니다.
  3. 이 IP 주소에 대한 인바운드 규칙과 Amazon Redshift 5439에 대한 기본 포트를 추가합니다.

나머지 클레임 규칙 완료

IAM 자격 증명 공급자 및 역할을 프로비저닝한 후 SAML 역할을 정의하는 클레임 ​​규칙을 추가합니다. 이름으로 고객 클레임 규칙을 추가합니다. Roles. 접두사가 있는 AD 그룹을 찾습니다. role_ 결합된 ARN 문자열로 대체합니다. 파티션이 있는 리소스의 ARN에 주의하십시오. aws-cn. 바꾸다 AWS_ACCOUNT 귀하의 AWS 계정 ID로. 다음 표는 선택한 AD 그룹이 IAM 역할 ARN으로 변환되는 방법을 보여줍니다.

선택한 광고 그룹 변환된 IAM 역할 ARN
role_data_scientist arn:aws-cn:iam::AWS_ACCOUNT:role/rc_data_scientist
role_data_engineer arn:aws-cn:iam::AWS_ACCOUNT:role/rc_data_engineer

신뢰 당사자 클레임 규칙

클레임 규칙을 추가하려면 Windows Server에서 AD FS 관리 콘솔을 열고 다음 단계를 완료하십시오.

  1. 왼쪽 메뉴에서 파티 트러스트를 의존을 클릭한 다음 AWS 중국에 대한 신뢰 당사자를 선택합니다.
  2. 왼쪽 메뉴에서 클레임 발행 정책 수정다음을 선택 역할 추가.
  3. 클레임 규칙 템플릿 메뉴, 선택 사용자 지정 규칙을 사용하여 클레임 보내기.
  4. 럭셔리 클레임 규칙 이름, 입력 Roles.
  5. . 맞춤 규칙 섹션에서 다음을 입력합니다.
c:[Type == "http://temp/variable", Value =~ "(?i)^role_"]
=> issue(Type = "https://aws.amazon.com/SAML/Attributes/Role",
Value = RegExReplace(c.Value, "role_", "arn:aws-cn:iam::AWS_ACCOUNT:saml-provider/rc-provider,arn:aws-cn:iam::AWS_ACCOUNT:role/rc_"));

선택적 매개변수 of DbUser, AutoCreateDbGroups JDBC 연결 매개변수 또는 SAML 속성 값을 통해 제공될 수 있습니다. 사용자 연합의 이점은 사용자를 한 곳에서 중앙 집중식으로 관리할 수 있다는 것입니다. 따라서 DbUser 값은 SAML 속성에 의해 자동으로 제공되어야 합니다. 그만큼 AutoCreate 매개변수는 항상 true, 그렇지 않으면 사전에 DB 사용자를 생성해야 합니다. 마지막으로, DbGroups 매개변수는 이러한 관계가 AD에 정의된 경우 SAML 속성에 의해 제공될 수 있습니다.

요약하자면 최소한 다음을 제공하는 것이 좋습니다. DbUserAutoCreate 최종 사용자가 더 짧은 연결 문자열을 작성하여 시간을 절약할 수 있도록 SAML 속성에서. 이 예에서는 SAML 속성을 통해 세 가지 매개변수를 모두 제공합니다.

  1. 이라는 고객 클레임 규칙 추가 DbUser. 이메일 주소를 값으로 사용합니다. DbUser:
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory",
types = ("https://redshift.amazon.com/SAML/Attributes/DbUser"),
query = ";mail;{0}", param = c.Value);

일반적으로 이메일 주소의 사용자 이름인 SAM(보안 계정 관리자) 계정 이름을 선택할 수도 있습니다. 이메일 주소 사용은 IAM 역할 정책 설정에서 중요한 역할을 합니다. 이 문제는 나중에 다시 다루겠습니다.

  1. 이라는 사용자 지정 클레임 규칙을 추가합니다. AutoCreate:
=> issue(type = "https://redshift.amazon.com/SAML/Attributes/AutoCreate", value = "true");

  1. 이라는 고객 클레임 규칙 추가 DbGroups. 접두사가 있는 모든 AD 그룹을 찾습니다. group_ DbGroups에 대한 값으로 나열합니다.
c:[Type == "http://temp/variable", Value =~ "(?i)^group_"]
=> issue(Type = "https://redshift.amazon.com/SAML/Attributes/DbGroups", Value = c.Value);

다음을 통해 이전 설정이 올바른지 테스트할 수 있습니다. 브라우저를 통해 SAML 응답 얻기.

  1. 방문 https://yourcompany.com/adfs/ls/IdpInitiatedSignOn.aspx Windows Server에서 사용자로 로그인 clement, 다음 SAML 속성이 있는지 확인합니다. 사용자용 jimmy, 역할은 rc_data_engineer DB 그룹에는 group_pharmacy.
<AttributeStatement> <Attribute Name="https://aws.amazon.com/SAML/Attributes/RoleSessionName"> <AttributeValue>clement@yourcompany.com</AttributeValue> </Attribute> <Attribute Name="https://aws.amazon.com/SAML/Attributes/Role"> <AttributeValue>arn:aws-cn:iam::AWS_ACCOUNT:saml-provider/rc-provider,arn:aws-cn:iam::AWS_ACCOUNT:role/rc_data_scientist</AttributeValue> </Attribute> <Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbUser"> <AttributeValue>clement@yourcompany.com</AttributeValue> </Attribute> <Attribute Name="https://redshift.amazon.com/SAML/Attributes/AutoCreate"> <AttributeValue>true</AttributeValue> </Attribute> <Attribute Name="https://redshift.amazon.com/SAML/Attributes/DbGroups"> <AttributeValue>group_pharmacy</AttributeValue> <AttributeValue>group_oncology</AttributeValue> </Attribute>
</AttributeStatement>

위의 SAML 속성 이름은 AWS 중국 리전에 유효한 것으로 확인되었습니다. URL은 다음으로 끝납니다. amazon.com. 로 변경하는 것은 옳지 않습니다. amazonaws.cn or amazon.cn.

SQL 클라이언트를 사용하여 Amazon Redshift에 연결

우리는 JDBC 기반 SQL 워크 벤치 / J (SQL 클라이언트) Amazon Redshift 클러스터에 연결합니다. Amazon Redshift는 DB 그룹을 사용하여 DB 사용자를 수집합니다. 데이터베이스 권한은 그룹 수준에서 집합적으로 관리됩니다. 이 게시물에서는 권한 관리에 대해 자세히 다루지 않습니다. 단, 앞의 두 DB 그룹을 생성해야 합니다.

  1. 프로비저닝된 클러스터에 연결하고 그룹을 생성합니다. 다음을 통해 AWS Management 콘솔에 연결할 수 있습니다. 쿼리 편집기 임시 자격 증명을 사용하거나 데이터베이스 사용자가 있는 SQL 클라이언트를 통해 admin 및 암호. 비밀번호는 에 저장됩니다. AWS 비밀 관리자. 위 작업에 대한 적절한 권한이 필요할 수 있습니다.
create group group_oncology;
create group group_pharmacy;

  1. 지침을 따르십시오. SQL Workbench/J를 사용하여 클러스터에 연결 SQL 클라이언트 및 Amazon Redshift JDBC 드라이버를 다운로드하고 설치합니다.

우리는 추천 AWS SDK 드라이버 종속 라이브러리가 있는 JDBC 드라이버 버전 2.1.

  1. 클러스터가 엔드포인트를 통해 연결할 수 있는지 테스트합니다. 기본 사용자 이름은 admin. Secrets Manager를 통해 클러스터 암호의 암호 값을 검색합니다. 지정 DSILogLevel 과 LogPath드라이버 로그 수집 및 진단을 돕습니다. 연결 문자열은 다음 코드와 같습니다. 바꾸다 CLUSTER_ENDPOINT 올바른 값으로 모든 줄 바꿈을 삭제하십시오. 가독성을 위해 줄을 나눴습니다.
jdbc:redshift://CLUSTER_ENDPOINT.cn-north-1.redshift.amazonaws.com.cn:5439/main
;ssl_insecure=true
;DSILogLevel=3
;LogPath=/tmp

AWS 중국 리전의 경우 하나의 추가 JDBC 드라이버 옵션 loginToRp AWS 중국 리전에 대해 별도의 신뢰 당사자 트러스트를 설정할 때 설정해야 합니다. AD 사용자가 둘 이상의 AWS 역할에 매핑된 경우 연결 문자열에서 다음을 사용합니다. preferred_role 연합 액세스에 대해 수임할 정확한 역할을 지정합니다.

  1. 역할 ARN을 직접 복사하고 aws-cn 분할.

사용자가 하나의 역할에만 매핑된 경우 이 옵션을 생략할 수 있습니다.

  1. 교체 CLUSTER_ID 올바른 클러스터 식별자로 사용자 이름에 대해 다음을 입력합니다. yourcompanyclement; 암호로 AD의 자격 증명을 입력합니다.
jdbc:redshift:iam://CLUSTER_ID:cn-north-1/main
;ssl_insecure=true
;DSILogLevel=3
;LogPath=/tmp
;loginToRp=urn:amazon:webservices:cn-north-1
;plugin_name=com.amazon.redshift.plugin.AdfsCredentialsProvider
;idp_host=adfsserver.yourcompany.com
;preferred_role=arn:aws-cn:iam::AWS_ACCOUNT:role/rc_data_scientist

  1. 연결되면 다음 스크린샷과 같이 SQL 문을 실행합니다.

접두어가 붙은 사용자 IAMA 사용자가 연합 액세스로 연결되어 자동 생성되었음을 나타냅니다.

사용자를 쿼리하는 SQL Workbench

  1. 선택적 단계로 연결 문자열에서 다음을 설정할 수 있습니다. DbUser, AutoCreateDbGroups 매개 변수를 설정합니다.

연결 문자열의 매개변수는 SAML 특성의 매개변수보다 앞에 있습니다. 최소한으로 설정하는 것이 좋습니다. DbUserAutoCreate SAML 속성을 통해. AD 사용자의 DB 그룹 관리가 어렵거나 유연성을 원할 경우 지정 DbGroups 연결 문자열에서. 다음 코드를 참조하십시오.

jdbc:redshift:iam://CLUSTER_ID:cn-north-1/main
;ssl_insecure=true
;DSILogLevel=3
;LogPath=/tmp
;loginToRp=urn:amazon:webservices:cn-north-1
;plugin_name=com.amazon.redshift.plugin.AdfsCredentialsProvider
;idp_host=adfsserver.yourcompany.com
;preferred_role=arn:aws-cn:iam::AWS_ACCOUNT:role/rc_data_scientist
;DbUser=clement@yourcompany.com
;AutoCreate=true
;DbGroups=group_oncology

이메일 또는 SAM 계정 이름을 DB 사용자로 사용

역할 정책은 다음을 따릅니다. GetClusterCredentials 사용을 위한 정책 예시. 그것은 더 허용 redshift:DescribeClusters 역할이 해당 식별자와 지역을 기반으로 클러스터 엔드포인트와 포트를 쿼리하기 때문입니다. DB 사용자가 AD 사용자와 동일한지 확인하기 위해 이 게시물에서는 다음 조건을 사용하여 확인합니다. ROLE_ID 이다 고유 식별자 역할의:

{"StringEqualsIgnoreCase": {"aws:userid": "ROLD_ID:${redshift:DbUser}"}}

예제 정책은 다음 조건을 사용합니다.

{"StringEqualsIgnoreCase": {"aws:userid": "ROLD_ID:${redshift:DbUser}@yourcompany.com"}}

차이가 분명합니다. 그만큼 aws:userid 포함 RoleSessionName, 이메일 주소입니다. SAM 계정 이름은 이메일 주소에서 @ 앞의 문자열입니다. 연결 문자열 매개변수가 SAML 속성 매개변수 앞에 있기 때문에 가능한 경우를 다음과 같이 요약합니다.

  • SAML 속성이 다음을 포함하는 경우 DbUser:
    • 조건 값에 도메인 접미사가 포함된 경우:
      • 만약 DbUser SAML 속성 값은 이메일 주소, DbUser 도메인 접미사가 없는 연결 문자열에 있어야 합니다.
      • 만약 DbUser SAML 속성 값은 SAM 계정 이름, DbUser 연결 문자열에서 생략할 수 있습니다. 그렇지 않으면 값에 도메인 접미사가 포함되지 않아야 합니다.
    • 조건 값에 도메인 접미사가 포함되지 않은 경우:
      • 만약 DbUser SAML 속성 값은 이메일 주소, DbUser 연결 문자열에서 생략할 수 있습니다. 그렇지 않으면 값에 도메인 접미사가 포함되어야 합니다.
      • 만약 DbUser SAML 속성 값은 SAM 계정 이름, DbUser 도메인 접미사가 있는 연결 문자열에 있어야 합니다.
  • SAML 속성이 다음을 포함하지 않는 경우 DbUser:
    • 조건 값에 도메인 접미사가 포함된 경우 DbUser 도메인 접미사가 없는 연결 문자열에 있어야 합니다.
    • 조건 값에 도메인 접미사가 포함되지 않은 경우 DbUser 연결 문자열에서 생략할 수 있습니다. RoleSessionName 이메일 주소인 값은 다음과 같이 작동합니다. DbUser. 그렇지 않으면 값에 도메인 접미사가 포함되어야 합니다.

IAM 정책 조건 판단 워크플로

문제해결

Amazon Redshift에 대한 연동 액세스는 간단한 프로세스입니다. 그러나 문제가 발생할 때 분할하여 정복할 수 있는 작은 단계로 구성됩니다. 솔루션 개요에서 액세스 다이어그램을 참조하십시오. 프로세스를 세 가지 구문으로 나눌 수 있습니다.

  1. SAML 기반 연합이 성공했습니까? AD FS의 Single Sign-On 페이지를 방문하여 이를 확인하고 페더레이션된 역할로 콘솔에 로그인할 수 있는지 확인합니다. AWS 중국 특정 메타데이터 문서로 신뢰 당사자를 구성합니까? SAML 응답을 받고 목적지가 다음인지 확인하십시오. https://signin.amazonaws.cn/saml. SAML 공급자 ARN 및 IAM 역할 ARN이 정확합니까? 역할의 신뢰 관계에 올바른 값이 포함되어 있는지 확인하십시오. SAML:aud. 다른 가능한 체크포인트는 다음을 참조하십시오. AWS와의 SAML 2.0 연동 문제 해결.
  2. 역할 정책이 올바른가요? SAML 기반 연합이 성공하면 역할 정책이 올바른지 확인하십시오. 이 게시물에서 제공한 것과 귀하를 비교하십시오. 사용하셨나요? aws 어디에 aws-cn 사용되어야한다? 정책 조건에 도메인 접미사가 포함되어 있으면 올바른 도메인 접미사입니까? 수임된 역할이 작업을 수행할 권한이 없다는 오류가 발생하면 사용 중인 도메인 접미사를 얻을 수 있습니다.
  3. SQL 클라이언트가 성공적으로 연결되었습니까? 클러스터 식별자가 정확합니까? 연결 문자열에 loginToRp 옵션은 AWS 중국 신뢰 당사자를 가리킵니다. 여러 IAM 역할이 매핑된 경우 다음을 확인하십시오. preferred_role ARN이 올바른 역할을 하는 것 중 하나입니다. SAML 응답에서 역할 목록을 가져올 수 있습니다. 설정하려고 ssl_insecure 디버깅을 위해 일시적으로 true로 설정합니다. 이전 하위 섹션을 확인하고 DbUser 에 따라 적절하게 사용되거나 설정됩니다. DbUser SAML 속성 및 조건 값 aws:user. 드라이버 로그를 켜고 거기에서 디버그 힌트를 얻으십시오. 경우에 따라 캐시를 지우고 다시 시도하기 위해 SQL 클라이언트를 다시 시작해야 할 수도 있습니다.

안전 문제

프로덕션 환경에서는 이 게시물에서 사용하지 않는 다음 보안 설정을 적용하는 것이 좋습니다.

Amazon Redshift 클러스터의 경우 다음을 완료합니다.

  • 공개적으로 액세스할 수 있는 옵션을 비활성화하고 클러스터를 개인 또는 격리된 서브넷 그룹에 배치합니다.
  • 예를 들어 고객이 관리하는 클러스터를 암호화합니다. AWS 키 관리 서비스(AWS KMS)
  • 네트워크가 VPC를 벗어나지 않도록 향상된 VPC 라우팅 활성화
  • 클러스터 구성 SSL(Secure Sockets Layer) 필요 단방향 SSL 인증 사용

IAM 연동 역할의 경우:

  • 작업에 대한 정확한 DB 그룹 지정 redshift:JoinGroup. 와일드카드를 사용하려면 원하지 않는 DB 그룹을 허용하지 않는지 확인하십시오.
  • 체크 StringEquals for aws:user Amazon Redshift DB 사용자와 함께 역할 ID에 대해 이 조건을 확인할 수 있는 GetClusterCredentials, CreateClusterUser및 JoinGroup 행위. 자세한 코드는 샘플 코드를 참조하십시오.

Amazon Redshift에서 DB 그룹은 DB 사용자 모음에 대한 권한을 관리하는 데 사용됩니다. DB 사용자는 로그인 세션 동안 일부 DB 그룹에 가입하고 그룹과 관련된 권한을 부여받습니다. 앞에서 설명한 것처럼 SAML 속성 값이나 연결 속성을 사용하여 DB 그룹을 지정할 수 있습니다. Amazon Redshift 드라이버는 SAML 속성의 값보다 연결 문자열의 값을 선호합니다. 결과적으로 최종 사용자는 연결 문자열의 DB 그룹을 재정의할 수 있습니다. 따라서 DB 사용자에게 부여할 수 있는 권한을 제한하려면 IAM 역할 정책에서 DB 사용자가 안전하게 가입할 수 있는 DB 그룹을 제한해야 합니다. 그렇지 않으면 보안 위험이 있을 수 있습니다. 다음 정책 스니펫은 이러한 위험을 보여줍니다. 항상 팔로우 최소 권한 원칙 권한 정책을 정의할 때.

{ "Effect": "Allow", "Action": "redshift:JoinGroup", "Resource": "*"
}

정리

다음 명령을 실행하여 리소스를 제거하고 요금 발생을 중지합니다.

cdk destroy redshift-cn --force

AD FS에서 만든 사용자 및 그룹을 제거합니다. 마지막으로 더 이상 필요하지 않은 경우 AD FS에서 AWS 중국 리전에 대한 신뢰 당사자 트러스트를 제거합니다.

결론

이 게시물에서는 AD FS를 기반으로 하는 연합 액세스를 사용하여 중국의 Amazon Redshift에 연결하는 방법을 안내했습니다. AWS 중국 리전은 다른 AWS 리전과 다른 파티션에 있으므로 구성 시 특히 주의해야 합니다. 요약하면 다음을 사용하여 AWS 리소스 ARN을 확인해야 합니다. aws-cn 파티션, AWS 중국 특정 메타데이터 문서와의 SAML 기반 연동, 추가 연결 옵션이 있는 Amazon Redshift JDBC 드라이버. 이 게시물은 또한 다양한 사용 시나리오에 대해 설명합니다. redshift:Dbuser 매개변수를 제공하고 일반적인 문제 해결 제안을 제공합니다.

자세한 내용은 Amazon Redshift 클러스터 관리 가이드. 다음에서 이 게시물에 사용된 코드를 찾으십시오. GitHub 저장소.


저자에 관하여


클레멘트 위안웬쥔 위안
중국 청두에 위치한 AWS Professional Services의 클라우드 인프라 설계자입니다. 그는 신생 기업에서 국제 기업에 이르기까지 다양한 고객과 협력하여 최첨단 클라우드 기술로 솔루션을 구축 및 구현하고 클라우드 탐색에서 더 많은 것을 달성하도록 돕습니다. 그는 여가 시간에 시를 읽고 전 세계를 여행하는 것을 즐깁니다.

코아 응우옌코아 응우옌 AWS Professional Services의 빅 데이터 아키텍트입니다. 그는 대기업 고객 및 AWS 파트너와 협력하여 빅 데이터 및 AWS 서비스에 대한 전문 지식을 제공하여 고객의 비즈니스 성과를 가속화합니다.

리 예웨이 중국 상하이에 기반을 둔 AWS Professional Services의 데이터 아키텍트입니다. 그는 다양한 엔터프라이즈 고객과 협력하여 AWS에서 데이터 웨어하우징 및 데이터 레이크 솔루션을 설계하고 구축합니다. 여가 시간에는 독서와 운동을 좋아합니다.

spot_img

최신 인텔리전스

spot_img

우리와 함께 채팅

안녕하세요! 어떻게 도와 드릴까요?