오지's blog

snowflake에서 AWS s3접근하는 2가지 방법정리 본문

개발노트/데이터베이스

snowflake에서 AWS s3접근하는 2가지 방법정리

오지구영ojjy90 2022. 9. 1. 23:31
728x90
반응형

1. AWS의 key기반으로 snowflake에서 s3에 접근하는 방법

snowflake에서 s3에 접근하기 위해서 stage라는 오브젝트를 생성하여 이 오브젝트에서 s3의 버킷명과 iam 메뉴를 통해 얻은 aceess key값들을 넣어주어야 한다. role방식보다 설정이 쉽다는 장점이 있지만 key가 털리면 snowflake의 데이터를 모두 볼수 있는 단점 그리고 snowflake에서 select로 key값을 볼수 있기 때문에 snowflake공식문서에서는 role기반 방식을 추천한다(물론 stage를 select할수 있는 권한이 있다면).

CREATE  OR REPLACE STAGE GC URL='s3://s3버킷명' 
CREDENTIALS=(aws_key_id='aws_key_id값' aws_secret_key='aws_secret_key값');


예시. CREATE  OR REPLACE STAGE GC URL='s3://snow_s3' 
CREDENTIALS=(aws_key_id='AKIXXXXXXXX' aws_secret_key='5/FOoXXXXXXXX');

2. AWS의 role기반으로 snowflake에서 s3에 접근하는 방법

step1. 정책생성 - snowflake s3업로드 다운로드용 정책생성 - 버킷명 snow-dynamic-storage와 dr이라 가정

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
              "s3:PutObject",
              "s3:GetObject",
              "s3:GetObjectVersion",
              "s3:DeleteObject",
              "s3:DeleteObjectVersion"
            ],
            "Resource": ["arn:aws:s3:::snow-dynamic-storage/*", "arn:aws:s3:::dr/*"]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation"
            ],
            "Resource": ["arn:aws:s3:::snow-dynamic-storage", "arn:aws:s3:::dr"],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "*"
                    ]
                }
            }
        }
    ]
}

**주의 첫번째는  "Resource": ["arn:aws:s3:::snow-dynamic-storage/*", "arn:aws:s3:::dr/*"] 두번째는 /* 제외한  "Resource": ["arn:aws:s3:::snow-dynamic-storage", "arn:aws:s3:::dr"]

step2. 역할 생성

 

step3. snowflake 클라이언트에서 integration 객체 생성

 

create storage integration aws_s3_access
  type = external_stage
  storage_provider = 'S3'
  enabled = true
  storage_aws_role_arn = 'arn:aws:iam::120xxxxxxxx:role/snowrole'
  storage_allowed_locations = ('s3://dr/', 's3://snow-dynamic-storage/');
  
show storage integrations;
describe storage integration aws_s3_access;
step4. AWS에서 신뢰관계 설정


step5. stage생성
CREATE OR REPLACE STAGE TEST_STAGE
STORAGE_INTEGRATION = aws_s3_access
URL = 's3://snow-dynamic-storage';

 

step6. S3의 파일오브젝트 로딩 확인
list @test_stage;

 

참고문서. 첨부파일

Snowflake S3 연계.pdf
4.45MB

Comments