

# ロケーションを登録する
<a name="access-grants-location-register"></a>

アカウントの AWS リージョンで [Amazon S3 Access Grants インスタンスを作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-instance-create.html) したら、そのインスタンスに S3 ロケーションを登録できます。S3 Access Grants のロケーションは、デフォルトの S3 ロケーション (`s3://`）、バケット、またはプレフィックスを AWS Identity and Access Management (IAM) ロールにマッピングします。S3 Access Grants は、この IAM ロールを引き受けて、その特定の場所にアクセスする被付与者に一時的な認証情報を提供します。アクセス権限を作成する前に、まず S3 Access Grants インスタンスに少なくとも 1 つのロケーションを登録する必要があります。

**推奨されるユースケース**  
デフォルトのロケーション (`s3://`) を登録し、IAM ロールにマッピングすることをお勧めします。デフォルトの S3 パスのロケーション (`s3://`) を使用すると、アカウントの AWS リージョン内のすべての S3 バケットへのアクセスがカバーされます。アクセス権限を作成するときに、権限の範囲をデフォルトのロケーション内のバケット、プレフィックス、またはオブジェクトに絞り込むことができます。

**アクセス管理が複雑なユースケース**  
より複雑なアクセス管理のユースケースでは、デフォルトのロケーション以外の登録が必要になる場合があります。例として、次のようなユースケースが挙げられます。
+ {{amzn-s3-demo-bucket}} が S3 Access Grants インスタンスの登録済みロケーションで、IAM ロールがマッピングされているが、この IAM ロールがバケット内の特定のプレフィックスへのアクセスを拒否されるとします。この場合、IAM ロールがアクセスできないプレフィックスを別のロケーションとして登録し、そのロケーションを、必要なアクセス権を持つ別の IAM ロールにマッピングできます。
+ 仮想プライベートクラウド (VPC) エンドポイント内のユーザーのみにアクセスを制限する権限を作成するとします。この場合、IAM ロールで VPC エンドポイントのみにアクセスを制限するバケットのロケーションを登録できます。後で、被付与者が S3 Access Grants に認証情報を要求すると、S3 Access Grants はロケーションの IAM ロールを引き受けて一時的な認証情報を提供します。この認証情報は、呼び出し元が VPC エンドポイント内のユーザーでない限り、特定のバケットへのアクセスを拒否します。こうした拒否のアクセス許可は、権限で指定された通常の READ、WRITE、または READWRITE のアクセス許可に加えて適用されます。

ロケーションを登録するときには、S3 Access Grants が一時的な認証情報を提供したり、特定の権限のアクセス許可の範囲を設定したりするために引き受ける IAM ロールも指定する必要があります。

ユースケースで S3 Access Grants インスタンスに複数のロケーションを登録する必要がある場合は、次のいずれかを登録できます。


| S3 URI | IAM ロール | 説明 | 
| --- | --- | --- | 
| s3:// | {{Default-IAM-role}} | デフォルトのロケーション `s3://` には、AWS リージョン 内のすべてのバケットが含まれます。 | 
| s3://{{{{amzn-s3-demo-bucket1}}}}/ | {{IAM-role-For-bucket}} | このロケーションには、指定したバケット内のすべてのオブジェクトが含まれます。 | 
| s3://{{{{amzn-s3-demo-bucket1}}}}/{{prefix-name}} | {{IAM-role-For-prefix}} | このロケーションには、指定されたプレフィックスで始まるオブジェクトキー名を持つ、バケット内のすべてのオブジェクトが含まれます。 | 

特定のバケットまたはプレフィックスを登録する前に、次の手順を実行する必要があります。
+ アクセスを許可するデータを含むバケットを 1 つまたは複数作成します。これらのバケットは、S3 Access Grants インスタンスと同じ AWS リージョン にある必要があります。詳細については、「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。

  プレフィックスの追加はオプションの手順です。プレフィックスは、オブジェクトキー名の先頭にある文字列で、これらを使用して、バケット内のオブジェクトを整理したり、アクセスを管理したりできます。バケットにプレフィックスを追加するには、「[オブジェクトキー名の作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html)」を参照してください。
+ AWS リージョン内の S3 データにアクセスするためのアクセス権限を持つ IAM ロールを作成します。詳細については、「AWS IAM アイデンティティセンターユーザーガイド」の「[IAM ロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)」を参照してください。**
+  IAM ロールの信頼ポリシーで、作成した IAM ロールに対して、S3 Access Grants サービス (`access-grants.s3.amazonaws.com`) のプリンシパルアクセス権を付与します。これを実行するために、次のステートメントを含む JSON ファイルを作成できます。アカウントに信頼ポリシーを追加するには、「[カスタム信頼ポリシーを使用したロールの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html)」を参照してください。

  *TestRolePolicy.json*

------
#### [ JSON ]

****  

  ```
  {
    "Version":"2012-10-17",		 	 	 
      "Statement": [
      {
        "Sid": "TestRolePolicy",
        "Effect": "Allow",
        "Principal": {
          "Service": "access-grants.s3.amazonaws.com"
        },
        "Action": [
          "sts:AssumeRole", 
          "sts:SetSourceIdentity"
        ],
        "Condition": {
          "StringEquals": {
            "aws:SourceAccount": "111122223333",
            "aws:SourceArn": "arn:aws:s3::111122223333:access-grants/default"
          }
        }
      }
    ]
  }
  ```

------

  または、IAM Identity Center のユースケースでは、2 番目のステートメントを含む次のポリシーを使用します。
+ 作成した IAM ロールに Amazon S3 アクセス許可をアタッチする IAM ポリシーを作成します。次の `iam-policy.json` ファイルを例にｓｈじて、`{{user input placeholders}}` を実際の情報と置き換えます。
**注記**  
次の例では、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化を使用してデータを暗号化する場合に、ポリシーに IAM ロールに必要な AWS KMS アクセス許可を含めています。この機能を使用しない場合は、IAM ポリシーからこのようなアクセス許可を削除できます。
IAM ロールが S3 データにアクセスするように制限できるのは、S3 Access Grants が認証情報を提供する場合に限られます。この例では、特定の S3 Access Grants インスタンスに `Condition` ステートメントを追加する方法を説明します。この `Condition` を使用するには、`Condition` ステートメント内の S3 Access Grants インスタンス ARN を、`arn:aws:s3:{{region}}:{{accountId}}:access-grants/default` の形式の S3 Access Grants インスタンス ARN に置き換えます。

  *iam-policy.json*

  ```
  {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
           "Sid": "ObjectLevelReadPermissions",
           "Effect":"Allow",
           "Action":[
              "s3:GetObject",
              "s3:GetObjectVersion",
              "s3:GetObjectAcl",
              "s3:GetObjectVersionAcl",
              "s3:ListMultipartUploadParts"
           ],
           "Resource":[ 
              "arn:aws:s3:::*"  
           ],
           "Condition":{
              "StringEquals": { "aws:ResourceAccount": "{{accountId}}" },
              "ArnEquals": {
                  "s3:AccessGrantsInstanceArn": ["arn:aws:s3:{{region}}:{{accountId}}:access-grants/default"]
              }
          } 
        },
        {
           "Sid": "ObjectLevelWritePermissions",
           "Effect":"Allow",
           "Action":[
              "s3:PutObject",
              "s3:PutObjectAcl",
              "s3:PutObjectVersionAcl",
              "s3:DeleteObject",
              "s3:DeleteObjectVersion",
              "s3:AbortMultipartUpload"
           ],
           "Resource":[
              "arn:aws:s3:::*"  
           ],
           "Condition":{
              "StringEquals": { "aws:ResourceAccount": "{{accountId}}" },
              "ArnEquals": {
                  "s3:AccessGrantsInstanceArn": ["arn:aws:s3:{{AWS リージョン}}:{{accountId}}:access-grants/default"]
              }
           } 
        },
        {
           "Sid": "BucketLevelReadPermissions",
           "Effect":"Allow",
           "Action":[
              "s3:ListBucket"
           ],
           "Resource":[
              "arn:aws:s3:::*"
           ],
           "Condition":{
              "StringEquals": { "aws:ResourceAccount": "{{accountId}}" },
              "ArnEquals": {
                  "s3:AccessGrantsInstanceArn": ["arn:aws:s3:{{AWS リージョン}}:{{accountId}}:access-grants/default"]
              }
           }     
        },
  	  //Optionally add the following section if you use SSE-KMS encryption
        {
           "Sid": "KMSPermissions",
           "Effect":"Allow",
           "Action":[
              "kms:Decrypt",
              "kms:GenerateDataKey"
           ],
           "Resource":[
              "*"
           ]
        }
     ]
  }
  ```

Amazon S3 コンソール、AWS Command Line Interface、(AWS CLI)、AWS SDK、または Amazon S3 REST API を使用して S3 Access Grants インスタンスにロケーションを登録できます。

**注記**  
 S3 Access Grants インスタンスに最初のロケーションを登録しても、インスタンスに個別のアクセス権限はありません。アクセス権限を作成するには、「[権限を作成する](access-grants-grant-create.md)」を参照してください。

## S3 コンソールの使用
<a name="access-grants-location-register-console"></a>

S3 Access Grants を使用して S3 データへのアクセスを許可するには、少なくとも 1 つのロケーションを登録しておく必要があります。

**S3 Access Grants インスタンスでロケーションを登録するには**

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 1 - S3 Access Grants インスタンスを作成する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants-instance-create.html)」を実行し、**[Access Grants インスタンスをセットアップ]** ウィザードの **[ステップ 2]** に進んでいる必要があります。S3 Access Grants インスタンスが既にある場合は、**[詳細の表示]** を選択して、**[ロケーション]** タブで、**[ロケーションを登録]** をクリックします。

   1. **[ロケーション範囲]** では、**[Browse S3]** をクリックするか、登録先のロケーションへの S3 URI パスを入力します。S3 URI の形式については、[ロケーション形式](#location-types) 表を参照してください。URI の入力後、**[表示]** をクリックして、ロケーションを参照します。

   1. **[IAM ロール]** で、次のいずれかを選択します。
      + **既存の IAM ロールから選択**

        ドロップダウンリストから IAM ロールを選択します。ロールを選択したら、**[表示]** を選択して、登録するロケーションを管理するのに必要なアクセス許可がこのロールにあることを確認します。具体的には、このロールが S3 Access Grants にアクセス許可 `sts:AssumeRole` と `sts:SetSourceIdentity` を付与していることを確認します。
      + **IAM ロールの ARN の入力**

        [[IAM コンソール]](https://console.aws.amazon.com/iam/) に入ります。IAM ロールの Amazon リソースネーム (ARN) をコピーして、このボックスに貼り付けます。

   1. 終了するには、**[次へ]** または **[ロケーションを登録]** を選択します。

1. トラブルシューティング:

**ロケーションを登録できない**
   + そのロケーションが既に登録されている可能性があります。

     ロケーションを登録する `s3:CreateAccessGrantsLocation` アクセス許可がない可能性があります。アカウント管理者に連絡してください。

## の使用AWS CLI
<a name="access-grants-location-register-cli"></a>

AWS CLI をインストールするには、**「AWS Command Line Interface ユーザーガイド」の「[AWS CLI をインストールする](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)」を参照してください。

S3 Access Grants インスタンスには`s3://`、デフォルトの場所、またはカスタムロケーションを登録できます。その場所へのプリンシパルアクセス権を持つ IAM ロールを作成し、次に S3 Access Grants にこのロールを引き受ける権限を付与する必要があります。

次のコマンド例を使用する際は、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

**Example リソースポリシーを作成する**  
S3 Access Grants が IAM ロールを引き受けることを許可するポリシーを作成します。これを実行するために、次のステートメントを含む JSON ファイルを作成できます。リソースポリシーをアカウントに追加するには、「[最初のカスタマー管理ポリシーの作成とアタッチ](https://docs.aws.amazon.com//IAM/latest/UserGuide/tutorial_managed-policies.html)」を参照してください。  
*TestRolePolicy.json*    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Stmt1234567891011",
      "Action": ["sts:AssumeRole", "sts:SetSourceIdentity"],
      "Effect": "Allow",
      "Principal": {"Service": "access-grants.s3.amazonaws.com"}
    }
  ]
}
```

**Example ロールを作成する**  
次の IAM コマンドを実行して、ロールを作成します。  

```
aws iam create-role --role-name {{accessGrantsTestRole}} \
 --region {{us-east-2}} \
 --assume-role-policy-document file://{{TestRolePolicy.json}}
```
`create-role` コマンドを実行すると、次のとおりポリシーが返されます。  

```
{
    "Role": {
        "Path": "/",
        "RoleName": "accessGrantsTestRole",
        "RoleId": "AROASRDGX4WM4GH55GIDA",
        "Arn": "arn:aws:iam::{{111122223333}}:role/accessGrantsTestRole",
        "CreateDate": "2023-05-31T18:11:06+00:00",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
                {
                    "Sid": "Stmt1685556427189",
                    "Action": [
                        "sts:AssumeRole",
                        "sts:SetSourceIdentity"
                    ],
                    "Effect": "Allow",
                    "Principal": {
                        "Service":"access-grants.s3.amazonaws.com"
                    }
                }
            ]
        }
    }
}
```

**Example**  
Amazon S3 バケットへのアクセス許可を持つ IAM ポリシーを作成します。次の `iam-policy.json` ファイルを例にｓｈじて、`{{user input placeholders}}` を実際の情報と置き換えます。  
AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化を使用してデータを暗号化する場合、次の例ではポリシーに IAM ロールに必要な AWS KMS アクセス許可を追加します。この機能を使用しない場合は、IAM ポリシーからこのようなアクセス許可を削除できます。  
認証情報が S3 Access Grants によって提供される場合、IAM ロールが S3 内のデータへのアクセスにのみ使用できるようにするために、この例では、S3 Access Grants インスタンス (`s3:AccessGrantsInstance: {{InstanceArn}}`) を指定する `Condition` ステートメントを IAM ポリシーに追加する方法を示します。次のコマンド例を使用する際は、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。
*iam-policy.json*    
****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
         "Sid": "ObjectLevelReadPermissions",
         "Effect": "Allow",
         "Action": [
            "s3:GetObject",
            "s3:GetObjectVersion",
            "s3:GetObjectAcl",
            "s3:GetObjectVersionAcl",
            "s3:ListMultipartUploadParts"
         ],
         "Resource": [ 
            "arn:aws:s3:::*"  
         ],
         "Condition": {
            "StringEquals": { "aws:ResourceAccount": "{{111122223333}}" },
            "ArnEquals": {
                "s3:AccessGrantsInstanceArn": ["arn:aws:s3:us-east-1::access-grants/default"]
            }
        } 
      },
      {
         "Sid": "ObjectLevelWritePermissions",
         "Effect": "Allow",
         "Action": [
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:PutObjectVersionAcl",
            "s3:DeleteObject",
            "s3:DeleteObjectVersion",
            "s3:AbortMultipartUpload"
         ],
         "Resource": [
            "arn:aws:s3:::*"  
         ],
         "Condition": {
            "StringEquals": { "aws:ResourceAccount": "{{111122223333}}" },
            "ArnEquals": {
                "s3:AccessGrantsInstanceArn": ["arn:aws:s3:us-east-1::access-grants/default"]
            }
         } 
      },
      {
         "Sid": "BucketLevelReadPermissions",
         "Effect": "Allow",
         "Action": [
            "s3:ListBucket"
         ],
         "Resource": [
            "arn:aws:s3:::*"
         ],
         "Condition": {
            "StringEquals": { "aws:ResourceAccount": "{{111122223333}}" },
            "ArnEquals": {
                "s3:AccessGrantsInstanceArn": ["arn:aws:s3:us-east-1::access-grants/default"]
            }
         }     
      },
      {
         "Sid": "KMSPermissions",
         "Effect": "Allow",
         "Action": [
            "kms:Decrypt",
            "kms:GenerateDataKey"
         ],
         "Resource": [
            "*"
         ],
         "Condition": {
            "StringEquals": {
               "kms:ViaService": "s3.us-east-1.amazonaws.com"
            }
         }
      }
   ]
}
```

**Example**  
次のコマンドを実行します。  

```
aws iam put-role-policy \
--role-name accessGrantsTestRole \
--policy-name accessGrantsTestRole \
--policy-document file://iam-policy.json
```

**Example デフォルトロケーションを登録します。**  

```
aws s3control create-access-grants-location \
 --account-id {{111122223333}} \
 --location-scope {{s3://}} \
 --iam-role-arn arn:aws:iam::{{111122223333}}:role/{{accessGrantsTestRole}}
```
レスポンス:  

```
{"CreatedAt": "2023-05-31T18:23:48.107000+00:00",
    "AccessGrantsLocationId": "default",
    "AccessGrantsLocationArn": "arn:aws:s3:{{us-east-2}}:{{111122223333}}:access-grants/default/location/default",
    "LocationScope": "s3://" 
    "IAMRoleArn": "arn:aws:iam::{{111122223333}}:role/accessGrantsTestRole"
}
```

**Example カスタムロケーションを登録する**  

```
aws s3control create-access-grants-location \
 --account-id {{111122223333}} \
 --location-scope {{s3://DOC-BUCKET-EXAMPLE/}} \
 --iam-role-arn arn:aws:iam::{{123456789012}}:role/{{accessGrantsTestRole}}
```
レスポンス:  

```
{"CreatedAt": "2023-05-31T18:23:48.107000+00:00",
    "AccessGrantsLocationId": "635f1139-1af2-4e43-8131-a4de006eb456",
    "AccessGrantsLocationArn": "arn:aws:s3:{{us-east-2}}: {{111122223333}}:access-grants/default/location/635f1139-1af2-4e43-8131-a4de006eb888",
    "LocationScope": "s3://DOC-BUCKET-EXAMPLE/",
    "IAMRoleArn": "arn:aws:iam::{{111122223333}}:role/accessGrantsTestRole"
}
```

## REST API の使用
<a name="access-grants-location-register-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_CreateAccessGrantsLocation.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessGrantsLocation.html) 
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrantsLocation.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessGrantsLocation.html) 
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrantsLocation.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessGrantsLocation.html) 
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessGrantsLocations.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessGrantsLocations.html) 
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateAccessGrantsLocation.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_UpdateAccessGrantsLocation.html) 

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

このセクションでは、AWS SDK を使用してロケーションを登録する方法の例を説明します。

次の例を実行するには、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

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

S3 Access Grants インスタンスには`s3://`、デフォルトの場所、またはカスタムロケーションを登録できます。その場所へのプリンシパルアクセス権を持つ IAM ロールを作成し、次に S3 Access Grants にこのロールを引き受ける権限を付与する必要があります。

次のコマンド例を使用する際は、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

**Example デフォルトロケーションを登録する**  
リクエスト:  

```
public void createAccessGrantsLocation() {
CreateAccessGrantsLocationRequest createRequest = CreateAccessGrantsLocationRequest.builder()
.accountId("{{111122223333}}")
.locationScope("{{s3://}}")
.iamRoleArn("arn:aws:iam::{{123456789012}}:role/{{accessGrantsTestRole}}")
.build();
CreateAccessGrantsLocationResponse createResponse = s3Control.createAccessGrantsLocation(createRequest);
LOGGER.info("CreateAccessGrantsLocationResponse: " + createResponse);
}
```
レスポンス:  

```
CreateAccessGrantsLocationResponse(
CreatedAt=2023-06-07T04:35:11.027Z,
AccessGrantsLocationId=default,
AccessGrantsLocationArn=arn:aws:s3:{{us-east-2}}:{{111122223333}}:access-grants/default/location/default,
LocationScope=s3://,
IAMRoleArn=arn:aws:iam::{{111122223333}}:role/accessGrantsTestRole
)
```

**Example カスタムロケーションを登録する**  
リクエスト:  

```
public void createAccessGrantsLocation() {
CreateAccessGrantsLocationRequest createRequest = CreateAccessGrantsLocationRequest.builder()
.accountId("{{111122223333}}")
.locationScope("{{s3://DOC-BUCKET-EXAMPLE/}}")
.iamRoleArn("arn:aws:iam::{{111122223333}}:role/{{accessGrantsTestRole}}")
.build();
CreateAccessGrantsLocationResponse createResponse = s3Control.createAccessGrantsLocation(createRequest);
LOGGER.info("CreateAccessGrantsLocationResponse: " + createResponse);
}
```
レスポンス:  

```
CreateAccessGrantsLocationResponse(
CreatedAt=2023-06-07T04:35:10.027Z,
AccessGrantsLocationId=18cfe6fb-eb5a-4ac5-aba9-8d79f04c2012,
AccessGrantsLocationArn=arn:aws:s3:us-east-2:{{111122223333}}:access-grants/default/location/18cfe6fb-eb5a-4ac5-aba9-8d79f04c2666,
LocationScope= s3://test-bucket-access-grants-user123/,
IAMRoleArn=arn:aws:iam::{{111122223333}}:role/accessGrantsTestRole
)
```

------