Amazon S3 버킷에 대한 액세스 권한 설정
Amazon S3 파일에서 데이터를 가져오려면 RDS for PostgreSQL DB 인스턴스에 파일이 저장된 Amazon S3 버킷에 액세스할 수 있는 권한을 부여합니다. 다음 항목에서 설명하는 두 방법 중 하나를 사용하여 Amazon S3 버킷에 대한 액세스 권한을 부여합니다.
IAM 역할을 사용해 Amazon S3 버킷에 액세스
Amazon S3 파일에서 데이터를 로드하기 전에 RDS for PostgreSQL DB 인스턴스에 파일이 저장된 Amazon S3 버킷에 액세스할 수 있는 권한을 부여합니다. 그러면 추가 자격 증명 정보를 관리하거나 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로의 파일 전송을 허용합니다.
-
s3:GetObject
-
s3:ListBucket
정책에 다음 리소스를 포함하여 Amazon S3 버킷 및 그 안의 객체를 식별합니다. 다음은 Amazon S3에 액세스하기 위한 Amazon 리소스 이름(ARN) 형색입니다.
-
arn:aws:s3:::
amzn-s3-demo-bucket
-
arn:aws:s3:::
amzn-s3-demo-bucket
/*
RDS for PostgreSQL용 IAM 정책 생성에 대한 자세한 내용은 IAM 데이터베이스 액세스를 위한 IAM 정책 생성 및 사용 단원을 참조하세요. IAM 사용 설명서의 자습서: 첫 번째 고객 관리형 정책 생성 및 연결도 참조하세요.
다음 AWS CLI 명령은 이 옵션으로
rds-s3-import-policy
라는 IAM 정책을 만듭니다.amzn-s3-demo-bucket
이라는 버킷에 대한 액세스 권한을 부여합니다.참고
이 명령에서 반환되는 정책 Amazon 리소스 이름(ARN)을 적어 둡니다. IAM 역할에 정책을 연결할 때 이후 단계에 ARN이 필요합니다.
예
대상 LinuxmacOS, 또는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 역할을 수임하여 사용자 대신 Amazon S3 버킷에 액세스할 수 있도록 역할을 생성할 수 있습니다. 자세한 내용은 IAM 사용 설명서의 IAM 사용자에게 권한을 위임하기 위한 역할 생성을 참조하세요.
서비스 권한을 특정 리소스로 제한하는 리소스 기반 정책의
aws:SourceArn
및aws:SourceAccount
전역 조건 컨텍스트 키를 사용하는 것이 좋습니다. 이는 혼동된 대리자 문제를 방지하는 가장 효과적인 방법입니다.두 전역 조건 컨텍스트 키와 계정 ID를 포함한
aws:SourceArn
값을 모두 사용하는 경우,aws:SourceAccount
값 및aws:SourceArn
값의 계정은 동일한 정책 문에서 사용될 경우 반드시 같은 계정 ID를 사용해야 합니다.단일 리소스에 대한 교차 서비스 액세스를 원하는 경우
aws:SourceArn
을 사용하세요.-
해당 계정의 모든 리소스가 교차 서비스 사용과 연결되도록 허용하려는 경우
aws:SourceAccount
를 사용하세요.
정책에서는 리소스의 전체 ARN이 포함된
aws:SourceArn
전역 조건 컨텍스트 키를 사용해야 합니다. 다음 예제에서는 AWS CLI 명령을 사용하여rds-s3-import-role
이라는 역할을 생성하는 방법을 보여줍니다.예
대상 LinuxmacOS, 또는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
이라는 역할에 연결합니다.
을 이전 단계에서 기록한 정책 ARN으로 바꿉니다.your-policy-arn
예
대상 LinuxmacOS, 또는Unix:
aws iam attach-role-policy \ --policy-arn
your-policy-arn
\ --role-name rds-s3-import-roleWindows의 경우:
aws iam attach-role-policy ^ --policy-arn
your-policy-arn
^ --role-name rds-s3-import-role -
IAM 역할을 DB 인스턴스에 추가합니다.
이렇게 하려면 다음에 설명한 대로 AWS Management Console 또는 AWS CLI를 사용합니다.
콘솔을 사용하여 PostgreSQL DB 인스턴스에 대해 IAM 역할을 추가하려면
AWS Management Console에 로그인한 후 https://console.aws.amazon.com/rds/
에서 Amazon RDS 콘솔을 엽니다. -
세부 정보를 표시하고자 하는 PostgreSQL DB 인스턴스 이름을 선택합니다.
-
연결성 및 보안(Connectivity & security) 탭에 있는 IAM 역할 관리(Manage IAM roles) 섹션의 이 인스턴스에 IAM 역할 추가(Add IAM roles to this cluster/instance)에서 추가할 역할을 선택합니다.
-
기능에서 s3Import를 선택합니다.
-
[Add role]을 선택합니다.
CLI를 사용하여 PostgreSQL DB 인스턴스에 대해 IAM 역할을 추가하려면
-
다음 명령을 사용해
my-db-instance
라는 PostgreSQL DB 인스턴스에 역할을 추가합니다.
을 이전 단계에서 기록한 정책 ARN으로 교체합니다.your-role-arn
s3Import
옵션의 값에 대해--feature-name
를 사용합니다.예
대상 LinuxmacOS, 또는Unix:
aws rds add-role-to-db-instance \ --db-instance-identifier
my-db-instance
\ --feature-name s3Import \ --role-arnyour-role-arn
\ --regionyour-region
Windows의 경우:
aws rds add-role-to-db-instance ^ --db-instance-identifier
my-db-instance
^ --feature-name s3Import ^ --role-arnyour-role-arn
^ --regionyour-region
Amazon RDS API를 사용하여 PostgreSQL DB 인스턴스에 대한 IAM 역할을 추가하려면 AddRoleToDBInstance 작업을 호출합니다.
보안 자격 증명을 사용해 Amazon S3 버킷에 액세스
원할 경우 IAM 역할을 사용하는 대신 보안 자격 증명을 사용해 Amazon S3 버킷에 대한 액세스 권한을 부여여할 수 있습니다. aws_s3.table_import_from_s3 함수 호출에서 credentials
파라미터를 지정하면 됩니다.
credentials
파라미터는 aws_commons._aws_credentials_1
자격 증명을 포함하는 AWS 유형의 구조입니다. 다음과 같이 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
구조를 생성한 후 aws_s3.table_import_from_s3 함수를 credentials
파라미터와 함께 사용해 데이터를 가져옵니다.
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 Simple Storage Service 사용 설명서의 Amazon S3 문제 해결
-
IAM 사용 설명서의 Amazon S3 문제 해결 및 IAM