

# 権限を作成する
<a name="access-grants-grant-create"></a>

S3 Access Grants インスタンス内の個々のアクセス**「権限」は、AWS Identity and Access Management (IAM) プリンシパルや、社内ディレクトリのユーザーまたはグループといった特定のアイデンティティに、S3 Access Grants インスタンスに登録されたロケーション内でのアクセスを許可するものです。ロケーションによって、バケットまたはプレフィックスが IAM ロールにマッピングされます。S3 Access Grants は、この IAM ロールを引き受けて被付与者に一時的な認証情報を提供します。

Amazon S3 Access Grants インスタンスに[少なくとも 1 つのロケーションを登録](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 と社内ディレクトリのアイデンティティ](access-grants-directory-ids.md)」を参照してください。IAM アイデンティティセンターから特定のディレクトリユーザーまたはグループに対する権限を作成するには、IAM アイデンティティセンターでそのユーザーを識別するために使用する GUID (例: `a1b2c3d4-5678-90ab-cdef-EXAMPLE11111`) を検索します。IAM アイデンティティセンターを使用してユーザー情報を表示する方法については、「AWS IAM アイデンティティセンターユーザーガイド」の「[ユーザーとグループの割り当てを表示する](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 バケット、プレフィックス、またはオブジェクトに適切にマップされていることを確認します。

**注記**  
1 つのオブジェクトにのみアクセスを許可するアクセス権限を作成する必要がある場合は、権限のタイプをオブジェクト用に指定する必要があります。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 マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. 左側のナビゲーションペインで、**[Access Grants]** を選択します。

1. **[S3 Access Grants]** ページで、取り組む S3 Access Grants インスタンスが含まれるリージョンを選択します。

   S3 Access Grants インスタンスを初めて使用する場合は、「[Step 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)」を参照してください。単一のオブジェクトのみへのアクセスを付与するには、**[Grant scope is an object]** を選択します。

   1. **[許可とアクセス]** で、**[アクセス許可]** レベルに **[読み取り]**、**[書き込み]**、または両方を選択します。

      次に、**[被付与者タイプを選択]** をクリックします。社内ディレクトリを IAM アイデンティティセンターに追加して、この IAM アイデンティティセンターインスタンスを S3 Access Grants インスタンスに関連付けた場合は、**[IAM アイデンティティセンターからのディレクトリ ID]** を選択できます。このオプションを選択した場合は、IAM アイデンティティセンターからユーザーまたはグループのアイデンティティを取得し、このセクションに入力します。

      **[被付与者タイプ]** が IAM ユーザーまたはロールの場合は、**[IAM プリンシパル]** を選択します。**[IAM プリンシパルタイプ]** で **[ユーザー]** または **[ロール]** を選択します 次に、**[IAM プリンシパルユーザー]** で、リストから選択するか、アイデンティティを入力します。

   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 アイデンティティセンターユーザーの GUID は、IAM アイデンティティセンターコンソール、AWS CLI、または AWS SDK を使用して検索できます。次のコマンドは、指定した IAM アイデンティティセンターインスタンス内のユーザーを名前とアイデンティティとともに一覧表示します。  

```
aws identitystore list-users --identity-store-id d-1a2b3c4d1234 
```
このコマンドは、指定した IAM アイデンティティセンターインスタンスのグループを一覧表示します。  

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

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

------