접근 권한 만들기

접근 권한 만들기

S3 Access Grants 인스턴스의 개별 접근 권한은 특정 신원(identity) — AWS Identity and Access Management(IAM) 보안 주체, 또는 기업 디렉터리의 사용자나 그룹 — 이 S3 Access Grants 인스턴스에 등록된 위치 안에서 데이터에 접근할 수 있게 해 줘요. 위치는 버킷이나 접두사를 IAM 역할에 매핑해요. S3 Access Grants는 이 IAM 역할을 사용해 수혜자에게 임시 자격 증명을 발급해요.

S3 Access Grants 인스턴스에 위치를 하나 이상 등록한 뒤에는 접근 권한을 만들 수 있어요.

수혜자는 IAM 사용자나 역할, 또는 디렉터리 사용자나 그룹이 될 수 있어요. 디렉터리 사용자는 S3 Access Grants 인스턴스에 연결한 기업 디렉터리나 외부 신원 소스에 있는 사용자를 말해요. 자세한 내용은 S3 Access Grants 및 기업 디렉터리 신원을 참고하세요. IAM Identity Center의 특정 디렉터리 사용자나 그룹에 대한 접근 권한을 만들려면, IAM Identity Center가 그 사용자를 식별하는 GUID(예: a1b2c3d4-5678-90ab-cdef-EXAMPLE11111)를 찾아야 해요. IAM Identity Center를 사용해 사용자 정보를 확인하는 방법은 AWS IAM Identity Center 사용자 가이드의 사용자 및 그룹 할당 보기를 참고하세요.

버킷, 접두사, 또는 객체에 접근 권한을 부여할 수 있어요. Amazon S3에서 접두사는 버킷 안 객체를 구성하는 데 사용하는 객체 키 이름의 시작 부분에 오는 문자 문자열이에요. 허용된 문자로 구성된 문자열이라면 무엇이든 될 수 있어요. 예를 들어 버킷 안 객체 키 이름이 engineering/ 접두사로 시작하는 경우를 생각해 볼 수 있죠.

하위 접두사(Subprefix)

등록된 위치에 접근 권한을 부여할 때 Subprefix 필드를 사용해 접근 범위를 위치 범위의 일부로 좁힐 수 있어요. 접근 권한에 선택한 등록 위치가 기본 S3 경로(s3://)라면 접근 범위를 좁혀야 해요. 기본 위치(s3://)에 대한 접근 권한은 만들 수 없어요. 그렇게 하면 수혜자에게 한 AWS 리전의 모든 버킷에 대한 접근 권한이 부여되거든요. 대신 접근 범위를 다음 중 하나로 좁혀야 해요.

  • 버킷: s3://bucket/*
  • 버킷 내 접두사: s3://bucket/prefix*
  • 접두사 내 접두사: s3://bucket/prefixA/prefixB*
  • 객체: s3://bucket/object-key-name

등록 위치가 버킷인 접근 권한을 만드는 경우 Subprefix 필드에 다음 중 하나를 전달해 접근 범위를 좁힐 수 있어요.

  • 버킷 내 접두사: prefix*
  • 접두사 내 접두사: prefixA/prefixB*
  • 객체: /object-key-name

접근 권한을 만든 뒤에는 Amazon S3 콘솔에 표시되는 접근 범위 또는 API·AWS Command Line Interface(AWS CLI) 응답에서 반환되는 GrantScope가 위치 경로와 Subprefix를 연결한 결과가 돼요. 이 연결된 경로가 접근 권한을 부여하려는 S3 버킷, 접두사, 또는 객체에 올바르게 매핑되는지 확인하세요.

참고

하나의 객체에만 접근 권한을 부여하는 접근 권한을 만들어야 한다면 접근 권한 유형이 객체용임을 지정해야 해요. API 호출이나 CLI 명령에서 s3PrefixType 매개 변수를 Object 값으로 전달하면 돼요. Amazon S3 콘솔에서 접근 권한을 만들 때는 위치를 선택한 뒤 Grant scope 아래에서 Grant scope is an object 확인란을 선택하세요.

아직 존재하지 않는 버킷에 대한 접근 권한은 만들 수 없어요. 단, 아직 존재하지 않는 접두사에 대한 접근 권한은 만들 수 있어요.

S3 Access Grants 인스턴스에서 만들 수 있는 최대 접근 권한 수는 S3 Access Grants 제한 사항을 참고하세요.

접근 권한 만들기는 Amazon S3 콘솔, AWS CLI, Amazon S3 REST API, AWS SDK를 사용해 할 수 있어요.

접근 권한을 만들려면

  1. AWS Management Console에 로그인하고 Amazon S3 콘솔을 https://console.aws.amazon.com/s3/에서 엽니다.
  2. 왼쪽 탐색 창에서 Access Grants를 선택합니다.
  3. S3 Access Grants 페이지에서 작업하려는 S3 Access Grants 인스턴스가 들어 있는 리전을 선택합니다.
  4. S3 Access Grants 인스턴스를 처음 사용하는 경우, Set up Access Grants instance 마법사의 2단계 – 위치 등록을 완료하고 3단계로 이동했는지 확인합니다. 이미 S3 Access Grants 인스턴스가 있다면 View details를 선택한 다음 Grants 탭에서 Create grant를 선택합니다.
  5. Grant scope 섹션에서 등록된 위치를 선택하거나 입력합니다.
  6. 기본 s3:// 위치를 선택했다면 Subprefix 상자를 사용해 접근 권한의 범위를 좁힙니다. 자세한 내용은 하위 접두사(Subprefix)를 참고하세요. 객체에만 접근 권한을 부여한다면 Grant scope is an object를 선택합니다.
  7. Permissions and access에서 Permission level을 Read, Write, 또는 둘 다로 선택합니다.
  8. 그런 다음 Grantee type을 선택합니다. 기업 디렉터리를 IAM Identity Center에 추가하고 이 IAM Identity Center 인스턴스를 S3 Access Grants 인스턴스에 연결했다면 Directory identity from IAM Identity Center를 선택할 수 있어요. 이 옵션을 선택하면 IAM Identity Center에서 사용자 또는 그룹의 ID를 가져와 이 섹션에 입력합니다.
  9. Grantee type이 IAM 사용자나 역할인 경우 IAM principal을 선택합니다. IAM principal type에서 User 또는 Role을 선택합니다. 그런 다음 IAM principal user 아래에서 목록에서 선택하거나 신원의 ID를 입력합니다.
  10. S3 Access Grants 접근 권한을 만들려면 Next 또는 Create grant를 선택합니다.

Next 또는 Create grant가 비활성화되어 있다면:

  • Cannot create grant (접근 권한을 만들 수 없음) – S3 Access Grants 인스턴스에 위치를 먼저 등록해야 할 수 있어요.
  • 접근 권한을 만들 s3:CreateAccessGrant 권한이 없을 수 있어요. 계정 관리자에게 문의하세요.

AWS CLI를 설치하려면 AWS Command Line Interface 사용자 가이드의 AWS CLI 설치를 참고하세요. 다음 예제는 IAM 보안 주체에 대한 접근 권한 요청과 기업 디렉터리 사용자나 그룹에 대한 접근 권한 요청을 만드는 방법을 보여 줘요. 다음 예제 명령을 사용할 때는 사용자 입력 자리 표시자를 자신의 정보로 바꾸세요.

참고

하나의 객체에만 접근 권한을 부여하는 접근 권한을 만든다면 필수 매개 변수 --s3-prefix-type Object를 포함하세요.

예제 – IAM 보안 주체에 대한 접근 권한 요청 만들기

aws s3control create-access-grant \
--account-id 111122223333 \
--access-grants-location-id a1b2c3d4-5678-90ab-cdef-EXAMPLE22222 \
--access-grants-location-configuration S3SubPrefix=prefixB* \
--permission READ \
--grantee GranteeType=IAM,GranteeIdentifier=arn:aws:iam::123456789012:user/data-consumer-3

예제 – 접근 권한 만들기 응답

{
  "CreatedAt": "2023-05-31T18:41:34.663000+00:00",
  "AccessGrantId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
  "AccessGrantArn": "arn:aws:s3:us-east-2:111122223333:access-grants/default/grant/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
  "Grantee": {
    "GranteeType": "IAM",
    "GranteeIdentifier": "arn:aws:iam::111122223333:user/data-consumer-3"
  },
  "AccessGrantsLocationId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
  "AccessGrantsLocationConfiguration": {
    "S3SubPrefix": "prefixB*"
  },
  "GrantScope": "s3://amzn-s3-demo-bucket/prefix*",
  "Permission": "READ"
}

디렉터리 사용자나 그룹에 대한 접근 권한 요청 만들기

디렉터리 사용자나 그룹에 대한 접근 권한 요청을 만들려면 먼저 다음 명령 중 하나를 실행해 디렉터리 사용자나 그룹의 GUID를 가져와야 해요.

예제 – 디렉터리 사용자나 그룹의 GUID 가져오기

IAM Identity Center 콘솔을 통해 또는 AWS CLI·AWS SDK를 사용해 IAM Identity Center 사용자의 GUID를 찾을 수 있어요. 다음 명령은 지정된 IAM Identity Center 인스턴스의 사용자를 이름과 식별자와 함께 나열해요.

aws identitystore list-users --identity-store-id d-1a2b3c4d1234

이 명령은 지정된 IAM Identity Center 인스턴스의 그룹을 나열해요.

aws identitystore list-groups --identity-store-id d-1a2b3c4d1234

예제 – 디렉터리 사용자나 그룹에 대한 접근 권한 만들기

이 명령은 IAM 사용자나 역할에 대한 접근 권한을 만드는 것과 비슷해요. 다만 grantee type이 DIRECTORY_USER 또는 DIRECTORY_GROUP이고 grantee 식별자가 디렉터리 사용자나 그룹의 GUID라는 점이 달라요.

aws s3control create-access-grant \
--account-id 123456789012 \
--access-grants-location-id default \
--access-grants-location-configuration S3SubPrefix="amzn-s3-demo-bucket/rafael/*" \
--permission READWRITE \
--grantee GranteeType=DIRECTORY_USER,GranteeIdentifier=83d43802-00b1-7054-db02-f1d683aacba5 \

접근 권한 관리에 대한 Amazon S3 REST API 지원에 대한 자세한 내용은 Amazon Simple Storage Service API Reference의 다음 섹션을 참고하세요.

  • CreateAccessGrant
  • DeleteAccessGrant
  • GetAccessGrant
  • ListAccessGrants

이 섹션은 AWS SDK를 사용해 접근 권한을 만드는 예제를 제공해요.

Java

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

참고

하나의 객체에만 접근 권한을 부여하는 접근 권한을 만든다면 필수 매개 변수 .s3PrefixType(S3PrefixType.Object)를 포함하세요.

예제 – 접근 권한 요청 만들기

public void createAccessGrant() {
    CreateAccessGrantRequest createRequest = CreateAccessGrantRequest.builder()
        .accountId("111122223333")
        .accessGrantsLocationId("a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa")
        .permission("READ")
        .accessGrantsLocationConfiguration(AccessGrantsLocationConfiguration.builder().s3SubPrefix("prefixB*").build())
        .grantee(Grantee.builder().granteeType("IAM").granteeIdentifier("arn:aws:iam::111122223333:user/data-consumer-3").build())
        .build();
    CreateAccessGrantResponse createResponse = s3Control.createAccessGrant(createRequest);
    LOGGER.info("CreateAccessGrantResponse: " + createResponse);
}

예제 – 접근 권한 만들기 응답

CreateAccessGrantResponse(
    CreatedAt=2023-06-07T05:20:26.330Z,
    AccessGrantId=a1b2c3d4-5678-90ab-cdef-EXAMPLE33333,
    AccessGrantArn=arn:aws:s3:us-east-2:444455556666:access-grants/default/grant/a1b2c3d4-5678-90ab-cdef-EXAMPLE33333,
    Grantee=Grantee(
        GranteeType=IAM,
        GranteeIdentifier=arn:aws:iam::111122223333:user/data-consumer-3
    ),
    AccessGrantsLocationId=a1b2c3d4-5678-90ab-cdef-EXAMPLEaaaaa,
    AccessGrantsLocationConfiguration=AccessGrantsLocationConfiguration(
        S3SubPrefix=prefixB*
    ),
    GrantScope=s3://amzn-s3-demo-bucket/prefixB,
    Permission=READ
)

출처: 문서

본문

Subprefix (하위 접두사)

등록된 위치의 범위를 좁혀서 접근 범위를 하위 집합으로 제한하는 방법을 설명했어요. 기본 s3:// 위치에는 접근 권한을 만들 수 없으므로 반드시 범위를 좁혀야 한다는 점을 기억하세요.

더 알아보기 (Learn more)