S3 Access Grants を介して Amazon S3 データへのアクセスをリクエストする - Amazon Simple Storage Service

S3 Access Grants を介して Amazon S3 データへのアクセスをリクエストする

Amazon S3 Access Grants を使用して、AWS Identity and Access Management (IAM) プリンシパル、社内ディレクトリアイデンティティ、または認証済みアプリケーションに S3 データへのアクセスを付与するアクセス権限を作成 した後、被付与者はこのデータにアクセススルタンの認証情報をリクエストできます。

アプリケーションまたは AWS のサービス API GetDataAccess オペレーションを使用して、被付与者に代わって S3 Access Grants に S3 データへのアクセスを要求すると、S3 Access Grants はまず、ユーザーがこのアイデンティティにデータへのアクセスを付与しているかを確認します。次に S3 Access Grants は AssumeRole API オペレーションを使用して一時的な認証トークンを取得し、それをリクエスタに送信します。この一時的な認証情報トークンは AWS Security Token Service (AWS STS) トークンです。

GetDataAccess リクエストには、一時的な認証情報が適用される S3 target データの範囲を指定するパラメータを含める必要があります。この target 範囲は権限の範囲と同一でも、その範囲のサブセットでもかまいません。ただし、target 範囲はリクエスタに与えられた権限の範囲内である必要があります。このリクエストでは、一時認証情報の権限レベル (READWRITEREADWRITE、など) を示す permission パラメータも指定する必要があります。

リクエスタは、認証情報リクエストで一時トークンの特権レベルを指定できます。リクエスタはこの privilege パラメータを使用して、一時的な認証情報のアクセス範囲を付与範囲内で拡大または縮小できます。privilege パラメータのデフォルト値は Default であり、返される認証情報のターゲット範囲は元の権限範囲です。privilege でこれ以外に指定できる値は、Minimal です。target 範囲が元の権限範囲から縮小される場合、target 範囲が権限範囲内にある限り、一時的な認証情報は target 範囲と一致するように範囲が再定義されます。

2 つの権限に対する privilege パラメータの効果の詳細は、次のテーブルのとおりです。一方の権限の範囲は、S3://example-s3-bucket1/bob/*で、example-s3-bucket1 バケットの bob/ プレフィックス全体が含まれます。もう一方の権限の範囲は、S3://example-s3-bucket1/bob/reports/* で、example-s3-bucket1 バケットの bob/reports/ プレフィックスのみが含まれます。

権限範囲 リクエスト範囲 特権 返される範囲 効果
S3://example-s3-bucket1/bob/* example-s3-bucket1/bob/* Default example-s3-bucket1/bob/*

リクエスタは、example-s3-bucket1 バケット内のプレフィックス bob/ で始まるキー名を持つすべてのオブジェクトにアクセスできます。

S3://example-s3-bucket1/bob/* example-s3-bucket1/bob/ Minimal example-s3-bucket1/bob/

プレフィックス名 bob/ の後にワイルドカードの * 文字がないと、リクエスタがアクセスできるのは、example-s3-bucket1 バケット内のオブジェクト名 bob/ のみです。このようなオブジェクトは通常存在しません。リクエスタは、bob/ プレフィックスで始まるキー名を持つオブジェクトを含め、その他のオブジェクトにはアクセスできません。

S3://example-s3-bucket1/bob/* example-s3-bucket1/bob/images/* Minimal example-s3-bucket1/bob/images/*

リクエスタは、example-s3-bucket1 バケット内のプレフィックス bob/images/* で始まるキー名を持つすべてのオブジェクトにアクセスできます。

S3://example-s3-bucket1/bob/reports/* example-s3-bucket1/bob/reports/file.txt Default example-s3-bucket1/bob/reports/*

リクエスタは、example-s3-bucket1 バケット内の bob/reports プレフィックスで始まるキー名を持つすべてのオブジェクトにアクセスできます。これは、権限と一致する範囲です。

S3://example-s3-bucket1/bob/reports/* example-s3-bucket1/bob/reports/file.txt Minimal example-s3-bucket1/bob/reports/file.txt

リクエスタは、example-s3-bucket1 バケット内のキー名 bob/reports/file.txt のオブジェクトにのみアクセスできます。リクエスタは、その他のオブジェクトにはアクセスできません。

durationSeconds パラメータでは一時認証情報の有効期間を秒単位で設定します。デフォルト値は 3600 秒 (1 時間) です。リクエスタ (被付与者) は 900 秒 (15 分) から 43200 秒 (12 時間) までの範囲を指定できます。被付与者がこの最大値よりも高い値をリクエストすると、そのリクエストは失敗します。

注記

一時トークンのリクエストで、ロケーションがオブジェクトの場合は、targetType リクエスト内のパラメータの値を Object に設定します。このパラメータは、ロケーションがオブジェクトで、特権レベルが Minimal の場合にのみ必要です。ロケーションがバケットまたはプレフィックスの場合、このパラメータを指定する必要はありません。

詳細については、「Amazon Simple Storage Service ユーザーガイド」の「GetDataAccess」を参照してください。

AWS Command Line Interface (AWS CLI)、Amazon S3 REST API、AWS SDK を使用して一時的な認証情報をリクエストできます。

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

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

例 一時認証情報のリクエスト

リクエスト:

aws s3control get-data-access \ --account-id 111122223333 \ --target s3://example-s3-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://example-s3-bucket/prefixA**" }

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

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

Java

次のコード例は、被付与者が S3 データにアクセスするために使用する一時的な認証情報を返します。次のコマンド例を使用する際は、user input placeholders をユーザー自身の情報に置き換えます。

例 一時認証情報を入手する

リクエスト:

public void getDataAccess() { GetDataAccessRequest getDataAccessRequest = GetDataAccessRequest.builder() .accountId("111122223333") .permission(Permission.READ) .privilege(Privilege.MINIMAL) .target("s3://example-s3-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 ))