AWS Glue Iceberg REST 에 대한 카탈로그 통합 구성하기

`Signature Version 4(SigV4)<https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html>`_ 인증을 사용하여 `AWS Glue Iceberg REST 엔드포인트<https://docs.aws.amazon.com/glue/latest/dg/connect-glu-iceberg-rest.html>`_에 대한 카탈로그 통합을 생성하려면 이 항목의 단계를 따릅니다.

1단계: AWS Glue Data Catalog에 대한 액세스 허가 구성

AWS Glue 데이터 카탈로그에 액세스하기 위해 Snowflake에 대한 IAM 정책을 만듭니다. 카탈로그 통합을 만들 때 지정하는 IAM 역할에 정책을 첨부합니다. 지침은 AWS Identity and Access Management 사용자 가이드에서 IAM 정책 만들기역할 권한 정책 수정하기 를 참조하십시오.

읽기 전용 예제 정책

Snowflake는 최소한 다음 권한이 필요합니다.AWS Glue 데이터 카탈로그에서 다음 권한을 사용하여 Glue Iceberg REST 카탈로그를 사용하여 정보에 액세스합니다.

  • glue:GetCatalog

  • glue:GetDatabase

  • glue:GetDatabases

  • glue:GetTable

  • glue:GetTables

다음 예시 정책(JSON 형식)에서는 지정된 데이터베이스의 모든 테이블에 액세스하는 데 필요한 권한을 제공합니다.

{
   "Version": "2012-10-17",
   "Statement": [
      {
         "Sid": "AllowGlueCatalogTableAccess",
         "Effect": "Allow",
         "Action": [
           "glue:GetCatalog",
           "glue:GetDatabase",
           "glue:GetDatabases",
           "glue:GetTable",
           "glue:GetTables"
         ],
         "Resource": [
            "arn:aws:glue:*:<accountid>:table/*/*",
            "arn:aws:glue:*:<accountid>:catalog",
            "arn:aws:glue:*:<accountid>:database/<database-name>"
         ]
      }
   ]
}
Copy

참고

  • 이 정책의 Resource 요소를 수정하여 허용되는 리소스(예: 카탈로그, 데이터베이스 또는 테이블)를 추가로 제한할 수 있습니다. 자세한 내용은 AWS Glue에서 정의된 리소스 유형 을 참조하십시오.

  • AWS Glue에 암호화를 사용하는 경우 AWS Key Management Service(AWS KMS) 권한을 추가하도록 정책을 수정해야 합니다. 자세한 내용은 AWS Glue에서 암호화 설정하기 를 참조하십시오.

예제 정책 읽기 및 쓰기

다음 예제 정책(JSON형식)은 모든 데이터베이스의 모든 테이블에 대한 읽기 및 쓰기 액세스에 필요한 권한을 제공합니다. :doc:`외부 관리 테이블에 대한 쓰기 액세스 권한</user-guide/tables-iceberg-externally-managed-writes>`을 구성하려면 이 정책을 예로 사용합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGlueCatalogTableAccess",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "glue:GetCatalog",
        "glue:GetDatabase",
        "glue:GetDatabases",
        "glue:CreateDatabase",
        "glue:DeleteDatabase",
        "glue:GetTable",
        "glue:GetTables",
        "glue:CreateTable",
        "glue:UpdateTable",
        "glue:DeleteTable"
      ],
      "Resource": [
        "arn:aws:glue:*:<accountid>:table/*/*",
        "arn:aws:glue:*:<accountid>:catalog",
        "arn:aws:glue:*:<accountid>:database/*",
        "arn:aws:s3:<external_volume_path>"
      ]
    }
  ]
}
Copy

참고

  • AWS Glue 카탈로그가 테이블 위치에 메타데이터를 작성하려면 정책에서 저장소 위치에 대한 액세스 권한을 제공해야 합니다.

  • 이 정책의 Resource 요소에 있는 "arn:aws:glue:*:<accountid>:database/*" 줄은 모든 데이터베이스를 지정합니다. 이 작업은 CREATE SCHEMA 명령을 사용하여 Snowflake에서 Glue에 새 데이터베이스를 생성하려는 경우 필요합니다. 단일 데이터베이스에 대한 액세스를 제한하기 위해 이름으로 데이터베이스를 지정할 수 있습니다. 리소스 정의에 대한 자세한 내용은 `AWS Glue<https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html#awsglue-resources-for-iam-policies>에서 정의한 리소스 유형`_을 참조하세요.

  • AWS Glue에 암호화를 사용하는 경우 AWS Key Management Service(AWS KMS) 권한을 추가하도록 정책을 수정해야 합니다. 자세한 내용은 AWS Glue에서 암호화 설정하기 를 참조하십시오.

(선택 사항) Lake Formation 액세스 제어 구성하기

세분화된 액세스 제어를 위해 AWS Lake Formation을 사용하는 경우, Lake Formation 구성에서 Snowflake가 카탈로그 오브젝트 및 기본 데이터에 액세스할 수 있도록 허용하는지 확인합니다.

이전 단계에서 생성한 IAM 역할(카탈로그 통합을 생성할 때 Snowflake에서 지정하는 역할)에는 :code:`lakeformation:GetDataAccess`IAM 권한이 있어야 합니다. 이 권한은 기본 데이터에 대한 읽기 및 쓰기 액세스 권한을 부여합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lakeformation:GetDataAccess",
            "Resource": "*"
        }
    ]
}
Copy

자세한 내용은 Lake Formation 설명서의 `기본 데이터 액세스 제어<https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-underlying-data.html>`_ 섹션을 참조하세요.

또한 IAM 역할에 데이터 권한을 부여해야 합니다. 데이터 권한을 부여하는 데 사용하는 방법은 Lake Formation 설정에 따라 다릅니다. 예를 들어, 명명된 리소스 메서드를 사용하여 AWS Glue 오브젝트에 권한을 부여하거나 태그 기반 액세스 제어를 사용할 수 있습니다. 자세한 내용과 지침은 `AWSLake Formation 설명서<https://docs.aws.amazon.com/lake-formation/latest/dg/granting-catalog-permissions.html>`_를 참조하세요.

2단계: Snowflake에서 카탈로그 통합 만들기

CREATE CATALOG INTEGRATION(Apache Iceberg™ REST) ​명령을 사용하여 `AWS Glue Iceberg REST 엔드포인트<https://docs.aws.amazon.com/glue/latest/dg/connect-glu-iceberg-rest.html>`_에 대한 카탈로그 통합을 생성합니다. 구성한 IAM 역할을 지정합니다. :code:`CATALOG_NAME`에 AWS 계정 ID를 사용합니다.

CREATE CATALOG INTEGRATION glue_rest_catalog_int
  CATALOG_SOURCE = ICEBERG_REST
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = 'rest_catalog_integration'
  REST_CONFIG = (
    CATALOG_URI = 'https://glue.us-west-2.amazonaws.com/iceberg'
    CATALOG_API_TYPE = AWS_GLUE
    CATALOG_NAME = '123456789012'
  )
  REST_AUTHENTICATION = (
    TYPE = SIGV4
    SIGV4_IAM_ROLE = 'arn:aws:iam::123456789012:role/my-role'
    SIGV4_SIGNING_REGION = 'us-west-2'
  )
  ENABLED = TRUE;
Copy

여기서

  • CATALOG_URI 는 AWS Glue Iceberg REST 카탈로그의 서비스 엔드포인트입니다.

  • CATALOG_NAME 은 AWS 계정의 ID 입니다.

자세한 내용은 AWS Glue에 대한 카탈로그 통합 구성 지침이 포함된 CREATE CATALOG INTEGRATION(Apache Iceberg™ REST) 섹션을 참조하십시오.

3단계: Snowflake 계정에 대한 AWS IAM 사용자 및 외부 ID 검색

Snowflake 계정의 AWS IAM 사용자 및 외부 ID 정보를 검색하려면 DESCRIBE CATALOG INTEGRATION 명령을 실행합니다. 다음 단계에서 이 정보를 AWS에 제공하여 신뢰 관계를 구축합니다.

DESCRIBE CATALOG INTEGRATION glue_rest_catalog_int;
Copy

다음 값을 기록합니다.

설명

GLUE_AWS_IAM_USER_ARN

Snowflake 계정용으로 생성된 AWS IAM 사용자입니다(예: arn:aws:iam::123456789001:user/abc1-b-self1234). Snowflake는 전체 Snowflake 계정에 대해 단일 IAM 사용자를 프로비저닝합니다. 계정의 모든 Glue 카탈로그 통합에서 해당 IAM 사용자를 사용합니다.

GLUE_AWS_EXTERNAL_ID

신뢰 관계를 설정하기 위한 외부 ID입니다.

4단계: AWS Glue 데이터 카탈로그에 대한 IAM 사용자 액세스 권한 부여

카탈로그 통합을 생성할 때 ()을 사용하여 지정한 것과 IAM동일한ARN GLUE_AWS_ROLE_ARN 역할에 대한 신뢰 정책을 업데이트합니다. 이전 단계에서 기록한 값을 신뢰 정책에 추가합니다.

지침은 신뢰 정책 수정하기 를 참조하십시오.

다음 예시 정책은 GLUE_AWS_IAM_USER_ARNGLUE_AWS_EXTERNAL_ID 값을 지정할 위치를 보여줍니다.

{
   "Version": "2012-10-17",
   "Statement": [
      {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
         "AWS": "<glue_iam_user_arn>"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
         "StringEquals": {
            "sts:ExternalId": "<glue_aws_external_id>"
         }
      }
      }
   ]
}
Copy

여기서

  • glue_iam_user_arn 은 자신이 기록한 GLUE_IAM_USER_ARN 값입니다.

  • glue_aws_external_id 는 자신이 기록한 GLUE_AWS_EXTERNAL_ID 값입니다.

참고

  • 보안상의 이유로, 새 카탈로그 통합을 생성하는 경우(또는 CREATE OR REPLACE CATALOG INTEGRATION 구문을 사용하여 기존 카탈로그 통합을 다시 생성하는 경우) 새 카탈로그 통합에는 다른 외부 ID를 사용하며 새 외부 ID로 신뢰 정책을 수정하지 않으면 신뢰 관계를 확인할 수 없습니다.

  • 권한이 올바르게 구성되었는지 확인하려면 이 카탈로그 통합을 사용하는 :doc:`Iceberg 테이블을 생성</user-guide/tables-iceberg-create>`합니다. Snowflake는 이 카탈로그 통합을 참조하는 Iceberg 테이블을 생성할 때까지 권한이 올바르게 설정되었는지 확인하지 않습니다.

다음 단계

AWS Glue Iceberg REST에 대한 카탈로그 통합을 구성한 후 :doc:`Iceberg 테이블을 생성</user-guide/tables-iceberg-create>`할 수 있습니다.