Amazon S3 버킷에 대한 접근 설정
Amazon S3 버킷에 대한 접근 설정
Amazon S3 파일에서 데이터를 가져오려면 파일이 들어 있는 Amazon S3 버킷에 접근할 수 있도록 RDS for PostgreSQL DB 인스턴스에 권한을 줘야 해요. 접근을 제공하는 방법은 아래 주제에서 설명하는 두 가지가 있어요.
출처: 문서
본문
Amazon S3 파일에서 데이터를 가져오려면 파일이 들어 있는 Amazon S3 버킷에 접근할 수 있도록 RDS for PostgreSQL DB 인스턴스에 권한을 줘야 해요. 접근을 제공하는 방법은 아래 주제에서 설명하는 두 가지가 있어요.
주제 (Topics)
- IAM 역할을 사용해 Amazon S3 버킷에 접근하기
- 보안 자격 증명을 사용해 Amazon S3 버킷에 접근하기
- Amazon S3 접근 문제 해결
IAM 역할을 사용해 Amazon S3 버킷에 접근하기
Amazon S3 파일에서 데이터를 로드하기 전에 파일이 들어 있는 Amazon S3 버킷에 접근할 수 있도록 RDS for PostgreSQL DB 인스턴스에 권한을 줘요. 이렇게 하면 추가 자격 증명 정보를 관리하거나 aws_s3.table_import_from_s3 함수 호출에 자격 증명을 제공할 필요가 없어요.
이를 위해 Amazon S3 버킷에 접근 권한을 제공하는 IAM 정책을 생성해요. IAM 역할을 만들고 정책을 역할에 연결해요. 그런 다음 IAM 역할을 DB 인스턴스에 할당해요.
IAM 역할을 통해 RDS for PostgreSQL DB 인스턴스에 Amazon S3 접근 권한을 주려면
-
IAM 정책을 생성해요.
이 정책은 RDS for PostgreSQL DB 인스턴스가 Amazon S3에 접근할 수 있게 해주는 버킷 및 객체 권한을 제공해요.
Amazon S3 버킷에서 Amazon RDS로 파일을 전송할 수 있도록 정책에 다음 필수 작업(action)을 포함해요.
s3:GetObjects3:ListBucket
Amazon S3 버킷과 버킷의 객체를 식별하기 위해 정책에 다음 리소스를 포함해요. 이것은 Amazon S3에 접근하기 위한 ARN(Amazon Resource Name) 형식을 보여줘요.
arn:aws:s3:::amzn-s3-demo-bucketarn:aws:s3:::amzn-s3-demo-bucket/*
RDS for PostgreSQL용 IAM 정책 생성에 대한 자세한 내용은 "IAM 데이터베이스 접근을 위한 IAM 정책 생성 및 사용" 문서를 참고하세요. 또한 IAM 사용자 가이드의 "첫 번째 고객 관리형 정책 생성 및 연결 튜토리얼" 문서도 참고하세요.
다음 AWS CLI 명령은 이러한 옵션으로
rds-s3-import-policy라는 IAM 정책을 생성해요.amzn-s3-demo-bucket이라는 버킷에 대한 접근 권한을 부여해요.참고
이 명령이 반환하는 정책의 ARN(Amazon Resource Name)을 기록해두세요. 나중에 정책을 IAM 역할에 연결할 때 이 ARN이 필요해요.
예시 — Linux, macOS, 또는 Unix:
aws iam create-policy \ --policy-name rds-s3-import-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }'예시 — Windows:
aws iam create-policy ^ --policy-name rds-s3-import-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }' -
IAM 역할을 생성해요.
Amazon RDS가 이 IAM 역할을 맡아(assume) Amazon S3 버킷에 접근하도록 하기 위해서예요. 자세한 내용은 IAM 사용자 가이드의 "IAM 사용자에게 권한을 위임할 역할 생성" 문서를 참고하세요.
리소스 기반 정책에서
aws:SourceArn과aws:SourceAccount전역 조건 컨텍스트 키를 사용해 서비스의 권한을 특정 리소스로 제한하는 것을 권장해요. 이것이 confused deputy(혼동된 대리자) 문제를 방지하는 가장 효과적인 방법이에요.두 전역 조건 컨텍스트 키를 모두 사용하고
aws:SourceArn값에 계정 ID가 포함된 경우, 같은 정책 문에서 사용될 때aws:SourceAccount값과aws:SourceArn값의 계정이 동일해야 해요.단일 리소스에 대한 크로스 서비스 접근을 원한다면
aws:SourceArn을 사용해요. 해당 계정의 어떤 리소스든 크로스 서비스 사용과 연결되도록 허용하려면aws:SourceAccount를 사용해요.정책에서
aws:SourceArn전역 조건 컨텍스트 키를 리소스의 전체 ARN과 함께 반드시 사용해요. 다음 예시는 AWS CLI 명령을 사용해rds-s3-import-role이라는 역할을 생성하는 방법을 보여줘요.예시 — Linux, macOS, 또는 Unix:
aws iam create-role \ --role-name rds-s3-import-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname" } } } ] }'예시 — Windows:
aws iam create-role ^ --role-name rds-s3-import-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:db:dbname" } } } ] }' -
생성한 IAM 정책을 생성한 IAM 역할에 연결해요.
다음 AWS CLI 명령은 이전 단계에서 생성한 정책을
rds-s3-import-role이라는 역할에 연결해요.your-policy-arn을 앞서 기록한 정책 ARN으로 바꿔주세요.예시 — Linux, macOS, 또는 Unix:
aws iam attach-role-policy \ --policy-arn your-policy-arn \ --role-name rds-s3-import-role예시 — Windows:
aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-import-role -
DB 인스턴스에 IAM 역할을 추가해요.
AWS Management Console 또는 AWS CLI를 사용해 추가할 수 있어요. 아래에서 설명할게요.
콘솔을 사용해 PostgreSQL DB 인스턴스에 IAM 역할을 추가하려면
- AWS Management Console에 로그인하고 https://console.aws.amazon.com/rds/ 에서 Amazon RDS 콘솔을 열어요.
- 세부 정보를 표시할 PostgreSQL DB 인스턴스 이름을 선택해요.
- Connectivity & security(연결 및 보안) 탭의 Manage IAM roles(IAM 역할 관리) 섹션에서 Add IAM roles to this instance(이 인스턴스에 IAM 역할 추가) 아래에 추가할 역할을 선택해요.
- Feature(기능) 아래에서
s3Import를 선택해요. - **Add role(역할 추가)**을 선택해요.
CLI를 사용해 PostgreSQL DB 인스턴스에 IAM 역할을 추가하려면
다음 명령을 사용해
my-db-instance라는 PostgreSQL DB 인스턴스에 역할을 추가해요.your-role-arn을 이전 단계에서 기록한 역할 ARN으로 바꿔주세요.--feature-name옵션 값으로는s3Import를 사용해요.예시 — Linux, macOS, 또는 Unix:
aws rds add-role-to-db-instance \ --db-instance-identifier my-db-instance \ --feature-name s3Import \ --role-arn your-role-arn \ --region your-region예시 — Windows:
aws rds add-role-to-db-instance ^ --db-instance-identifier my-db-instance ^ --feature-name s3Import ^ --role-arn your-role-arn ^ --region your-regionAmazon RDS API를 사용해 PostgreSQL DB 인스턴스에 IAM 역할을 추가하려면
AddRoleToDBInstance작업을 호출해요.
보안 자격 증명을 사용해 Amazon S3 버킷에 접근하기
원한다면 IAM 역할 대신 보안 자격 증명(security credentials)을 사용해 Amazon S3 버킷에 대한 접근을 제공할 수 있어요. aws_s3.table_import_from_s3 함수 호출에서 credentials 매개변수를 지정하면 돼요.
credentials 매개변수는 AWS 자격 증명을 포함하는 aws_commons._aws_credentials_1 유형의 구조체예요. 다음처럼 aws_commons.create_aws_credentials 함수를 사용해 aws_commons._aws_credentials_1 구조체에 액세스 키와 시크릿 키를 설정해요.
postgres=> SELECT aws_commons.create_aws_credentials(
'sample_access_key', 'sample_secret_key', '')
AS creds \gset
aws_commons._aws_credentials_1 구조체를 만든 다음, 다음처럼 credentials 매개변수와 함께 aws_s3.table_import_from_s3 함수를 사용해 데이터를 가져와요.
postgres=> SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
:'s3_uri',
:'creds'
);
또는 aws_commons.create_aws_credentials 함수 호출을 aws_s3.table_import_from_s3 함수 호출 안에 인라인으로 포함할 수도 있어요.
postgres=> SELECT aws_s3.table_import_from_s3(
't', '', '(format csv)',
:'s3_uri',
aws_commons.create_aws_credentials('sample_access_key', 'sample_secret_key', '')
);
Amazon S3 접근 문제 해결
Amazon S3에서 데이터를 가져올 때 연결 문제가 발생하면 다음 권장 사항을 참고하세요.
- Amazon RDS ID 및 접근 문제 해결
- Amazon Simple Storage Service 사용자 가이드의 "Amazon S3 문제 해결"
- IAM 사용자 가이드의 "Amazon S3 및 IAM 문제 해결"