VPC로 제한된 S3 액세스 포인트를 사용하여 다른 계정의 버킷에 액세스하려면 어떻게 해야 하나요?

4분 분량
0

AWS Identity and Access Management(AWS IAM) 엔티티와 버킷이 서로 다른 AWS 계정에 있습니다. 특정 Amazon Virtual Private Cloud(Amazon VPC)로 제한된 Amazon Simple Storage Service(Amazon S3) 액세스 포인트를 사용하여 버킷에 대한 IAM 엔티티 크로스 계정 액세스 권한을 부여하려고 합니다.

해결 방법

AWS 계정(계정 A)의 IAM 역할 또는 사용자에게 특정 Amazon VPC로 제한된 S3 액세스 포인트를 사용하여 다른 AWS 계정(계정 B)의 Amazon S3 버킷에 대한 액세스 권한을 부여하려면 다음을 수행하세요.

  1. Amazon S3 액세스 포인트를 생성하여 계정 B의 버킷에 연결합니다.
  2. 계정 A에 Amazon S3 VPC 게이트웨이 엔드포인트를 생성합니다.
  3. 액세스 포인트, 버킷 및 IAM 정책을 연결합니다.

Amazon S3 액세스 포인트를 생성하여 계정 B의 버킷에 연결

  1. Amazon S3 콘솔을 엽니다.
  2. 탐색 창에서 Access Points(액세스 포인트)를 선택합니다.
  3. Create access point(액세스 포인트 생성)를 선택합니다.
  4. Access point name(액세스 포인트 이름)에 액세스 포인트의 이름을 입력합니다. 자세한 내용은 Amazon S3 액세스 포인트 이름 지정 규칙을 참조하세요.
  5. Bucket name(버킷 이름)에 액세스 포인트를 연결할 계정 B의 버킷 이름을 입력합니다.
  6. Network Origin(네트워크 오리진)에서 **Virtual Private Cloud(VPC)**를 선택합니다.
  7. VPC ID에 첫 번째 AWS 계정(계정 A) 의 VPC ID를 입력합니다.
  8. Block Public Access settings for this Access Point(이 액세스 포인트의 퍼블릭 액세스 차단 설정)에서 액세스 포인트에 적용할 퍼블릭 액세스 차단 설정을 선택합니다. 
    참고: 현재 Amazon S3는 액세스 포인트가 생성된 후 액세스 포인트의 퍼블릭 액세스 차단 설정 변경을 지원하지 않습니다.
  9. Access Point policy(액세스 포인트 정책)은 비워 둡니다.
  10. Create access point(액세스 포인트 생성)를 선택합니다.

계정 A에서 Amazon S3 VPC 게이트웨이 엔드포인트 생성

크로스 계정 액세스 권한을 부여하려는 버킷과 동일한 리전의 초기 AWS 계정(계정 A)에 S3 게이트웨이 VPC 엔드포인트를 생성합니다.

  1. Amazon VPC 콘솔을 엽니다.
  2. 탐색 창에서 Endpoints(엔드포인트)를 선택합니다.
  3. Create endpoint(엔드포인트 생성)를 선택합니다.
  4. Service category(서비스 카테고리)에서 AWS services(AWS 서비스)를 선택합니다.
  5. Services(서비스)에서 Type: Gateway 필터를 추가하고 액세스 포인트를 생성할 때 사용한 것과 동일한 리전을 선택합니다.
  6. VPC에서 액세스 포인트를 생성할 때 사용한 것과 동일한 VPC를 선택합니다.
  7. Route tables(라우팅 테이블)에서 엔드포인트에서 사용할 라우팅 테이블을 선택합니다.
  8. Full access(전체 액세스) 정책을 선택합니다. 또는 Custom(사용자 지정)을 선택하고 정책이 필요한 S3 작업을 허용하는지 확인하십시오.

참고: 게이트웨이 엔드포인트는 다른 AWS 리전에서의 액세스를 허용하지 않습니다. 다음은 모든 버킷에 대해 모든 S3 작업을 허용하는 VPC 엔드포인트 정책의 예입니다.

{
 "Version": "2012-10-17",
 "Statement": [{
  "Effect": "Allow",
  "Principal": "*",
  "Action": "s3:*",
  "Resource": "arn:aws:s3:*"
 }]
}

액세스 포인트, 버킷 및 IAM 정책 연결

초기 AWS 계정(계정 A)의 IAM 엔티티가 액세스 포인트를 통해 다른 AWS 계정(계정 B)의 버킷에 액세스하도록 크로스 계정 액세스를 허용하려면 액세스 포인트, 버킷 및 IAM 정책에서 권한을 부여해야 합니다. 다음은 각각에 필요한 권한을 부여하는 정책입니다.

액세스 포인트 정책:

{
 "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"
  ]
 }]
}

참고: 이 정책은 소스 AWS 계정(계정 A)의 IAM 사용자 또는 역할에 대상 AWS 계정(계정 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"
   }
  }
 }]
}

참고: 이 정책은 액세스 포인트를 사용하여 소스 AWS 계정(계정 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/*"
  ]
 }]
}

참고: 소스 AWS 계정(계정 A)의 IAM 역할 또는 사용자에 연결된 이 IAM 정책은 대상 AWS 계정(계정 B)의 버킷 및 액세스 포인트에 권한을 부여합니다.

액세스 포인트를 사용하여 버킷에 대해 S3 작업을 수행하기 위한 AWS CLI 명령 예제:

참고: AWS CLI 명령을 실행할 때 오류가 발생하는 경우 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.

나열:

aws s3 ls arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point

업로드:

aws s3 cp file.txt s3://arn:aws:s3:us-east-2:AccountB-ID:accesspoint/my-access-point

다운로드:

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) 인스턴스에서 시작되어야 합니다.


AWS 공식
AWS 공식업데이트됨 일 년 전