

# S3 Access Grants를 통해 Amazon S3 데이터에 대한 액세스 요청
<a name="access-grants-credentials"></a>

S3 Access Grants를 사용하여 [액세스 권한을 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-grant.html)한 후 피부여자는 액세스 권한이 부여된 S3 데이터에 액세스하기 위해 자격 증명을 요청할 수 있습니다. 피부여자는 AWS Identity and Access Management(IAM) 위탁자, 회사 디렉터리 자격 증명 또는 승인된 애플리케이션일 수 있습니다.

애플리케이션 또는 AWS 서비스가 S3 Access Grants `GetDataAccess` API 작업을 사용하여 피부여자를 대신하여 S3 데이터에 대한 액세스를 S3 Access Grants에 요청하면, `GetDataAccess`는 먼저 이 자격 증명에 해당 데이터에 대한 액세스 권한을 부여했는지 확인합니다. 그러면 S3 Access Grants가 [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API 작업을 사용하여 임시 자격 증명 토큰을 가져와 요청자에게 벤딩합니다. 이 임시 자격 증명 토큰은 AWS Security Token Service(AWS STS) 토큰입니다.

`GetDataAccess` 요청에는 임시 자격 증명이 적용되는 S3 데이터의 범위를 지정하는 `target` 파라미터가 포함되어야 합니다. 이 `target` 범위는 권한 부여 범위 또는 해당 범위의 하위 집합과 같을 수 있지만, `target` 범위는 피부여자에게 제공된 권한 부여 범위 내에 있어야 합니다. 또한 요청은 임시 자격 증명의 권한 수준(`READ`, `WRITE` 또는 `READWRITE`)을 나타내는 `permission` 파라미터를 지정해야 합니다.

**권한**  
요청자는 자격 증명 요청에서 임시 토큰의 권한 수준을 지정할 수 있습니다. 요청자는 `privilege` 파라미터를 사용하여 권한 부여 범위 내에서 임시 자격 증명의 액세스 범위를 줄이거나 늘릴 수 있습니다. `privilege` 파라미터의 기본값은 `Default`이며, 이는 반환되는 자격 증명의 대상 범위가 원래 권한 부여 범위임을 의미합니다. `Minimal` 또한 `privilege`의 값이 될 수 있습니다. `target` 범위가 원래 권한 부여 범위보다 축소되면 `target` 범위가 권한 부여 범위 내에 있는 한 `target` 범위와 일치하도록 임시 자격 증명의 범위가 축소됩니다.

다음 테이블에는 두 권한 부여에 대한 `privilege` 파라미터의 효과가 자세히 나와 있습니다. 권한 부여의 범위는 `S3://{{amzn-s3-demo-bucket1}}/bob/*`이며, 여기에는 `{{amzn-s3-demo-bucket1}}` 버킷의 전체 `bob/` 접두사가 포함됩니다. 다른 권한 부여의 범위는 `S3://{{amzn-s3-demo-bucket1}}/bob/reports/*`이며, 여기에는 `{{amzn-s3-demo-bucket1}}` 버킷의 `bob/reports/` 접두사만 포함됩니다.


|  권한 부여 범위  |  요청된 범위  |  권한  |  반환된 범위  |  Effect  | 
| --- | --- | --- | --- | --- | 
| S3://{{amzn-s3-demo-bucket1}}/bob/\* | {{amzn-s3-demo-bucket1}}/bob/\* | Default  | {{amzn-s3-demo-bucket1}}/bob/\*  | 요청자는 `{{amzn-s3-demo-bucket1}}` 버킷에서 키 이름이 접두사 `bob/`으로 시작하는 모든 객체에 액세스할 수 있습니다. | 
| S3://{{amzn-s3-demo-bucket1}}/bob/\* | {{amzn-s3-demo-bucket1}}/bob/  | Minimal  | {{amzn-s3-demo-bucket1}}/bob/  | 접두사 이름 `bob/` 뒤에 와일드카드를 나타내는 \* 문자가 없으면 요청자는 `{{amzn-s3-demo-bucket1}}` 버킷에서 이름이 `bob/`인 객체에만 액세스할 수 있습니다. 이러한 객체가 있는 경우는 흔하지 않습니다. 요청자는 키 이름이 접두사 `bob/`으로 시작하는 객체를 비롯해 다른 객체에 액세스할 수 없습니다. | 
| S3://{{amzn-s3-demo-bucket1}}/bob/\* | {{amzn-s3-demo-bucket1}}/bob/images/\*  | Minimal  | {{amzn-s3-demo-bucket1}}/bob/images/\*  | 요청자는 `{{amzn-s3-demo-bucket1}}` 버킷에서 키 이름이 접두사 `bob/images/*`로 시작하는 모든 객체에 액세스할 수 있습니다. | 
| S3://{{amzn-s3-demo-bucket1}}/bob/reports/\* | {{amzn-s3-demo-bucket1}}/bob/reports/file.txt  | Default  | {{amzn-s3-demo-bucket1}}/bob/reports/\*  | 요청자는 `{{amzn-s3-demo-bucket1}}` 버킷에서 키 이름이 접두사 `bob/reports`로 시작하는 모든 객체에 액세스할 수 있습니다. 이는 일치하는 권한 부여의 범위에 해당합니다. | 
| S3://{{amzn-s3-demo-bucket1}}/bob/reports/\* | {{amzn-s3-demo-bucket1}}/bob/reports/file.txt  | Minimal  | {{amzn-s3-demo-bucket1}}/bob/reports/file.txt  | 요청자는 `{{amzn-s3-demo-bucket1}}` 버킷에서 키 이름이 `bob/reports/file.txt`인 객체에만 액세스할 수 있습니다. 다른 객체에는 액세스할 수 없습니다. | 

**디렉터리 자격 증명**  
`GetDataAccess`는 적절한 권한 부여와 일치할 때 요청에 관련된 모든 자격 증명을 고려합니다. 회사 디렉터리 자격 증명의 경우 `GetDataAccess`는 자격 증명 인식 세션에 사용되는 IAM 자격 증명의 권한 부여도 반환합니다. 자격 증명 인식 세션에 대한 자세한 내용은 *AWS Identity and Access Management 사용 설명서*의 [자격 증명 인식 콘솔 세션을 사용할 수 있는 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_sts-setcontext.html)를 참조하세요. `GetDataAccess`는 다음 표와 같이 가장 제한적인 권한 부여로 범위를 제한하는 자격 증명을 생성합니다.


|  IAM 자격 증명에 대한 권한 부여 범위 |  디렉터리 자격 증명에 대한 권한 부여 범위 |  요청된 범위  |  반환된 범위  |  권한  |  Effect  | 
| --- | --- | --- | --- | --- | --- | 
| S3://{{amzn-s3-demo-bucket1}}/bob/\* | {{amzn-s3-demo-bucket1}}/bob/images/\* | S3://{{amzn-s3-demo-bucket1}}/bob/images/image1.jpeg  | S3://{{amzn-s3-demo-bucket1}}/bob/images/\*  | Default | 요청자는 IAM 역할에 대한 권한 부여의 일부로 접두사 *bob/*로 시작하지만 디렉터리 자격 증명에 대한 권한 부여의 일부로 접두사 *bob/images/*로 제한된 키 이름을 가진 모든 객체에 액세스할 수 있습니다. IAM 역할과 디렉터리 자격 증명 모두 요청된 범위인 `bob/images/image1.jpeg`에 대한 액세스를 제공하지만 디렉터리 자격 증명에는 더 제한적인 권한이 있습니다. 따라서 반환된 범위는 디렉터리 자격 증명에 대한 보다 제한적인 권한 부여로 제한됩니다. | 
| S3://{{amzn-s3-demo-bucket1}}/bob/\* | {{amzn-s3-demo-bucket1}}/bob/images/\* | S3://{{amzn-s3-demo-bucket1}}/bob/images/image1.jpeg  | S3://{{amzn-s3-demo-bucket1}}/bob/images/image1.jpeg  | Minimal | 권한은 `Minimal`로 설정되므로 자격 증명이 더 큰 범위에 액세스할 수 있더라도 요청된 범위만 `bob/images/image1.jpeg` 반환됩니다. | 
| S3://{{amzn-s3-demo-bucket1}}/bob/images/\* | {{amzn-s3-demo-bucket1}}/bob/\* | S3://{{amzn-s3-demo-bucket1}}/bob/images/image1.jpeg  | S3://{{amzn-s3-demo-bucket1}}/bob/images/\*  | Default | 요청자는 디렉터리 자격 증명에 대한 권한 부여의 일부로 접두사 *bob/*로 시작하지만 IAM 역할에 대한 권한 부여의 일부로 접두사 *bob/images/*로 제한된 키 이름을 가진 모든 객체에 액세스할 수 있습니다. IAM 역할과 디렉터리 자격 증명 모두 요청된 범위인 `bob/images/image1.jpeg`에 대한 액세스를 제공하지만 IAM 역할에는 더 제한적인 권한이 있습니다. 따라서 반환된 범위는 IAM 역할에 대한 보다 제한적인 권한 부여로 제한됩니다. | 
| S3://{{amzn-s3-demo-bucket1}}/bob/images/\* | {{amzn-s3-demo-bucket1}}/bob/\* | S3://{{amzn-s3-demo-bucket1}}/bob/images/image1.jpeg  | S3://{{amzn-s3-demo-bucket1}}/bob/images/image1.jpeg  | Minimal | 권한은 `Minimal`로 설정되므로 자격 증명이 더 큰 범위에 액세스할 수 있더라도 요청된 범위만 `bob/images/image1.jpeg` 반환됩니다. | 

**지속 시간**  
`durationSeconds` 파라미터는 임시 자격 증명의 기간을 초 단위로 설정합니다. 기본값은 `3600`초(1시간)이지만 요청자(피부여자)는 `900`초(15분)에서 최대 `43200`초(12시간)까지 범위를 지정할 수 있습니다. 피부여자가 이 최댓값보다 큰 값을 요청하면 요청이 실패합니다.

**참고**  
임시 토큰을 요청할 때 위치가 객체인 경우 요청의 `targetType` 파라미터 값을 `Object`로 설정하세요. 이 파라미터는 위치가 객체이고 권한 수준이 `Minimal`인 경우에만 필요합니다. 위치가 버킷 또는 접두사인 경우 이 파라미터를 지정할 필요가 없습니다.

**예제**  
AWS Command Line Interface(AWS CLI), Amazon S3 REST API, AWS SDK를 사용하여 임시 자격 증명을 요청할 수 있습니다. 다음 예제를 참조하십시오.

자세한 내용은 *Amazon Simple Storage Service API 참조*의 [GetDataAccess](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetDataAccess.html)를 참조하세요.

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

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

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

**Example 임시 자격 증명 요청**  
요청:  

```
aws s3control get-data-access \
--account-id {{111122223333}} \
--target {{s3://{{amzn-s3-demo-bucket}}/prefixA*}} \{{}}
--permission {{READ}} \
--privilege Default \
--region {{us-east-2}}
```
응답:  

```
{
"Credentials": {
"AccessKeyId": "{{Example-key-id}}",
"SecretAccessKey": "{{Example-access-key}}",
"SessionToken": "{{Example-session-token}}",
"Expiration": "{{2023-06-14T18:56:45+00:00}}"},
"MatchedGrantTarget": "{{s3://{{amzn-s3-demo-bucket}}/prefixA*}}*",
"Grantee": {
    "GranteeType": "IAM",
    "GranteeIdentifier": "arn:aws:iam::{{111122223333}}:role/{{role-name}}"
 }
}
```

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

S3 Access Grants에서 임시 자격 증명 요청을 위한 Amazon S3 REST API 지원에 대한 자세한 내용은 **Amazon Simple Storage Service API 참조의 [GetDataAccess](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetDataAccess.html)를 참조하세요.

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

이 섹션에서는 피부여자가 AWS SDK를 사용하여 S3 Access Grants로부터 임시 자격 증명을 요청하는 방법의 예를 제공합니다.

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

다음 예시 코드는 피부여자가 S3 데이터에 액세스하는 데 사용하는 임시 자격 증명을 반환합니다. 이 예시 코드를 사용하려면 `{{user input placeholders}}`를 실제 정보로 대체하세요.

**Example 임시 자격 증명 가져오기**  
요청:  

```
public void getDataAccess() {
GetDataAccessRequest getDataAccessRequest = GetDataAccessRequest.builder()
.accountId("{{111122223333}}")
.permission(Permission.{{READ}})
.privilege(Privilege.{{MINIMAL}})
.target("{{s3://{{amzn-s3-demo-bucket}}/prefixA*}}")
.build();
GetDataAccessResponse getDataAccessResponse = s3Control.getDataAccess(getDataAccessRequest);
LOGGER.info("GetDataAccessResponse: " + getDataAccessResponse);
}
```
응답:  

```
GetDataAccessResponse(
Credentials=Credentials(
AccessKeyId="{{Example-access-key-id}}",
SecretAccessKey="{{Example-secret-access-key}}",
SessionToken="{{Example-session-token}}",
Expiration={{2023-06-07T06:55:24Z}}
))
```

------