

# 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` はまず、この ID にそのデータへのアクセス権が付与されたことを確認します。次に 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` であり、返される認証情報のターゲット範囲は元の権限範囲です。`privilege` でこれ以外に指定できる値は、`Minimal` です。`target` 範囲が元の権限範囲から縮小される場合、`target` 範囲が権限範囲内にある限り、一時的な認証情報は `target` 範囲と一致するように範囲が再定義されます。

2 つの権限に対する `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/` プレフィックスのみが含まれます。


|  権限範囲  |  リクエスト範囲  |  特権  |  返される範囲  |  効果  | 
| --- | --- | --- | --- | --- | 
| 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` は、適切な許可付与を照合するときに、リクエストに関連するすべての ID を考慮します。企業ディレクトリアイデンティティの場合、`GetDataAccess` は、ID 対応セッションに使用される IAM アイデンティティの許可付与も返します。ID 対応セッションの詳細については、「*AWS Identity and Access Management ユーザーガイド*」の「[ID 対応コンソールセッションを使用するアクセス許可の付与](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_sts-setcontext.html)」を参照してください。`GetDataAccess` は、次の表に示すように、最も制限の厳しい許可付与にスコープを絞り込む認証情報を生成します。


|  IAM アイデンティティの許可付与スコープ |  ディレクトリアイデンティティの許可付与スコープ |  リクエスト範囲  |  返される範囲  |  特権  |  効果  | 
| --- | --- | --- | --- | --- | --- | 
| 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` に設定されているため、ID がより大きなスコープにアクセスできる場合でも、リクエストされたスコープ `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` に設定されているため、ID がより大きなスコープにアクセスできる場合でも、リクエストされたスコープ `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>

Amazon S3 REST API での S3 Access Grants からの一時認証情報のリクエストのサポートの詳細については、「**Amazon Simple Storage Service API リファレンス」の「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetDataAccess.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetDataAccess.html)」を参照してください。

## AWS SDK の使用
<a name="access-grants-credentials-using-sdk"></a>

このセクションでは、AWS SDK を使用して被付与者が一時認証情報をリクエストする方法の例を説明します。

------
#### [ 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}}
))
```

------