페더레이션형 ID를 사용하여 로컬 리소스 및 Amazon Redshift Spectrum 외부 테이블에 대한 Amazon Redshift 액세스 관리 - Amazon Redshift

페더레이션형 ID를 사용하여 로컬 리소스 및 Amazon Redshift Spectrum 외부 테이블에 대한 Amazon Redshift 액세스 관리

GetDatabaseCredentials에서 제공한 보안 인증 정보와 함께 AWS에서 아이덴티티 페더레이션을 사용하면 로컬 데이터와 외부 데이터에 대한 권한 부여 및 액세스를 간소화할 수 있습니다. 이 자습서에서는 특정 IAM 역할을 사용하는 대신 AWS ID 페더레이션을 통해 리소스에 대한 액세스를 제공하는 방법을 보여 줍니다.

현재는 Amazon S3에 있는 외부 데이터에 대한 액세스 권한을 사용자에게 부여하려면 권한 정책에 정의된 권한으로 IAM 역할을 생성해야 합니다. 그러면 역할이 연결된 사용자가 외부 데이터에 액세스할 수 있습니다. 이 방법이 작동하지만 특정 사용자가 특정 열을 사용할 수 없도록 하는 것과 같은 세분화된 규칙을 제공하려는 경우 외부 스키마에서 추가 구성을 수행해야 할 수 있습니다.

GetDatabaseCredentials에서 제공된 자격 증명 인증 정보를 사용하는 ID 페더레이션은 지정 및 변경이 더 쉬운 세분화된 IAM 규칙을 통해 AWS Glue 및 Redshift Spectrum 리소스에 대한 액세스를 제공할 수 있습니다. 이렇게 하면 비즈니스 규칙을 준수하는 액세스를 쉽게 적용할 수 있습니다.

페더레이션형 보안 인증을 사용하면 다음과 같은 이점이 있습니다.

  • Redshift Spectrum용으로 클러스터에 연결된 IAM 역할을 관리할 필요가 없습니다.

  • 클러스터 관리자는 다양한 IAM 컨텍스트를 사용하는 소비자가 액세스할 수 있는 외부 스키마를 생성할 수 있습니다. 이는 예를 들어 여러 소비자가 한 테이블에서 동일한 외부 스키마를 쿼리하고 반환된 레코드에서 다양한 필드를 가져오는 열 필터링을 수행하는 데 유용합니다.

  • 역할뿐만 아니라 IAM 권한이 있는 사용자를 사용하여 Amazon Redshift를 쿼리할 수 있습니다.

페더레이션형 ID로 로그인하기 위한 ID 준비

페더레이션형 ID로 로그인하려면 먼저 몇 가지 예비 단계를 수행해야 합니다. 이 지침에서는 Amazon S3 버킷에 저장된 데이터 파일을 참조하는 기존 Redshift Spectrum 외부 스키마가 있고 해당 버킷이 Amazon Redshift 클러스터 또는 Amazon Redshift Serverless 데이터 웨어하우스와 동일한 계정에 있다고 가정합니다.

  1. IAM ID를 생성합니다. 이는 사용자 또는 IAM 역할일 수 있습니다. IAM에서 지원하는 이름을 사용합니다.

  2. ID에 권한 정책을 연결합니다. 다음 중 하나를 지정합니다.

    • redshift:GetClusterCredentialsWithIAM(Amazon Redshift에서 프로비저닝된 클러스터의 경우)

    • redshift-serverless:GetCredentials(Amazon Redshift Serverless의 경우)

    IAM 콘솔을 사용하여 정책 편집기로 권한을 추가할 수 있습니다.

    IAM ID에는 외부 데이터에 액세스할 수 있는 권한도 필요합니다. 다음 AWS 관리형 정책을 직접 추가하여 Amazon S3 대한 액세스 권한을 부여합니다.

    • AmazonS3ReadOnlyAccess

    • AWSGlueConsoleFullAccess

    AWS Glue를 사용하여 외부 데이터를 준비하는 경우 마지막 관리형 정책이 필요합니다. Amazon Redshift Spectrum에 대한 액세스 권한을 부여하는 단계에 대한 자세한 내용은 Amazon Redshift 및 Redshift Spectrum 시작 안내서의 일부인 Amazon Redshift에 대한 IAM 역할 생성 섹션을 참조하세요. Redshift Spectrum에 액세스하기 위한 IAM 정책을 추가하는 단계를 보여 줍니다.

  3. Amazon Redshift에 연결하도록 SQL 클라이언트를 설정합니다. Amazon Redshift JDBC 드라이버를 사용하고 사용자의 보안 인증 정보를 도구의 보안 인증 정보 속성에 추가합니다. SQL Workbench/J와 같은 클라이언트가 이 작업에 적합합니다. 다음과 같은 클라이언트 연결 확장 속성을 설정합니다.

    • AccessKeyID - 액세스 키 식별자입니다.

    • SecretAccessKey - 비밀 액세스 키입니다. (암호화를 사용하지 않는 경우 비밀 키를 전송할 때 발생할 수 있는 보안 위험에 유의하세요.)

    • SessionToken - IAM 역할용 임시 보안 인증 정보 집합입니다.

    • groupFederation - 프로비저닝된 클러스터의 페더레이션형 ID를 구성하는 경우 true로 설정합니다. Amazon Redshift Serverless를 사용하는 경우 이 파라미터를 설정하지 마세요.

    • LogLevel - 정수 로그 수준 값입니다. 이는 선택 사항입니다.

  4. URL을 Amazon Redshift 또는 Amazon Redshift Serverless 콘솔에서 찾은 JDBC 엔드포인트로 설정합니다. URL 스키마를 jdbc:redshift:iam:으로 바꾸고 다음 형식을 사용합니다.

    • Amazon Redshift에서 프로비저닝된 클러스터의 형식: jdbc:redshift:iam://<cluster_id>.<unique_suffix>.<region>.redshift.amazonaws.com:<port>/<database_name>

      예시: jdbc:redshift:iam://test1.12345abcdefg.us-east-1.redshift.amazonaws.com:5439/dev

    • Amazon Redshift Serverless의 형식: jdbc:redshift:iam://<workgroup-name>.<account-number>.<aws-region>.redshift-serverless.amazonaws.com:5439:<port>/<database_name>

      예시: jdbc:redshift:iam://default.123456789012.us-east-1.redshift-serverless.amazonaws.com:5439/dev

    IAM ID를 사용하여 처음으로 데이터베이스에 연결한 후 Amazon Redshift는 접두사 IAM:(사용자의 경우) 또는 접두사 IAMR:(IAM 역할의 경우)가 붙은 동일한 이름의 Amazon Redshift ID를 자동으로 생성합니다. 이 주제의 나머지 단계에서는 사용자에 대한 예를 보여줍니다.

    Redshift 사용자가 자동으로 생성되지 않는 경우 관리자 계정으로 IAM:<user name> 형식의 사용자 이름을 지정해 CREATE USER 문을 실행하여 사용자를 생성할 수 있습니다.

  5. Amazon Redshift 클러스터 관리자로서 Redshift 사용자에게 외부 스키마에 액세스하는 데 필요한 권한을 부여합니다.

    GRANT ALL ON SCHEMA my_schema to "IAM:my_user";

    Redshift 사용자에게 외부 스키마에서 테이블을 생성할 수 있는 권한을 부여하려면 해당 사용자가 스키마 소유자여야 합니다. 예를 들면 다음과 같습니다.

    ALTER SCHEMA my_schema owner to "IAM:my_user";
  6. 구성을 확인하려면 권한이 부여된 후 SQL 클라이언트를 사용하여 사용자로 쿼리를 실행합니다. 이 쿼리 샘플은 외부 테이블에서 데이터를 검색합니다.

    SELECT * FROM my_schema.my_table;

Redshift Spectrum에 ID 및 권한 부여 전파 시작하기

외부 테이블을 쿼리하기 위해 페더레이션형 ID를 전달하려면 SESSIONCREATE EXTERNAL SCHEMAIAM_ROLE 쿼리 파라미터 값으로 설정합니다. 다음 단계에서는 SESSION을 설정하고 활용하여 외부 스키마에 대한 쿼리 권한을 부여하는 방법을 보여줍니다.

  1. 로컬 테이블과 외부 테이블을 생성합니다. AWS Glue를 통해 카탈로그로 작성된 외부 테이블을 이에 사용할 수 있습니다.

  2. IAM ID로 Amazon Redshift에 연결합니다. 이전 섹션에서 설명한 것처럼 ID가 Amazon Redshift에 연결되면 Redshift 데이터베이스 사용자가 생성됩니다. 사용자가 이전에 존재하지 않은 경우 생성됩니다. 사용자가 새 사용자인 경우 관리자는 Amazon Redshift에서 쿼리 및 테이블 생성과 같은 작업을 수행할 수 있는 권한을 사용자에게 부여해야 합니다.

  3. 관리자 계정으로 Redshift에 연결합니다. SESSION 값을 사용해 명령을 실행하여 외부 스키마를 생성합니다.

    create external schema spectrum_schema from data catalog database '<my_external_database>' region '<my_region>' iam_role 'SESSION' catalog_id '<my_catalog_id>';

    이 경우 catalog_id가 설정됩니다. SESSION이 특정 역할을 대체하기 때문에 기능에 추가된 새로운 설정입니다.

    이 예에서 쿼리의 값은 실제 값이 나타나는 방식을 모방한 것입니다.

    create external schema spectrum_schema from data catalog database 'spectrum_db' region 'us-east-1' iam_role 'SESSION' catalog_id '123456789012'

    이 경우의 catalog_id 값은 AWS 계정 ID입니다.

  4. 2단계에서 연결한 IAM ID를 사용해 쿼리를 실행하여 외부 데이터에 액세스합니다. 예를 들면 다음과 같습니다.

    select * from spectrum_schema.table1;

    이 경우 table1은 예를 들어 Amazon S3 버킷에 있는 파일의 JSON 형식 데이터일 수 있습니다.

  5. 외부 데이터베이스 또는 스키마를 가리키는 클러스터 연결 IAM 역할을 사용하는 외부 스키마가 이미 있는 경우 이 단계에 설명된 대로 기존 스키마를 교체하고 페더레이션형 ID를 사용하거나 새 스키마를 생성할 수 있습니다.

SESSION은 페더레이션형 ID 보안 인증 정보가 외부 스키마를 쿼리하는 데 사용됨을 나타냅니다. SESSION 쿼리 파라미터를 사용할 때는 catalog_id를 설정해야 합니다. 스키마에 사용되는 데이터 카탈로그를 가리키기 때문에 필요합니다. 이전에는 iam_role에 할당된 값에서 catalog_id가 검색되었습니다. 예를 들어 외부 스키마를 쿼리할 때 페더레이션형 보안 인증 정보를 사용하여 Redshift Spectrum에 이러한 방식으로 ID 및 권한 부여를 전파하도록 설정하면 IAM 역할을 통한 권한 부여가 필요하지 않습니다.

사용 노트

일반적인 연결 오류는 다음과 같습니다. 임시 자격 증명을 검색하는 중 IAM 오류: 제공된 언마셜러로 예외 응답을 언마셜링할 수 없음. 이 오류는 레거시 JDBC 드라이버가 있기 때문에 발생합니다. 페더레이션 ID에 필요한 최소 드라이버 버전은 2.1.0.9입니다. JDBC 드라이버는 Amazon Redshift JDBC 드라이버, 버전 2.1 다운로드에서 다운로드할 수 있습니다.

추가 리소스

이러한 링크는 외부 데이터에 대한 액세스를 관리하기 위한 추가 정보를 제공합니다.