S3 Access Grants 크로스 계정 액세스 - Amazon Simple Storage Service

S3 Access Grants 크로스 계정 액세스

S3 Access Grants를 사용하면 다음에 Amazon S3 데이터 액세스 권한을 부여할 수 있습니다.

  • 계정 내 AWS Identity and Access Management(IAM) 자격 증명

  • 다른 AWS 계정의 IAM 자격 증명

  • AWS IAM Identity Center 인스턴스의 디렉터리 사용자 또는 그룹

먼저 다른 계정에 크로스 계정 액세스를 구성합니다. 여기에는 리소스 정책을 사용하여 S3 Access Grants 인스턴스에 대한 액세스 권한을 부여하는 것이 포함됩니다. 그런 다음 권한 부여를 사용하여 S3 데이터(버킷, 접두사 또는 객체)에 대한 액세스 권한을 부여하세요.

크로스 계정 액세스를 구성한 후 다른 계정은 S3 Access Grants에서 Amazon S3 데이터에 대한 임시 액세스 자격 증명을 요청할 수 있습니다. 다음 이미지는 S3 Access Grants를 통한 크로스 계정 S3 액세스의 사용자 흐름을 보여 줍니다.

S3 Access Grants 크로스 계정 사용자 흐름
  1. 두 번째 계정(B)의 사용자 또는 애플리케이션이 Amazon S3 데이터가 저장되는 사용자 계정(A)의 S3 Access Grants 인스턴스에서 자격 증명을 요청합니다. 자세한 내용은 S3 Access Grants를 통해 Amazon S3 데이터에 대한 액세스 요청 단원을 참조하십시오.

  2. 두 번째 계정에 Amazon S3 데이터에 대한 액세스 권한을 부여하는 권한 부여가 있는 경우 사용자 계정(A)의 S3 Access Grants 인스턴스가 임시 자격 증명을 반환합니다. 자세한 내용은 권한 부여 생성 단원을 참조하십시오.

  3. 두 번째 계정(B)의 사용자 또는 애플리케이션이 S3 Access Grants에서 벤딩한 자격 증명을 사용하여 사용자 계정(A)의 S3 데이터에 액세스합니다.

S3 Access Grants 크로스 계정 액세스 구성

S3 Access Grants를 통해 크로스 계정 S3 액세스 권한을 부여하려면 다음 단계를 따르세요.

  • 1단계: 계정(예: S3 데이터가 저장되는 계정 ID 111122223333)에서 S3 Access Grants 인스턴스를 구성합니다.

  • 2단계: 계정 111122223333에서 S3 Access Grants 인스턴스에 대한 리소스 정책을 구성하여 두 번째 계정(예: 계정 ID 444455556666)에 액세스 권한을 부여합니다.

  • 3단계: 계정 111122223333의 S3 Access Grants 인스턴스로부터 자격 증명을 요청하도록 두 번째 계정 444455556666의 IAM 보안 주체에 대한 IAM 권한을 구성합니다.

  • 4단계: 계정 111122223333에 권한 부여를 생성하여 두 번째 계정 444455556666의 IAM 보안 주체에 계정 111122223333의 일부 S3 데이터에 대한 액세스 권한을 부여합니다.

1단계: 계정에서 S3 Access Grants 인스턴스 구성

먼저 Amazon S3 데이터에 대한 액세스를 관리하려면 계정 111122223333에 S3 Access Grants 인스턴스가 있어야 합니다. 공유하려는 S3 데이터가 저장된 각 AWS 리전에서 S3 Access Grants 인스턴스를 생성해야 합니다. 둘 이상의 AWS 리전에서 데이터를 공유하는 경우 각 AWS 리전에 대해 이러한 구성 단계를 반복하세요. S3 데이터가 저장된 AWS 리전에 이미 S3 Access Grants 인스턴스가 있는 경우 다음 단계로 진행합니다. S3 Access Grants 인스턴스를 구성하지 않은 경우 S3 Access Grants 인스턴스 생성 단원을 참조하여 이 단계를 완료하세요.

2단계: S3 Access Grants 인스턴스에 크로스 계정 액세스 권한을 부여하기 위한 리소스 정책 구성

111122223333 계정에서 크로스 계정 액세스를 위한 S3 Access Grants 인스턴스를 생성한 후에는 계정 111122223333의 S3 Access Grants 인스턴스에 리소스 기반 정책을 구성하여 크로스 계정 액세스 권한을 부여합니다. S3 AccessGrants 인스턴스는 리소스 기반 정책을 지원합니다. 적절한 리소스 기반 정책을 적용하면 다른 AWS 계정의 AWS Identity and Access Management(IAM) 사용자 또는 역할에 S3 Access Grants 인스턴스에 대한 액세스 권한을 부여할 수 있습니다. 크로스 계정 액세스는 다음과 같은 권한(작업)만 부여합니다.

  • s3:GetAccessGrantsInstanceForPrefix - 사용자, 역할 또는 앱이 특정 접두사가 포함된 S3 Access Grants 인스턴스를 검색할 수 있습니다.

  • s3:ListAccessGrants

  • s3:ListAccessLocations

  • s3:GetDataAccess - 사용자, 역할 또는 앱이 S3 Access Grants를 통해 부여받은 액세스 권한을 기반으로 임시 자격 증명을 요청할 수 있습니다. 해당 보안 인증 정보를 사용하여 액세스 권한이 부여된 S3 데이터에 액세스합니다.

이러한 권한 중 리소스 정책에 포함할 권한을 선택할 수 있습니다. S3 Access Grants 인스턴스의 이 리소스 정책은 일반적인 리소스 기반 정책이며 IAM 정책 언어가 지원하는 모든 것을 지원합니다. 동일한 정책에서 예컨대 aws:PrincipalArn 조건을 사용하여 계정 111122223333의 특정 IAM 자격 증명에 액세스 권한을 부여할 수 있지만, S3 Access Grants를 사용하면 그렇게 할 필요가 없습니다. 대신 S3 Access Grants 인스턴스 내에서 계정에 있는 개별 IAM ID뿐만 아니라 다른 계정을 위한 권한 부여를 생성할 수 있습니다. S3 Access Grants를 통해 각 액세스 권한 부여를 관리함으로써 권한을 확장할 수 있습니다.

이미 AWS Resource Access Manager(AWS RAM)를 사용하는 경우 이를 사용하여 s3:AccessGrants 리소스를 다른 계정이나 조직 내에서 공유할 수 있습니다. 자세한 내용은 공유 AWS 리소스 작업을 참조하세요. AWS RAM를 사용하지 않는 경우 S3 Access Grants API 작업 또는 AWS Command Line Interface(AWS CLI)를 사용하여 리소스 정책을 추가할 수도 있습니다.

AWS Resource Access Manager(AWS RAM) 콘솔을 사용하여 s3:AccessGrants 리소스를 다른 계정이나 조직 내에서 공유하는 것이 좋습니다. 계정 간에 S3 Access Grants를 공유하려면 다음을 수행합니다.

S3 Access Grants 인스턴스 리소스 정책을 구성하려면:
  1. AWS Management Console에 로그인한 후 https://console.aws.amazon.com/s3/에서 Amazon S3 콘솔을 엽니다.

  2. AWS 리전 선택기에서 AWS 리전을 선택합니다.

  3. 왼쪽 탐색 창에서 Access Grants를 선택합니다.

  4. Access Grants 인스턴스 페이지의 이 계정의 인스턴스 섹션에서 인스턴스 공유를 선택합니다. 그러면 AWS RAM 콘솔로 리디렉션됩니다.

  5. 리소스 공유 생성을 선택합니다.

  6. 리소스 공유를 생성하기 위한 AWS RAM 단계를 따릅니다. 자세한 내용은 AWS RAM에서 리소스 공유 생성을 참조하세요.

AWS CLI를 설치하려면 AWS Command Line Interface 사용 설명서AWS CLI 설치를 참조하세요.

put-access-grants-instance-resource-policy CLI 명령을 사용하여 리소스 정책을 추가할 수 있습니다.

사용자 계정 111122223333의 S3 Access Grants 인스턴스에 대한 크로스 계정 액세스 권한을 두 번째 계정 444455556666에 부여하려면 계정 111122223333의 S3 Access Grants 인스턴스에 대한 리소스 정책이 두 번째 계정 444455556666에 다음 작업을 수행하기 위한 권한을 부여해야 합니다.

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

S3 Access Grants 인스턴스 리소스 정책에서 S3 Access Grants 인스턴스의 ARN을 Resource로 지정하고 두 번째 계정 444455556666Principal로 지정합니다. 다음 예시를 사용하려면 사용자 입력 자리 표시자를 실제 정보로 바꾸세요.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

S3 Access Grants 인스턴스 리소스 정책을 추가하거나 업데이트하려면 다음 명령을 사용할 수 있습니다. 다음 예시 명령을 사용할 때는 user input placeholders를 실제 정보로 바꾸세요.

예 S3 Access Grants 인스턴스 리소스 정책 추가 또는 업데이트
aws s3control put-access-grants-instance-resource-policy \ --account-id 111122223333 \ --policy file://resourcePolicy.json \ --region us-east-2 { "Policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Principal\": {\n \"AWS\": \"444455556666\"\n },\n \"Action\": [\n \"s3:ListAccessGrants\",\n \"s3:ListAccessGrantsLocations\",\n \"s3:GetDataAccess\",\n \"s3:GetAccessGrantsInstanceForPrefix\"\n ],\n \"Resource\": \"arn:aws:s3:us-east-2:111122223333:access-grants/default\"\n }\n ]\n }\n", "CreatedAt": "2023-06-16T00:07:47.473000+00:00" }
예 S3 Access Grants 리소스 정책 가져오기

또한 CLI를 사용하여 S3 Access Grants 인스턴스의 리소스 정책을 가져오거나 삭제할 수 있습니다.

S3 Access Grants 리소스 정책을 가져오려면 다음 예시 명령을 사용하세요. 이 예 명령을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

aws s3control get-access-grants-instance-resource-policy \ --account-id 111122223333 \ --region us-east-2 { "Policy": "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":\"arn:aws:iam::111122223333:root\"},\"Action\":[\"s3:ListAccessGrants\",\"s3:ListAccessGrantsLocations\",\"s3:GetDataAccess\"],\"Resource\":\"arn:aws:s3:us-east-2:111122223333:access-grants/default\"}]}", "CreatedAt": "2023-06-16T00:07:47.473000+00:00" }
예 S3 Access Grants 리소스 정책 삭제

S3 Access Grants 리소스 정책을 삭제하려면 다음 예시 명령을 사용하세요. 이 예 명령을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

aws s3control delete-access-grants-instance-resource-policy \ --account-id 111122223333 \ --region us-east-2 // No response body

PutAccessGrantsInstanceResourcePolicy API를 사용하여 리소스 정책을 추가할 수 있습니다.

사용자 계정 111122223333의 S3 Access Grants 인스턴스에 대한 크로스 계정 액세스 권한을 두 번째 계정 444455556666에 부여하려면 계정 111122223333의 S3 Access Grants 인스턴스에 대한 리소스 정책이 두 번째 계정 444455556666에 다음 작업을 수행하기 위한 권한을 부여해야 합니다.

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

S3 Access Grants 인스턴스 리소스 정책에서 S3 Access Grants 인스턴스의 ARN을 Resource로 지정하고 두 번째 계정 444455556666Principal로 지정합니다. 다음 예시를 사용하려면 사용자 입력 자리 표시자를 실제 정보로 바꾸세요.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

그러고 나서 PutAccessGrantsInstanceResourcePolicy API를 사용하여 정책을 구성할 수 있습니다.

S3 Access Grants 인스턴스의 리소스 정책을 가져오거나 업데이트, 삭제하기 위한 REST API 지원에 대한 내용은 Amazon Simple Storage Service API 참조의 다음 단원을 참조하세요.

이 단원에서는 일부 S3 데이터에 대한 액세스 권한을 두 번째 AWS 계정에 부여하도록 S3 Access Grants 리소스 정책을 구성하는 방법에 대한 AWS SDK 예시를 제공합니다.

Java

S3 Access Grants 인스턴스에 대한 크로스 계정 액세스를 관리하기 위해 리소스 정책을 추가 또는 업데이트하거나 가져오거나 삭제합니다.

예 S3 Access Grants 인스턴스 리소스 정책 추가 또는 업데이트

사용자 계정 111122223333의 S3 Access Grants 인스턴스에 대한 크로스 계정 액세스 권한을 두 번째 계정 444455556666에 부여하려면 계정 111122223333의 S3 Access Grants 인스턴스에 대한 리소스 정책이 두 번째 계정 444455556666에 다음 작업을 수행하기 위한 권한을 부여해야 합니다.

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

S3 Access Grants 인스턴스 리소스 정책에서 S3 Access Grants 인스턴스의 ARN을 Resource로 지정하고 두 번째 계정 444455556666Principal로 지정합니다. 다음 예시를 사용하려면 사용자 입력 자리 표시자를 실제 정보로 바꾸세요.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

S3 Access Grants 인스턴스 리소스 정책을 추가하거나 업데이트하려면 다음 예시 코드를 사용하세요.

public void putAccessGrantsInstanceResourcePolicy() { PutAccessGrantsInstanceResourcePolicyRequest putRequest = PutAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .policy(RESOURCE_POLICY) .build(); PutAccessGrantsInstanceResourcePolicyResponse putResponse = s3Control.putAccessGrantsInstanceResourcePolicy(putRequest); LOGGER.info("PutAccessGrantsInstanceResourcePolicyResponse: " + putResponse); }

응답:

PutAccessGrantsInstanceResourcePolicyResponse( Policy={ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "AWS": "444455556666" }, "Action": [ "s3:ListAccessGrants", "s3:ListAccessGrantsLocations", "s3:GetDataAccess", "s3:GetAccessGrantsInstanceForPrefix" ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" }] } )
예 S3 Access Grants 리소스 정책 가져오기

S3 Access Grants 리소스 정책을 가져오려면 다음 예시 코드를 사용하세요. 다음 예시 명령을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

public void getAccessGrantsInstanceResourcePolicy() { GetAccessGrantsInstanceResourcePolicyRequest getRequest = GetAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .build(); GetAccessGrantsInstanceResourcePolicyResponse getResponse = s3Control.getAccessGrantsInstanceResourcePolicy(getRequest); LOGGER.info("GetAccessGrantsInstanceResourcePolicyResponse: " + getResponse); }

응답:

GetAccessGrantsInstanceResourcePolicyResponse( Policy={"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":"arn:aws:iam::444455556666:root"},"Action":["s3:ListAccessGrants","s3:ListAccessGrantsLocations","s3:GetDataAccess"],"Resource":"arn:aws:s3:us-east-2:111122223333:access-grants/default"}]}, CreatedAt=2023-06-15T22:54:44.319Z )
예 S3 Access Grants 리소스 정책 삭제

S3 Access Grants 리소스 정책을 삭제하려면 다음 예시 코드를 사용하세요. 다음 예시 명령을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

public void deleteAccessGrantsInstanceResourcePolicy() { DeleteAccessGrantsInstanceResourcePolicyRequest deleteRequest = DeleteAccessGrantsInstanceResourcePolicyRequest.builder() .accountId(111122223333) .build(); DeleteAccessGrantsInstanceResourcePolicyResponse deleteResponse = s3Control.putAccessGrantsInstanceResourcePolicy(deleteRequest); LOGGER.info("DeleteAccessGrantsInstanceResourcePolicyResponse: " + deleteResponse); }

응답:

DeleteAccessGrantsInstanceResourcePolicyResponse()

3단계: 두 번째 계정의 IAM 자격 증명에 사용자 계정의 S3 Access Grants 인스턴스를 직접 호출할 수 있는 권한을 부여합니다.

Amazon S3 데이터 소유자가 계정 111122223333의 S3 Access Grants 인스턴스에 대한 크로스 계정 정책을 구성한 후, 두 번째 계정 444455556666의 소유자는 해당 IAM 사용자 또는 역할에 대한 자격 증명 기반 정책을 생성하고 소유자는 해당 사용자 또는 역할에 S3 Access Grants 인스턴스에 대한 액세스 권한을 부여해야 합니다. S3 Access Grants 인스턴스 리소스 정책에서 부여된 내용과 부여하려는 권한에 따라 자격 증명 기반 정책에 다음 작업 중 하나 이상을 포함하세요.

  • s3:ListAccessGrants

  • s3:ListAccessGrantsLocations

  • s3:GetDataAccess

  • s3:GetAccessGrantsInstanceForPrefix

AWS 크로스 계정 액세스 패턴에 따라 두 번째 계정444455556666의 IAM 사용자 또는 역할은 이러한 권한 중 하나 이상을 명시적으로 보유해야 합니다. 예를 들어, IAM 사용자 또는 역할이 계정 111122223333의 S3 Access Grants 인스턴스를 직접 호출하여 자격 증명을 요청할 수 있도록 s3:GetDataAccess 권한을 부여합니다.

이 예 명령을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetDataAccess", ], "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default" } ] }

IAM 자격 증명 기반 정책 편집에 대한 자세한 내용은 AWS Identity and Access Management 설명서의 IAM 정책 편집을 참조하세요.

4단계: 사용자 계정의 S3 Access Grants 인스턴스에서 권한 부여를 생성하여 두 번째 계정의 IAM 자격 증명에 일부 S3 데이터에 대한 액세스 권한을 부여합니다.

최종 구성 단계에서는 계정 111122223333의 S3 Access Grants 인스턴스에서 권한 부여를 생성하여 두 번째 계정 444455556666의 IAM 자격 증명에 사용자 계정의 일부 S3 데이터에 대한 액세스 권한을 부여할 수 있습니다. Amazon S3 콘솔, CLI, API 및 SDK를 사용하여 이 작업을 수행할 수 있습니다. 자세한 내용은 권한 부여 생성 단원을 참조하십시오.

권한 부여에서 두 번째 계정의 IAM 자격 증명의 AWS ARN을 지정하고 액세스 권한을 부여하려는 S3 데이터의 위치(버킷, 접두사 또는 객체)를 지정합니다. 이 위치는 S3 Access Grants 인스턴스에 등록되어 있어야 합니다. 자세한 내용은 위치 등록 단원을 참조하십시오. 원한다면 하위 접두사를 지정할 수 있습니다. 예를 들어, 액세스 권한을 부여하려는 위치가 버킷이고 해당 버킷의 특정 객체로 액세스를 추가적으로 제한하려면 S3SubPrefix 필드에 객체 키 이름을 전달합니다. 또는 키 이름이 특정 접두사(예: 2024-03-research-results/)로 시작하는 버킷 내 객체로 액세스를 제한하려면 S3SubPrefix=2024-03-research-results/를 전달합니다.

다음은 두 번째 계정의 자격 증명을 위한 액세스 권한 부여를 생성하는 예시 CLI 명령입니다. 자세한 정보는 권한 부여 생성을 참조하세요. 이 예 명령을 사용하려면 user input placeholders를 실제 정보로 대체하세요.

aws s3control create-access-grant \ --account-id 111122223333 \ --access-grants-location-id default \ --access-grants-location-configuration S3SubPrefix=prefixA* \ --permission READ \ --grantee GranteeType=IAM,GranteeIdentifier=arn:aws:iam::444455556666:role/data-consumer-1

크로스 계정 액세스를 구성한 후 두 번째 계정의 사용자 또는 역할은 다음을 수행할 수 있습니다.