ロケーションを登録する - Amazon Simple Storage Service

ロケーションを登録する

アカウントの AWS リージョン で Amazon S3 Access Grants インスタンスを作成 したら、そのインスタンスに S3 ロケーションを登録できます。ロケーションは、アクセスを許可するデータを含む S3 リソースです。デフォルトの場所 s3:// (AWS リージョン 内のすべてのバケット) を登録し、後で個別のアクセス許可を作成する際にアクセスの範囲を限定することができます。特定のバケット、またはバケットとプレフィックスをロケーションとして登録することもできます。

アクセス権限を作成する前に、まず S3 Access Grants インスタンスに少なくとも 1 つのロケーションを登録する必要があります。ロケーションを登録する際は、S3 Access Grants がそのロケーションに対するランタイムリクエストを処理するために引き受ける AWS Identity and Access Management (IAM) ロールも指定する必要があります。また、実行時に特定のグラントに限定して権限の範囲を絞り込む必要があります。

S3 URI IAM ロール 説明
s3:// Default-IAM-role

デフォルトのロケーション s3:// には、AWS リージョン 内のすべてのバケットが含まれます。

s3://DOC-EXAMPLE-BUCKET1/ IAM-role-For-bucket

このロケーションには、指定したバケット内のすべてのオブジェクトが含まれます。

ロケーションを登録する前に、次の手順を実行する必要があります。

  • アクセスを許可するデータを含むバケットを 1 つまたは複数作成します。これらのバケットは、S3 Access Grants インスタンスと同じ AWS リージョン にある必要があります。詳細については、「バケットの作成」を参照してください。

    バケットにプレフィックスを追加するには、「オブジェクトキー名の作成」を参照してください。

  • IAM ロールを作成し、S3 Access Grants サービスプリンシパルにリソースポリシーファイル内のこのロールへのアクセス権を付与します。これを実行するために、次のステートメントを含む JSON ファイルを作成できます。リソースポリシーをアカウントに追加するには、「最初のカスタマー管理ポリシーの作成とアタッチ」を参照してください。

    TestRolePolicy.json

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567891011", "Action": ["sts:AssumeRole", "sts:SetSourceIdentity", "sts:SetContext"], "Effect": "Allow", "Principal": {"Service":"access-grants.s3.amazonaws.com"} } ] }
  • Amazon S3 バケットへのアクセス許可を持つ IAM ポリシーを作成します。次の iam-policy.json ファイルを例にshじて、user input placeholders を実際の情報と置き換えます。

    注記
    • 次の例では、AWS Key Management Service (AWS KMS) キーによるサーバー側の暗号化を使用してデータを暗号化する場合に、ポリシーに IAM ロールに必要な AWS KMS アクセス許可を含めています。この機能を使用しない場合は、IAM ポリシーからこのようなアクセス許可を削除できます。

    • IAM ロールが S3 データにアクセスするように制限できるのは、S3 Access Grants が認証情報を提供する場合に限られます。この例では、特定の S3 Access Grants インスタンスに 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"] } } }, { "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 を使用して S3 データへのアクセスを許可するには、少なくとも 1 つのロケーションを登録しておく必要があります。

S3 Access Grants インスタンスでロケーションを登録するには
  1. AWS Management Console にサインインし、Amazon S3 コンソール (https://console.aws.amazon.com/s3/) を開きます。

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

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

    S3 Access Grants インスタンスを初めて使用する場合は、「Step 1 - S3 Access Grants インスタンスを作成する」を実行し、[Access Grants インスタンスをセットアップ] ウィザードの [ステップ 2] に進んでいる必要があります。S3 Access Grants インスタンスが既にある場合は、[詳細の表示] を選択して、[ロケーション] タブで、[ロケーションを登録] をクリックします。

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

    2. [IAM ロール] で、次のいずれかを選択します。

      • 既存の IAM ロールから選択

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

      • IAM ロールの ARN の入力

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

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

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

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

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

AWS CLI をインストールするには、「AWS Command Line Interface ユーザーガイド」の「AWS CLI をインストールする」を参照してください。

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

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

例 リソースポリシーを作成する

S3 Access Grants が IAM ロールを引き受けることを許可するポリシーを作成します。これを実行するために、次のステートメントを含む JSON ファイルを作成できます。リソースポリシーをアカウントに追加するには、「最初のカスタマー管理ポリシーの作成とアタッチ」を参照してください。

TestRolePolicy.json

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1234567891011", "Action": ["sts:AssumeRole", "sts:SetSourceIdentity"], "Effect": "Allow", "Principal": {"Service":"access-grants.s3.amazonaws.com"} } ] }
例 ロールを作成する

次の 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" } } ] } } }

Amazon S3 バケットへのアクセス許可を持つ IAM ポリシーを作成します。次の iam-policy.json ファイルを例にshじて、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": "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"] } } }, { "Sid": "KMSPermissions", "Effect":"Allow", "Action":[ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource":[ "*" ] } ] }

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

aws iam put-role-policy \ --role-name accessGrantsTestRole \ --policy-name accessGrantsTestRole \ --policy-document file://iam-policy.json
例 デフォルトロケーションを登録します。
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" }
例 カスタムロケーションを登録する
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" }

Amazon S3 REST API での S3 Access Grants インスタンスの管理のサポートの詳細については、「Amazon Simple Storage Service API リファレンス」の次のセクションを参照してください。

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

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

Java

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

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

例 デフォルトロケーションを登録する

リクエスト:

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 )
例 カスタムロケーションを登録する

リクエスト:

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 )