S3 Access Grants 크로스 계정 접근

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 접근의 사용자 흐름을 보여 줘요.

  • 두 번째 계정(B)의 사용자나 애플리케이션이 Amazon S3 데이터가 저장된 내 계정(A)의 S3 Access Grants 인스턴스에 자격 증명을 요청해요. 자세한 내용은 S3 Access Grants를 통해 Amazon S3 데이터 접근 요청을 참고하세요.
  • 내 계정(A)의 S3 Access Grants 인스턴스는 두 번째 계정에 내 Amazon S3 데이터에 대한 접근 권한을 부여하는 접근 권한이 있으면 임시 자격 증명을 반환해요. 접근 권한에 대한 자세한 내용은 S3 Access Grants 접근 권한 다루기를 참고하세요.
  • 두 번째 계정(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단계: 두 번째 계정 444455556666의 IAM 보안 주체가 내 계정 111122223333의 S3 Access Grants 인스턴스에서 자격 증명을 요청할 수 있도록 IAM 권한을 구성합니다.
  • 4단계: 내 계정 111122223333에서 두 번째 계정 444455556666의 IAM 보안 주체에게 내 계정 111122223333의 일부 S3 데이터에 대한 접근 권한을 부여하는 접근 권한을 만듭니다.

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

먼저 내 계정 111122223333에 내 Amazon S3 데이터에 대한 접근을 관리할 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 Access Grants 인스턴스 자체는 리소스 기반 정책을 지원해요. 올바른 리소스 기반 정책이 있으면 다른 AWS 계정의 AWS Identity and Access Management(IAM) 사용자나 역할이 내 S3 Access Grants 인스턴스에 접근할 수 있게 부여할 수 있어요. 크로스 계정 접근은 다음 권한(작업)만 부여해요.

  • s3:GetAccessGrantsInstanceForPrefix – 사용자, 역할, 또는 앱이 특정 접두사를 포함하는 S3 Access Grants 인스턴스를 조회할 수 있어요.
  • s3:ListAccessGrants
  • s3:ListAccessLocations
  • s3:ListCallerAccessGrants
  • s3:GetDataAccess – 사용자, 역할, 또는 앱이 S3 Access Grants를 통해 부여받은 접근을 기반으로 임시 자격 증명을 요청할 수 있어요. 이 자격 증명을 사용해 접근 권한이 부여된 S3 데이터에 접근해요.

리소스 정책에 이 권한 중 어떤 것을 포함할지 선택할 수 있어요. S3 Access Grants 인스턴스의 이 리소스 정책은 일반적인 리소스 기반 정책이며 IAM 정책 언어가 지원하는 모든 것을 지원해요. 같은 정책에서 aws:PrincipalArn 조건을 사용하는 등으로 내 계정 111122223333의 특정 IAM 신원에 접근 권한을 부여할 수도 있지만, S3 Access Grants로 그렇게 할 필요는 없어요. 대신 내 S3 Access Grants 인스턴스 안에서 내 계정의 개별 IAM 신원과 다른 계정 모두에 대한 접근 권한을 만들 수 있어요. 각 접근 권한을 S3 Access Grants를 통해 관리하면 권한을 확장할 수 있어요.

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

s3:AccessGrants 리소스를 다른 계정이나 조직 안에서 공유하려면 AWS Resource Access Manager(AWS RAM) 콘솔을 사용하는 것을 권장해요. S3 Access Grants를 크로스 계정으로 공유하려면 다음을 수행하세요.

S3 Access Grants 인스턴스 리소스 정책을 구성하려면:

  1. AWS Management Console에 로그인하고 Amazon S3 콘솔을 https://console.aws.amazon.com/s3/에서 엽니다.
  2. AWS Region 선택기에서 AWS 리전을 선택합니다.
  3. 왼쪽 탐색 창에서 Access Grants를 선택합니다.
  4. Access Grants 인스턴스 페이지의 Instance in this account 섹션에서 Share instance를 선택합니다. 그러면 AWS RAM 콘솔로 리디렉션됩니다.
  5. Create resource share를 선택합니다.
  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로, 두 번째 계정 444455556666을 Principal로 지정하세요. 다음 예제를 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.

{
  "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 인스턴스 리소스 정책 추가 또는 업데이트

aws s3control put-access-grants-instance-resource-policy \
--account-id 111122223333 \
--policy file://resourcePolicy.json \
--region us-east-2
{
  "Policy": "{\n\n\"Version\": \"2012-10-17\",\n\n\"Statement\": [{\n\n\"Effect\": \"Allow\",\n\n\"Principal\": {\n\n\"AWS\": \"444455556666\"\n\n},\n\n\"Action\": [\n\n\"s3:ListAccessGrants\",\n\n\"s3:ListAccessGrantsLocations\",\n\n\"s3:GetDataAccess\",\n\n\"s3:GetAccessGrantsInstanceForPrefix\",\n\n\"s3:ListCallerAccessGrants\"\n\n],\n\n\"Resource\": \"arn:aws:s3:us-east-2:111122223333:access-grants/default\"\n\n}\n\n]\n\n}\n",
  "CreatedAt": "2023-06-16T00:07:47.473000+00:00"
}

예제 – S3 Access Grants 리소스 정책 가져오기

CLI를 사용해 S3 Access Grants 인스턴스의 리소스 정책을 가져오거나 삭제할 수도 있어요. S3 Access Grants 리소스 정책을 가져오려면 다음 예제 명령을 사용하세요. 이 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.

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\",\"s3:GetAccessGrantsInstanceForPrefix\",\"s3:ListCallerAccessGrants\"],\"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 리소스 정책을 삭제하려면 다음 예제 명령을 사용하세요. 이 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.

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

// 응답 본문 없음

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로, 두 번째 계정 444455556666을 Principal로 지정하세요. 다음 예제를 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.

{
  "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 Reference의 다음 섹션을 참고하세요.

  • PutAccessGrantsInstanceResourcePolicy
  • GetAccessGrantsInstanceResourcePolicy
  • DeleteAccessGrantsInstanceResourcePolicy

이 섹션은 두 번째 AWS 계정에 내 S3 데이터 일부에 대한 접근 권한을 부여하도록 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로, 두 번째 계정 444455556666을 Principal로 지정하세요. 다음 예제를 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.

{
  "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",
                "s3:ListCallerAccessGrants"
            ],
            "Resource": "arn:aws:s3:us-east-2:111122223333:access-grants/default"
        }]
    }
)

예제 – S3 Access Grants 리소스 정책 가져오기

S3 Access Grants 리소스 정책을 가져오려면 다음 코드 예제를 사용하세요. 다음 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.

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","s3:GetAccessGrantsInstanceForPrefix","s3:ListCallerAccessGrants"],"Resource":"arn:aws:s3:us-east-2:111122223333:access-grants/default"}]},
    CreatedAt=2023-06-15T22:54:44.319Z
)

예제 – S3 Access Grants 리소스 정책 삭제

S3 Access Grants 리소스 정책을 삭제하려면 다음 코드 예제를 사용하세요. 다음 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.

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
  • s3:ListCallerAccessGrants

AWS 크로스 계정 접근 패턴에 따라 두 번째 계정 444455556666의 IAM 사용자나 역할은 이 권한 중 하나 이상을 명시적으로 가져야 해요. 예를 들어 s3:GetDataAccess 권한을 부여해 IAM 사용자나 역할이 계정 111122223333의 S3 Access Grants 인스턴스를 호출해 자격 증명을 요청할 수 있게 하세요.

이 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.

{
  "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단계: 두 번째 계정의 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 명령이에요. 자세한 내용은 접근 권한 만들기를 참고하세요. 이 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.

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

크로스 계정 접근을 구성한 뒤에는 두 번째 계정의 사용자나 역할이 다음을 수행할 수 있어요.

출처: 문서

본문

Configuring cross-account access (크로스 계정 접근 구성하기)

크로스 계정 S3 접근을 구성하는 4단계 과정을 설명했어요. 리소스 정책으로 인스턴스 접근을 부여하고, 접근 권한으로 실제 S3 데이터 접근을 부여해요.

더 알아보기 (Learn more)