

# 권한 부여 생성
<a name="access-grants-grant-create"></a>

S3 Access Grants 인스턴스 내 개별 액세스 *권한 부여*를 통해 특정 자격 증명(AWS Identity and Access Management(IAM) 보안 주체나 기업 디렉터리의 사용자 또는 그룹)이 S3 Access Grants 인스턴스에 등록된 위치 내에서 액세스 권한을 부여받을 수 있습니다. 위치는 버킷 또는 접두사를 IAM 역할에 매핑합니다. S3 Access Grants는 이 IAM 역할을 맡아 피부여자에게 임시 자격 증명을 제공합니다.

S3 Access Grants 인스턴스에 [위치를 하나 이상 등록](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-location.html)한 후 액세스 권한 부여를 생성할 수 있습니다.

피부여자는 IAM 사용자나 역할 또는 디렉터리 사용자나 그룹일 수 있습니다. 디렉터리 사용자는 [S3 Access Grants 인스턴스와 연결한](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-instance-idc.html) 기업 디렉터리 또는 외부 자격 증명 소스의 사용자입니다. 자세한 내용은 [S3 Access Grants 및 기업 디렉터리 ID](access-grants-directory-ids.md) 섹션을 참조하세요. IAM Identity Center에서 특정 디렉터리 사용자 또는 그룹에 대한 권한 부여를 생성하려면 IAM Identity Center에서 해당 사용자를 식별하는 데 사용하는 GUID를 찾으세요(예: `a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`). IAM Identity Center를 사용하여 사용자 정보를 보는 방법에 대한 자세한 내용은 **AWS IAM Identity Center 사용 설명서의 [사용자 및 그룹 할당 보기](https://docs.aws.amazon.com/singlesignon/latest/userguide/get-started-view-assignments.html)를 참조하세요.

버킷, 접두사 또는 객체에 액세스 권한을 부여할 수 있습니다. Amazon S3의 접두사는 객체 키 이름의 앞에 있는 문자열로, 버킷 내의 객체를 구성하는 데 사용됩니다. 이는 허용되는 모든 문자열(예: `engineering/` 접두사로 시작하는 버킷의 객체 키 이름)이 될 수 있습니다.

## 하위 접두사
<a name="subprefix"></a>

등록된 위치에 대한 액세스 권한을 부여할 때 `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 콘솔에서 권한 부여를 생성할 때 위치를 선택한 후 **권한 부여 범위**에서 **권한 부여 범위는 객체입니다** 확인란을 선택합니다.
버킷이 아직 존재하지 않는 경우 버킷에 대한 권한 부여를 생성할 수 없습니다. 하지만 아직 존재하지 않는 접두사에 대한 권한 부여를 생성할 수는 있습니다.
S3 Access Grants 인스턴스에서 생성할 수 있는 최대 권한 부여 수는 [S3 Access Grants 한도](access-grants-limitations.md) 섹션을 참조하세요.

Amazon S3 콘솔, AWS CLI, Amazon S3 REST API, AWS SDK를 사용하여 액세스 권한 부여를 생성할 수 있습니다.

## S3 콘솔 사용
<a name="access-grants-grant-create-console"></a>

**액세스 권한 부여 생성**

1. AWS Management Console에 로그인한 후 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)에서 S3 콘솔을 엽니다.

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

1. **S3 Access Grants** 페이지에서 사용하려는 S3 Access Grants 인스턴스가 포함된 리전을 선택합니다.

   S3 Access Grants 인스턴스를 처음 사용하는 경우 [2단계 - 위치 등록](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-location.html)을 완료하고 **Access Grants 인스턴스 설정** 마법사의 **3단계**로 이동했는지 확인하세요. 이미 S3 Access Grants 인스턴스가 있는 경우 **세부 정보 보기**를 선택한 다음 **권한 부여** 탭에서 **권한 부여 생성**을 선택합니다.

   1. **권한 부여 범위** 섹션에서 등록된 위치를 선택하거나 입력합니다.

      기본 `s3://` 위치를 선택한 경우 **하위 접두사** 상자를 사용하여 액세스 권한 부여 범위를 좁힐 수 있습니다. 자세한 내용은 [하위 접두사](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-grant.html#subprefix)를 참조하세요. 객체에만 액세스 권한을 부여하는 경우 **권한 부여 범위가 객체임**을 선택합니다.

   1. **권한 및 액세스**에서 **권한** 수준(**읽기**, **쓰기** 또는 둘 다)을 선택합니다.

      그런 다음 **피부여자 유형**을 선택합니다. 기업 디렉터리를 IAM Identity Center에 추가하고 이 IAM Identity Center 인스턴스를 S3 Access Grants 인스턴스와 연결한 경우, **IAM Identity Center의 디렉터리 ID**를 선택할 수 있습니다. 이 옵션을 선택하는 경우 IAM Identity Center에서 사용자 또는 그룹의 ID를 가져와 이 섹션에 입력하세요.

      **피부여자 유형**이 IAM 사용자 또는 역할인 경우 **IAM 보안 주체**를 선택합니다. **IAM 보안 주체 유형**에서 **사용자** 또는 **역할**을 선택합니다. 그런 다음, **IAM 보안 주체 사용자** 아래에서 자격 증명의 ID를 목록에서 선택하거나 입력합니다.

   1. S3 Access Grants 권한 부여를 생성하려면 **다음** 또는 **권한 부여 생성**을 선택합니다.

1. **다음** 또는 **권한 부여 생성**이 비활성화된 경우:

**권한 부여를 생성할 수 없음**
   + S3 Access Grants 인스턴스에 먼저 [위치를 등록](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-location.html)해야 할 수 있습니다.
   + 액세스 권한 부여를 생성하는 데 필요한 `s3:CreateAccessGrant` 권한이 없을 수도 있습니다. 계정 관리자에게 문의하세요.

## AWS CLI 사용
<a name="access-grants-grant-create-cli"></a>

AWS CLI를 설치하려면 *AWS Command Line Interface 사용 설명서*의 [AWS CLI 설치](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)를 참조하세요.

다음 예는 IAM 보안 주체에 대한 액세스 권한 부여 요청을 생성하는 방법과 기업 디렉터리 사용자 또는 그룹에 대한 액세스 권한 부여 요청을 생성하는 방법을 보여줍니다.

다음 예시 명령을 사용하려면 `{{user input placeholders}}`를 실제 정보로 대체하세요.

**참고**  
하나의 객체에만 액세스 권한을 부여하는 액세스 권한 부여를 생성하는 경우 필수 파라미터인 `--s3-prefix-type Object`를 포함하세요.

**Example 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}}
```

**Example 액세스 권한 부여 응답 생성**  

```
{"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를 가져와야 합니다.

**Example 디렉터리 사용자 또는 그룹에 대한 GUID 가져오기**  
IAM Identity Center 사용자의 GUID는 IAM Identity Center 콘솔이나 AWS CLI 또는 AWS SDK를 사용하여 찾을 수 있습니다. 다음 명령은 지정된 IAM Identity Center 인스턴스의 사용자를 이름 및 식별자와 함께 나열합니다.  

```
aws identitystore list-users --identity-store-id {{d-1a2b3c4d1234}} 
```
이 명령은 지정된 IAM Identity Center 인스턴스의 그룹을 나열합니다.  

```
aws identitystore list-groups --identity-store-id {{d-1a2b3c4d1234}}
```

**Example 디렉터리 사용자 또는 그룹에 대한 액세스 권한 부여 생성**  
이 명령은 IAM 사용자 또는 역할에 대한 권한 부여를 생성하는 것과 비슷합니다. 단, 피부여자 유형은 `DIRECTORY_USER` 또는 `DIRECTORY_GROUP`이고 피부여자 식별자는 디렉터리 사용자 또는 그룹의 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}} \
```

## REST API 사용
<a name="access-grants-grant-create-rest-api"></a>

액세스 권한 부여 관리를 위한 Amazon S3 REST API 지원에 대한 자세한 내용은 **Amazon Simple Storage Service API 참조의 다음 섹션을 참조하세요.
+  [CreateAccessGrant](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrant.html) 
+  [DeleteAccessGrant](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrant.html) 
+  [GetAccessGrant](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrant.html) 
+  [ListAccessGrants](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessGrants.html)

## AWS SDK 사용
<a name="access-grants-grant-create-using-sdk"></a>

이 섹션에서는 AWS SDK를 사용하여 액세스 권한 부여를 생성하는 방법의 예시를 보여줍니다.

------
#### [ Java ]

다음 예시를 사용하려면 `{{user input placeholders}}`를 실제 정보로 대체하세요.

**참고**  
하나의 객체에만 액세스 권한을 부여하는 액세스 권한 부여를 생성하는 경우 필수 파라미터인 `.s3PrefixType(S3PrefixType.Object)`를 포함하세요.

**Example 액세스 권한 부여 요청 생성**  

```
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);
}
```

**Example 액세스 권한 부여 응답 생성**  

```
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
)
```

------