옵션 3: Amazon S3에 접근하도록 AWS IAM 사용자 자격 증명 구성
옵션 3: Amazon S3에 접근하도록 AWS IAM 사용자 자격 증명 구성
이 섹션은 S3 버킷에 대한 보안 정책과 특정 IAM 사용자의 액세스 자격 증명을 구성해 보안 방식으로 외부 스테이지에 접근하는 방법을 설명해요.
출처: Documentation
본문
1단계: S3 버킷 액세스 정책 구성
AWS 액세스 제어 요구 사항
Snowflake가 폴더(및 하위 폴더)의 파일에 접근하려면 S3 버킷과 폴더에 다음 권한이 필요해요.
s3:GetBucketLocations3:GetObjects3:GetObjectVersions3:ListBucket
참고 — 추가 SQL 작업을 수행하려면 다음 추가 권한이 필요해요.
권한 SQL 작업 s3:PutObject 버킷으로 파일 언로드. s3:DeleteObject 성공적인 로드 후 스테이지에서 파일 자동 삭제 또는 REMOVE 문을 실행해 수동으로 파일 제거.
모범 사례로, Snowflake가 S3 버킷에 접근하도록 IAM 정책과 사용자를 만드는 것을 권장해요. 그런 다음 정책을 사용자에게 연결하고 AWS가 사용자에 대해 생성한 보안 자격 증명을 사용해 버킷의 파일에 접근할 수 있어요.
IAM 정책 만들기
다음 단계별 지침은 AWS Management Console에서 Snowflake에 대한 액세스 권한을 구성해 S3 버킷을 사용해 데이터를 로드하고 언로드하는 방법을 설명해요.
- AWS Management Console에 로그인해요.
- 홈 대시보드에서 IAM을 검색해 선택해요.
- 왼쪽 탐색 창에서 Account settings를 선택해요.
- Endpoints 목록의 Security Token Service(STS) 아래에서 계정이 위치한 Snowflake 리전을 찾아요. STS status가 비활성(inactive)이면 토글을 Active로 이동해요.
- 왼쪽 탐색 창에서 Policies를 선택해요.
- Create Policy를 선택해요.
- Policy editor에서 JSON을 선택해요.
- Snowflake가 S3 버킷과 폴더에 접근할 수 있게 하는 정책 문서를 추가해요.
다음 정책(JSON 형식)은 지정된 버킷과 폴더 경로에 대해 Snowflake에 필요한 액세스 권한을 제공해요. 텍스트를 정책 편집기에 복사해 붙여넣을 수 있어요.
참고
*bucket*과*prefix*를 실제 버킷 이름과 폴더 경로 접두사로 바꿔야 해요.- 정부 리전의 버킷에 대한 Amazon 리소스 이름(ARN)은
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>/*"
]
}
}
}
]
}
참고 —
"s3:prefix":조건을["*"]으로 설정하면 지정된 버킷의 모든 접두사에 대한 액세스를 부여하고,["<path>/*"]으로 설정하면 버킷의 해당 경로의 모든 접두사에 대한 액세스를 각각 부여해요.
- Next를 선택해요.
- Policy name(예:
snowflake_access)과 선택적인 Description을 입력해요. - Create policy를 선택해요.
2단계: AWS IAM 사용자 만들기
- 왼쪽 탐색 창에서 Users를 선택한 다음 Add user를 클릭해요.
- Add user 페이지에서 새 사용자 이름(예:
snowflake1)을 입력해요. 액세스 유형으로 Programmatic access를 선택한 다음 Next를 클릭해요. - Attach existing policies directly를 클릭하고 이전에 만든 정책을 선택해요. 그런 다음 Next를 클릭해요.
- 사용자 세부 정보를 검토한 다음 Create user를 클릭해요.
- 액세스 자격 증명을 기록해요. 기록하는 가장 쉬운 방법은 Download Credentials를 클릭해 파일(예:
credentials.csv)로 작성하는 것이에요.
주의 — 이 페이지를 떠나면 Secret Access Key는 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');