VPC로 제한된 S3 액세스 포인트를 통해 다른 계정의 버킷에 액세스하려면 어떻게 해야 하나요요?
서로 다른 AWS 계정에 AWS Identity and Access Management(IAM) 엔터티와 Amazon Simple Storage Service(Amazon S3) 버킷이 있습니다. Amazon S3 액세스 포인트를 통해 IAM 엔터티에 버킷에 대한 교차 계정 액세스 권한을 부여하고 싶습니다. 액세스 포인트는 Amazon Virtual Private Cloud(Amazon VPC)로 제한됩니다.
간략한 설명
Amazon VPC로 제한된 S3 액세스 포인트를 통해 한 AWS 계정의 IAM 역할 또는 사용자에게 다른 AWS 계정의 Amazon S3 버킷에 대한 액세스 권한을 부여할 수 있습니다.
IAM 엔터티가 계정 A에 있고 S3 버킷이 계정 B에 있다고 가정합니다. Amazon VPC로 제한된 S3 액세스 포인트를 통해 IAM 엔터티에 버킷에 대한 액세스 권한을 부여하려면 다음 단계를 완료합니다.
- Amazon S3 액세스 포인트를 생성하여 계정 B의 버킷에 연결합니다.
- 계정 A에서 Amazon S3 VPC 게이트웨이 엔드포인트를 생성합니다.
- 액세스 포인트, 버킷 및 IAM 엔터티에 정책을 연결합니다.
참고: 계정 A의 IAM 자격 증명은 계정 B의 S3 버킷과 동일한 AWS 리전에 있어야 합니다.
해결 방법
Amazon S3 액세스 포인트를 생성하여 계정 B의 버킷에 연결
Amazon S3 액세스 포인트를 생성하여 계정 B의 버킷에 연결하려면 다음 단계를 완료합니다.
- Amazon S3 콘솔을 엽니다.
- 탐색 창에서 액세스 포인트를 선택합니다.
- 액세스 포인트 생성을 선택합니다.
- 액세스 포인트 이름에 액세스 포인트의 이름을 입력합니다. 액세스 포인트의 이름을 지정하는 방법에 대한 자세한 내용은 Amazon S3 Access Points의 이름을 지정하는 규칙을 참조하세요.
- 버킷 이름에서 이 계정의 버킷 선택을 선택한 다음 액세스 포인트를 연결할 버킷 이름을 입력합니다.
- 네트워크 오리진에서 **가상 프라이빗 클라우드(VPC)**를 선택합니다.
- VPC ID에 다른 AWS 계정(계정 A)의 VPC ID를 입력합니다.
- 이 액세스 포인트에 대한 퍼블릭 액세스 차단 설정에서 액세스 포인트에 적용할 퍼블릭 액세스 차단 설정을 선택합니다.
참고: 액세스 포인트를 생성한 후에는 퍼블릭 액세스 차단 설정을 변경할 수 없습니다. - 액세스 포인트 정책은 비워 둡니다.
- 액세스 포인트 생성을 선택합니다.
계정 A에서 Amazon S3 VPC 게이트웨이 엔드포인트 생성
계정 A에서 계정 B의 Amazon S3 버킷에 대한 액세스 권한을 부여하는 S3 VPC 게이트웨이 엔드포인트를 생성하려면 다음 단계를 완료합니다.
- Amazon VPC 콘솔을 엽니다.
- 탐색 창에서 엔드포인트를 선택합니다.
- 엔드포인트 생성을 선택합니다.
- 서비스 카테고리에서 AWS 서비스를 선택합니다.
- 서비스의 경우 Type = Gateway 필터를 추가하고 com.amazonaws를 선택합니다.<region>.s3를 선택합니다.
- VPC의 경우 계정 B에서 액세스 포인트를 생성하는 데 사용한 VPC를 선택합니다.
- 라우팅 테이블에서 엔드포인트에서 사용해야 하는 라우팅 테이블을 선택합니다.
- 정책에서 전체 액세스를 선택하면 VPC 엔드포인트를 통해 모든 리소스에 대해 모든 원칙에 따른 모든 작업을 허용합니다. 또는 사용자 지정을 선택하고 필요한 S3 작업을 허용하는 자체 정책을 사용합니다.
예를 들어 다음 VPC 엔드포인트 정책은 모든 버킷에 대한 모든 S3 작업을 허용합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:*" } ] }
참고: 게이트웨이 엔드포인트는 다른 AWS 리전에서의 액세스를 허용하지 않습니다.
액세스 포인트, 버킷 및 IAM 엔터티에 정책 연결
액세스 포인트를 통해 계정 A의 IAM 엔터티에 계정 B의 버킷에 대한 액세스 권한을 부여하려면 다음에 정책을 연결해야 합니다.
- 액세스 포인트
- S3 버킷
- IAM 엔터티
액세스 포인트 정책
계정 A의 IAM 엔터티에 계정 B의 S3 액세스 포인트에 대한 권한을 부여하려면 액세스 포인트에 다음 정책을 연결합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DelegateControlToAccessPoint", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::AccountA-ID:user/user1", "arn:aws:iam::AccountA-ID:role/role01" ] }, "Action": [ "s3:ListBucket", "s3:PutObject", "s3:GetObject" ], "Resource": [ "arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-acess-point/object/*", "arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point" ] } ] }
버킷 정책
액세스 포인트를 통해 계정 A의 IAM 엔터티에 계정 B의 버킷에 대한 권한을 부여하려면 다음 정책을 버킷에 연결합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountAccess", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::AccountA-ID:user/user1", "arn:aws:iam::AccountA-ID:role/role01" ] }, "Action": [ "s3:GetObject", "s3:ListBucket", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*" ], "Condition": { "StringEquals": { "s3:DataAccessPointArn": "arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point" } } } ] }
IAM 정책
계정 A의 IAM 엔터티에 계정 B의 버킷 및 액세스 포인트에 대한 권한을 부여하려면 IAM 엔터티에 다음 정책을 연결합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountAccessToBucketAndAP", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:PutObject", "s3:GetObject" ], "Resource": [ "arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point", "arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point/object/*", "arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*" ] } ] }
액세스 포인트를 통해 버킷에서 S3 작업을 수행하는 AWS CLI 예제 명령
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.
액세스 포인트를 통해 객체를 나열하려면 ls 명령을 실행합니다.
aws s3 ls arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point
액세스 포인트를 통해 파일을 업로드하려면 cp 명령을 실행합니다.
aws s3 cp file.txt s3://arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point
cp 명령을 사용하여 액세스 포인트를 통해 파일을 다운로드할 수도 있습니다.
aws s3 cp s3://arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point file.txt
참고: 요청은 버킷과 동일한 VPC 및 동일한 리전에 있는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 시작되어야 합니다.
관련 콘텐츠
- 질문됨 일 년 전lg...
- 질문됨 일 년 전lg...
- AWS 공식업데이트됨 2년 전