pg_lake용 S3 저장소 구성하기¶
pg_lake는 Parquet 및 ORC와 같은 오브젝트 저장소 형식으로 저장된 데이터를 효율적으로 쿼리할 수 있는 PostgreSQL 확장 프로그램입니다. Snowflake Postgres와 함께 pg_lake를 사용할 때 Snowflake 저장소 통합을 사용하여 데이터가 저장되는 Amazon S3 버킷에 대한 액세스를 구성합니다.
이 항목에서는 AWS에서 S3 버킷 권한을 구성하고 Snowflake Postgres가 데이터에 액세스할 수 있도록 허용하는 저장소 통합을 생성하는 방법을 설명합니다.
참고
현재, 이 S3 저장소는 Snowflake Postgres에서 관리하지 않습니다. 자체 S3 버킷을 제공하고 Postgres 인스턴스에 연결하는 저장소 통합을 통해 액세스를 구성합니다.
전제 조건¶
pg_lake용 S3 저장소를 구성하기 전에 다음이 있는지 확인합니다.
S3 버킷 및 `IAM 역할 <https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html>`_을 생성하고 관리할 수 있는 권한이 있는 활성 AWS 계정.
Snowflake 계정과 동일한 AWS 리전의 S3 버킷. Snowflake 계정 리전을 확인하려면 (Postgres 인스턴스가 아닌) Snowflake에서 다음 쿼리를 실행합니다.
SELECT CURRENT_REGION();
`AWS IAM 역할 및 정책 <https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html>`_에 대한 이해.
pg_lake를 지원하는 Snowflake Postgres 인스턴스.
Snowflake에서 저장소 통합을 생성할 수 있는 권한(ACCOUNTADMIN 역할 또는 계정에 대한 CREATE INTEGRATION 권한이 있는 역할).
1단계: S3 버킷 생성¶
아직 없는 경우 Snowflake 계정과 동일한 AWS 리전에 S3 버킷을 생성합니다. 예를 들어, Snowflake 계정이 us-west-2``에 있는 경우 ``us-west-2 리전에 S3 버킷을 생성합니다.
`S3 버킷 생성하기 <https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html>`_에 대한 지침은 AWS 설명서를 참조하세요.
2단계: S3 액세스를 위한 IAM 정책 생성¶
pg_lake가 S3 버킷에서 읽고 쓰는 데 필요한 권한을 부여하는 IAM 정책을 생성합니다.
AWS Management Console에 로그인하고 IAM 서비스로 이동합니다.
왼쪽 탐색 창에서 Account settings 를 선택합니다.
엔드포인트 목록의 :extui:`Security Token Service (STS)`에서 사용자의 계정이 위치한 Snowflake 리전을 찾습니다. STS가 비활성 상태인 경우 토글을 :extui:`Active`로 이동합니다. 자세한 내용은 `AWS 리전에서 AWS STS 활성화 및 비활성화하기 <https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_enable-regions.html>`_를 참조하세요.
왼쪽 탐색 창에서 :extui:`Policies`를 선택한 다음 :extui:`Create policy`를 선택합니다.
Policy editor 에서 JSON 을 선택합니다.
Snowflake가 S3 버킷 및 폴더에 액세스하도록 허용하는 정책 문서를 추가합니다.
bucket_name및 ``prefix``를 실제 버킷 이름과 폴더 경로 접두사로 바꿉니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource": "arn:aws:s3:::bucket_name/prefix/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::bucket_name", "Condition": { "StringLike": { "s3:prefix": [ "prefix/*" ] } } } ] }
이 정책은 다음 권한을 제공합니다.
지정된 S3 경로에서 오브젝트 읽기, 쓰기, 삭제
버킷 내용 나열 및 버킷 위치 검색
pg_lake의 Iceberg 테이블 생성 및 관리 기능 지원
Next 를 선택합니다.
정책 이름(예:
snowflake_pg_lake_access) 및 설명(선택 사항)을 입력합니다.Create policy 를 선택합니다.
3단계: IAM 역할 만들기¶
Snowflake가 S3 버킷에 액세스하기 위해 맡게 될 IAM 역할을 생성합니다.
중요
이 역할을 생성할 때 :extui:`Maximum session duration`을 ``12 hours``로 설정해야 합니다. 기본 세션 기간에는 저장소 통합이 작동하지 않습니다. 이 섹션의 마지막 단계를 참조하세요.
ID 및 액세스 관리(IAM) 대시보드의 왼쪽 탐색 창에서 Roles 를 선택합니다.
Create role 을 선택합니다.
AWS account 을 신뢰할 수 있는 엔터티 타입으로 선택합니다.
Another AWS account 을 선택합니다.
Account ID 필드에 본인의 AWS 계정 ID를 임시로 입력합니다. 이후 단계에서는 신뢰 관계를 수정하고 Snowflake에 대한 액세스 권한을 부여합니다.
Require external ID 옵션을 선택합니다. ``0000``과 같은 자리 표시자 외부 ID를 입력합니다. 이를 이후 단계에서 Snowflake에 의해 생성된 실제 외부 ID로 업데이트합니다.
참고
ID 리소스(예:S3 버킷)에 대한 액세스 권한을 Snowflake와 같은 서드 파티에 부여하는 데 외부 AWS가 사용됩니다. 자세한 내용은 서드 파티에 ID 리소스에 대한 액세스 권한을 부여하는 경우 외부 AWS를 사용하는 방법 을 참조하십시오.
Next 를 선택합니다.
`2단계: S3 액세스를 위한 IAM 정책 생성`_에서 생성한 정책을 검색하여 선택합니다.
Next 를 선택합니다.
역할(예:
snowflake_pg_lake_role)의 이름과 설명을 입력한 다음 :extui:`Create role`을 선택합니다.역할 요약 페이지에서 Role ARN 값을 찾아서 기록합니다. Snowflake에서 저장소 통합을 생성할 때 필요합니다.
역할 요약 페이지의 요약 섹션에서 Edit`를 선택하고 :extui:`Maximum session duration`을 ``12 hours``로 변경합니다. :extui:`Save changes 을 선택합니다. 자세한 내용은 `역할의 최대 세션 기간 수정하기(AWS) <https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use.html#id_roles_use_view-role-max-session>`_를 참조하세요.
4단계: Snowflake에서 클라우드 저장소 통합 생성¶
생성한 IAM 역할을 참조하는 저장소 통합 오브젝트를 Snowflake에서 생성합니다. 전체 명령 구문은 CREATE STORAGE INTEGRATION 섹션을 참조하세요.
CREATE STORAGE INTEGRATION my_pg_lake_integration
TYPE = POSTGRES_EXTERNAL_STORAGE
STORAGE_PROVIDER = 'S3'
ENABLED = TRUE
STORAGE_AWS_ROLE_ARN = 'arn:aws:iam::123456789012:role/snowflake_pg_lake_role'
STORAGE_ALLOWED_LOCATIONS = ('s3://my-bucket/my-prefix/');
여기서
``my_pg_lake_integration``은 저장소 통합을 위해 선택한 이름입니다.
``TYPE = POSTGRES_EXTERNAL_STORAGE``는 이 통합이 Snowflake Postgres와 함께 사용하도록 지정합니다.
``STORAGE_AWS_ROLE_ARN``은 `3단계: IAM 역할 생성`_에서 기록한 역할 ARN입니다.
STORAGE_ALLOWED_LOCATIONS``는 S3 버킷 및 경로 접두사를 지정합니다. ``my-bucket및 ``my-prefix``를 `1단계: S3 버킷 생성`_에서 생성한 버킷 이름과 폴더 경로로 바꿉니다. Postgres 저장소 통합에는 하나의 위치만 허용됩니다.
참고
저장소 통합을 생성하려면 ACCOUNTADMIN 역할 또는 계정에 대한 CREATE INTEGRATION 권한이 필요합니다. 자세한 내용은 액세스 제어 권한 섹션을 참조하십시오.
5단계: Snowflake IAM 사용자 ARN 및 외부 ID 검색¶
저장소 통합을 생성한 후 DESCRIBE INTEGRATION 명령을 사용하여 Snowflake가 이 통합을 위해 생성한 AWS IAM 사용자 및 외부 ID를 검색합니다.
DESCRIBE STORAGE INTEGRATION my_pg_lake_integration;
출력에서 다음 값을 찾아 기록합니다.
STORAGE_AWS_IAM_USER_ARN: Snowflake가 역할을 맡는 데 사용할 IAM 사용자 ARNSTORAGE_AWS_EXTERNAL_ID: 신뢰 정책에서 사용할 외부 ID
다음 단계에서 이러한 값을 사용하여 IAM 역할 신뢰 정책을 구성합니다.
6단계: IAM 역할 신뢰 정책 업데이트¶
`3단계: IAM 역할 생성`_에서 생성한 IAM 역할의 신뢰 정책을 업데이트하여 Snowflake가 역할을 맡도록 허용합니다.
AWS Management Console에 로그인하고 IAM 서비스로 이동합니다.
왼쪽 탐색 창에서 Roles 를 선택합니다.
3단계: IAM 역할 생성 에서 생성한 역할을 선택합니다.
Trust relationships 탭을 선택합니다.
Edit trust policy 를 선택합니다.
정책 문서를 다음 텍스트로 바꿉니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "<storage_aws_iam_user_arn>" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "sts:ExternalId": "<storage_aws_external_id>" } } } ] }
자리 표시자 값을 `5단계: Snowflake IAM 사용자 ARN 및 외부 ID 검색`_에서 기록한 값으로 바꿉니다.
storage_aws_iam_user_arn를STORAGE_AWS_IAM_USER_ARN값으로 바꿉니다. 이는arn:aws:iam::<account_id>:user/snowflake-postgres-integration-management형식의 전체 ARN이며, 여기서 사용자 이름은 항상 동일하고 AWS 계정 ID만 다릅니다.storage_aws_external_id를STORAGE_AWS_EXTERNAL_ID값으로 바꿉니다.
Update policy 를 선택하여 변경 사항을 저장합니다.
7단계: Postgres 인스턴스에 저장소 통합 연결¶
Snowflake Postgres 인스턴스에 저장소 통합을 연결합니다. 저장소 통합이 연결되면 S3 자격 증명이 Postgres 컨트롤 플레인에 자동으로 동기화되고 pg_lake에서 사용할 수 있습니다.
ALTER POSTGRES INSTANCE my_postgres_instance
SET STORAGE_INTEGRATION = my_pg_lake_integration;
새 Postgres 인스턴스를 생성할 때 저장소 통합을 지정할 수도 있습니다.
CREATE POSTGRES INSTANCE my_postgres_instance
...
STORAGE_INTEGRATION = my_pg_lake_integration;
Postgres 인스턴스에서 저장소 통합을 제거합니다.
ALTER POSTGRES INSTANCE my_postgres_instance
UNSET STORAGE_INTEGRATION;
8단계: pg_lake 구성 및 사용¶
저장소 통합을 연결한 후 Postgres 인스턴스에 연결하고 pg_lake를 구성합니다. 사용 가능한 확장 프로그램 목록은 Snowflake Postgres 확장 프로그램 섹션을 참조하세요.
pg_lake 확장 프로그램을 생성합니다.
CREATE EXTENSION pg_lake CASCADE;
Iceberg 테이블의 기본 저장소 위치를 설정합니다. 이는 저장소 통합에 지정된 위치와 일치해야 합니다.
SET 명령은 현재 세션에만 적용됩니다.
SET pg_lake_iceberg.default_location_prefix = 's3://my-bucket/my-prefix';
현재 세션 및 향후 세션의 모든 값을 설정하려면 ALTER DATABASE 명령을 대신 사용합니다. 여러 Postgres 데이터베이스를 사용하는 경우 각 데이터베이스의 저장소 위치를 설정해야 합니다.
-- Substitute the name of your database ALTER DATABASE my_database SET pg_lake_iceberg.default_location_prefix = 's3://my-bucket/my-prefix';
S3 버킷의 내용을 나열하여 저장소 통합이 올바르게 구성되었는지 확인합니다.
SELECT * FROM lake_file.list('s3://my-bucket/my-prefix/*');
my-bucket및 ``my-prefix``를 실제 버킷 이름과 경로로 바꿉니다. 구성이 올바른 경우 이 쿼리는 해당 위치에 있는 파일 목록을 반환합니다. 버킷이 비어 있는 경우 쿼리는 오류 없이 빈 결과 세트를 반환합니다.Iceberg 테이블을 생성하고 데이터를 삽입하고 다시 쿼리하여 엔드투엔드 구성을 확인합니다. 이 작업이 성공하면 pg_lake는 S3 버킷에서 읽고 쓸 수 있습니다.
CREATE TABLE my_table ( id INT, data TEXT ) USING iceberg; INSERT INTO my_table VALUES (1, 'hello iceberg'); SELECT * FROM my_table;
보안 고려 사항¶
pg_lake에 대한 S3 액세스를 구성할 때 다음 보안 모범 사례를 염두에 두세요.
IAM 역할 사용: Snowflake Postgres는 정적 자격 증명이 아닌 IAM 역할 가정을 사용하여 임시 자격 증명 및 자동 자격 증명 순환을 통해 보안을 개선합니다.
IAM 권한 제한: pg_lake가 액세스해야 하는 S3 버킷 경로에 필요한 최소한의 권한만 부여합니다. IAM 정책은 특정 버킷 접두사에 대한 액세스를 제한해야 합니다.
외부 ID 모니터링: 신뢰 정책의 외부 ID는 Snowflake 계정만 IAM 역할을 맡을 수 있도록 보장합니다.
저장소 통합 변경 사항 검토: 저장소 통합의
STORAGE_AWS_ROLE_ARN또는 ``STORAGE_ALLOWED_LOCATIONS``에 대한 모든 업데이트는 Postgres 인스턴스에 자동으로 동기화됩니다.버킷 정책 사용: 심층 방어를 위해 IAM 정책 외에 S3 버킷 정책을 사용하는 것이 좋습니다.
S3 액세스 로깅 활성화: S3 버킷에서 액세스 로깅을 활성화하여 액세스 패턴을 모니터링하고 감사합니다.
리전별 정렬: 최적의 성능을 유지하고 데이터 상주 요구 사항을 충족하기 위해 S3 버킷이 Snowflake 계정과 동일한 AWS 리전에 있는지 확인합니다.
문제 해결하기¶
저장소 통합 생성 오류¶
저장소 통합을 생성할 때 오류가 발생하는 경우 다음을 수행합니다.
ACCOUNTADMIN 역할 또는 계정에 대한 CREATE INTEGRATION 권한이 있는 역할이 있는지 확인합니다.
IAM 역할 ARN의 형식이 올바르고 AWS 계정에 존재하는지 확인합니다.
S3 버킷 위치가 올바른 형식(
s3://bucket-name/prefix/)을 사용하는지 확인합니다.POSTGRES_EXTERNAL_STORAGE통합에는 하나의 저장소 위치만 허용됩니다.
팁
저장소 통합 오류는 Postgres 서버 로그에 Storage integration: 접두사와 함께 기록됩니다. 예:
Storage integration: IAM role must have Maximum Session Duration set to 12 hours
Postgres 로그 액세스에 대한 자세한 내용은 Snowflake Postgres 로깅 섹션을 참조하세요.
연결 오류¶
저장소 통합을 연결한 후 pg_lake가 S3에 액세스할 수 없는 경우 다음을 수행합니다.
인스턴스 속성을 쿼리하여 저장소 통합이 Postgres 인스턴스에 올바르게 연결되었는지 확인합니다.
IAM 역할 신뢰 정책이 DESCRIBE STORAGE INTEGRATION 출력에서 올바른 Snowflake IAM 사용자 ARN 및 외부 ID로 업데이트되었는지 확인합니다.
S3 버킷 리전이 Snowflake 계정 리전과 일치하는지 확인합니다.
리전의 STS 엔드포인트가 AWS IAM 계정 설정에서 활성 상태인지 확인합니다.
권한 거부 오류¶
S3에 액세스할 때 권한 거부 오류가 발생하는 경우 다음을 수행합니다.
역할에 연결된 IAM 정책에
s3:PutObject,s3:GetObject,s3:GetObjectVersion,s3:DeleteObject,s3:DeleteObjectVersion,s3:ListBucket및s3:GetBucketLocation등의 필요한 모든 권한이 포함되어 있는지 확인합니다.IAM 역할의 신뢰 정책이 Snowflake IAM 사용자가 해당 역할을 맡을 수 있도록 허용하는지 확인합니다.
S3 버킷 정책(있는 경우)이 IAM 역할에서 액세스를 거부하지 않는지 확인합니다.
액세스하는 S3 경로가 ``STORAGE_ALLOWED_LOCATIONS``에 지정된 접두사와 일치하는지 확인합니다.
신뢰 정책 오류¶
IAM 역할을 맡는 것과 관련된 오류가 발생하는 경우 다음을 수행합니다.