옵션 3: Amazon S3에 액세스할 수 있도록 AWS IAM 사용자 자격 증명 구성하기

이 섹션에서는 S3 버킷에 대한 보안 정책을 구성하고 특정 IAM 사용자가 외부 스테이지에 안전하게 액세스할 수 있도록 자격 증명에 액세스하는 방법을 설명합니다.

이 항목의 내용:

1단계: S3 버킷 액세스 정책 구성하기

AWS 액세스 제어 요구 사항

Snowflake가 폴더(및 모든 하위 폴더)의 파일에 액세스하기 위해 필요한 S3 버킷 및 폴더 권한은 다음과 같습니다.

  • s3:GetBucketLocation

  • s3:GetObject

  • s3:GetObjectVersion

  • s3:ListBucket

참고

추가 SQL 작업을 수행하기 위해 필요한 추가적인 권한은 다음과 같습니다.

권한

SQL 작업

s3:PutObject

파일을 버킷에 언로드합니다.

s3:DeleteObject

로드한 후 스테이지에서 파일을 자동으로 제거하거나 또는 REMOVE 문을 실행하여 수동으로 파일을 제거합니다.

Snowflake는 S3 버킷에 대한 Snowflake 액세스에 대한 IAM 정책 및 사용자를 생성하는 것을 모범 사례로 권장합니다. 그러면 정책을 사용자에 연결하고 AWS에서 사용자에 대해 생성한 보안 자격 증명을 사용하여 버킷의 파일에 액세스할 수 있습니다.

IAM 정책 만들기

다음 단계별 지침에서는 S3 버킷을 사용하여 데이터를 로드 및 언로드할 수 있도록 AWS 관리 콘솔에서 Snowflake에 대한 액세스 허가를 구성하는 방법을 설명합니다.

  1. AWS 관리 콘솔에 로그인합니다.

  2. 홈 대시보드에서 Identity & Access Management (IAM)를 선택합니다.

    Identity & Access Management in AWS Management Console
  3. 왼쪽 탐색 창에서 Account settings 을 선택합니다.

  4. Security Token Service Regions 목록을 확장하고 계정이 위치한 리전 에 해당하는 AWS 리전을 찾아 상태가 Inactive 이면 Activate 을 선택합니다.

  5. 왼쪽 탐색 창에서 Policies 을 선택합니다.

  6. Create Policy 을 클릭합니다.

    Create Policy button on Policies page
  7. JSON 탭을 클릭합니다.

  8. Snowflake가 S3 버킷 및 폴더에 액세스하도록 허용하는 정책 문서를 추가합니다.

    다음 정책(JSON 형식)은 Snowflake에 지정된 버킷 및 폴더 경로에 대한 필수 액세스 허가를 제공합니다. 텍스트를 복사하여 정책 편집기에 붙여넣을 수 있습니다.

    참고

    • bucketprefix 를 실제 버킷 이름과 폴더 경로 접두사로 바꿔야 합니다.

    • 정부 리전 의 버킷에 대한 ARN(Amazon Resource Name)에는 arn:aws-us-gov:s3::: 접두사가 있습니다.

    {
        "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>/*"
                        ]
                    }
                }
            }
        ]
    }
    
    Copy

    참고

    "s3:prefix": 조건을 ["*"] 또는 ["<경로>/*"] 로 설정하면 지정된 버킷의 모든 접두사 또는 버킷의 경로에 각각 액세스 권한이 부여됩니다.

  9. Review policy 를 클릭합니다.

  10. 정책 이름(예: snowflake_access)과 선택 사항으로 설명을 입력합니다. 그리고 Create policy 를 클릭하여 정책을 생성합니다.

    Create Policy button in Review Policy page

2단계: AWS IAM 사용자 만들기

  1. 왼쪽 탐색 창에서 Users 을 선택하고 Add user 를 클릭합니다.

  2. Add user 페이지에 새 사용자 이름(예: snowflake1)을 입력합니다. Programmatic access 를 액세스 타입으로 선택한 후 Next 을 클릭합니다.

    Add user page
  3. Attach existing policies directly 을 클릭하고 앞서 생성한 정책을 선택합니다. 그리고 Next 을 클릭합니다.

    Set permissions page
  4. 사용자 세부 정보를 검토한 후 Create user 를 클릭합니다.

    Review user details page
  5. 액세스 자격 증명을 기록합니다. 가장 쉬운 기록 방법은 Download Credentials 를 클릭하여 파일(예: credentials.csv)에 쓰는 것입니다.

    Attach policy on the user details page

    주의

    이 페이지에서 나가면 AWS 콘솔의 모든 곳에서 시크릿 액세스 키를 더 이상 사용할 수 없습니다. 키를 분실하면, 반드시 사용자에 대한 자격 증명 세트를 생성해야 합니다.

현재까지 작업한 사항은 다음과 같습니다.

  • 버킷에 대한 IAM 정책을 생성했습니다.

  • IAM 사용자를 생성하고 사용자에 대한 액세스 자격 증명을 생성했습니다.

  • 정책을 사용자에 연결했습니다.

S3 버킷에 대한 AWS 키와 시크릿 키를 통해 외부 스테이지를 사용하여 Snowflake의 S3 버킷에 액세스하기 위해 필요한 자격 증명을 획득했습니다.

참고

Snowflake는 어떤 기간 동안(60분의 만료 시간을 초과할 수는 없음) 임시 자격 증명을 캐시합니다. Snowflake에서 액세스를 취소하면 캐시가 만료될 때까지 사용자가 파일을 나열하고 클라우드 저장소 위치에서 데이터를 로딩할 수 있습니다.

3단계: 외부(즉, S3) 스테이지 만들기

생성한 AWS 자격 증명을 참조하는 외부 스테이지를 생성합니다.

CREATE STAGE 명령을 사용하여 스테이지를 생성하거나 기존 외부 스테이지를 변경한 후 CREDENTIALS 옵션을 설정할 수 있습니다.

참고

자격 증명은 ENCRYPTION 및 FILE_FORMAT과 같은 다른 스테이지 매개 변수와 별도로 처리됩니다. 이러한 다른 매개 변수에 대한 지원은 외부 S3 버킷에 액세스하기 위해 사용되는 자격 증명에 관계없이 동일합니다.

예를 들어, mydb.public 을 사용자 세션의 현재 데이터베이스 및 스키마로 설정한 후 이름이 my_S3_stage 인 스테이지를 생성합니다. 이 예에서 스테이지는 S3 버킷 및 mybucket/load/files 경로를 참조합니다. S3 버킷의 파일은 서버 측 암호화(AWS_SSE_KMS)를 통해 암호화됩니다.

USE SCHEMA mydb.public;

CREATE OR REPLACE STAGE my_S3_stage
  URL='s3://mybucket/load/files/'
  CREDENTIALS=(AWS_KEY_ID='1a2b3c' AWS_SECRET_KEY='4x5y6z')
  ENCRYPTION=(TYPE='AWS_SSE_KMS' KMS_KEY_ID = 'aws/key');
Copy

다음 항목: AWS 데이터 파일 암호화