アクセスポイントを使用するための IAM ポリシーの設定
Amazon S3 アクセスポイントは AWS Identity and Access Management (IAM) リソースポリシーをサポートしています。これにより、リソース、ユーザー、その他の条件別にアクセスポイントの使用を制御できます。アプリケーションやユーザーがアクセスポイントを介してオブジェクトにアクセスできるようにするには、アクセスポイントと基になるバケットの両方でリクエストを許可する必要があります。
重要
S3 アクセスポイントをバケットに追加しても、バケット名や Amazon リソースネーム (ARN) でアクセスしたときのバケットの動作は変わりません。バケットに対する既存のすべてのオペレーションは、以前と同じように動作します。アクセスポイントポリシーに含めた制限は、そのアクセスポイントを介したリクエストにのみ適用されます。
IAM リソースポリシーを使用する際、ポリシーを保存する前に、AWS Identity and Access Management Access Analyzer からのセキュリティ警告、エラー、一般的な警告、および提案を解決してください。IAM Access Analyzer は、IAM ポリシーの文法とベストプラクティスに照らしてポリシーチェックを行います。これらのチェックにより、機能的でセキュリティのベストプラクティスに準拠したポリシーを作成するのに、役立つ結果とレコメンデーションが示されます。
IAM Access Analyzer を使用したポリシーの検証の詳細については、「IAM ユーザーガイド」の「IAM Access Analyzer のポリシーの検証」を参照してください。IAM Access Analyzer によって返される警告、エラー、および提案のリストを表示するには、「IAM Access Analyzer ポリシーチェックリファレンス」を参照してください。
アクセスポイントポリシーの例
以下の例は、アクセスポイントを介したリクエストを制御するための IAM ポリシーの作成方法を示しています。
注記
アクセスポイントポリシーで付与されるアクセス許可は、基になるバケットでも同じアクセスが許可される場合にのみ有効です。このためには以下の 2 つの方法があります。
-
(推奨)「アクセスポイントへのアクセスコントロールの委任」の説明に従って、バケットからアクセスポイントにアクセスコントロールを委任します。
-
アクセスポイントポリシーに含まれているものと同じアクセス許可を、基になるバケットのポリシーに追加します。例 1 のアクセスポイントポリシーの例は、必要なアクセスを許可するように基になるバケットポリシーを変更する方法を示しています。
例 1 - アクセスポイントポリシーによる付与
以下のアクセスポイントポリシーは、アカウント
の IAM ユーザー 123456789012
に、アカウント Jane
のアクセスポイント 123456789012
を介して、オブジェクト (プレフィックスが my-access-point
であるオブジェクト) を Jane/
GET
および PUT
するアクセス許可を付与します。
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/Jane
" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:us-west-2
:123456789012
:accesspoint/my-access-point
/object/Jane/
*" }] }
注記
アクセスポイントポリシーで
に対して効果的にアクセスを許可するには、基になるバケットでも Jane
に対して同じアクセスを許可する必要があります。「アクセスポイントへのアクセスコントロールの委任」で説明しているように、バケットからアクセスポイントにアクセスコントロールを委任できます。または、基になるバケットに以下のポリシーを追加して、Jane に必要なアクセス許可を付与できます。Jane
Resource
エントリはアクセスポイントとバケットのポリシーでは異なります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/Jane
" }, "Action": ["s3:GetObject", "s3:PutObject"], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1
/Jane/
*" }] }
例 2 - タグ条件付きのアクセスポイントポリシー
以下のアクセスポイントポリシーは、アカウント
の IAM ユーザー 123456789012
に、アカウント Mateo
のアクセスポイント 123456789012
を介して、オブジェクト (タグキーが my-access-point
、値が data
であるオブジェクト) を finance
GET
するアクセス許可を付与します。
{ "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Principal" : { "AWS": "arn:aws:iam::
123456789012
:user/Mateo
" }, "Action":"s3:GetObject", "Resource" : "arn:aws:s3:us-west-2
:123456789012
:accesspoint/my-access-point
/object/*", "Condition" : { "StringEquals": { "s3:ExistingObjectTag/data
": "finance
" } } }] }
例 3 – バケットのリスト取得を許可するアクセスポイントポリシー
以下のアクセスポイントポリシーでは、アカウント
の IAM ユーザー 123456789012
Arnav
に、アカウント
のアクセスポイント 123456789012
の基になるバケットに含まれるオブジェクトを表示するアクセス許可を付与します。my-access-point
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
123456789012
:user/Arnav
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:us-west-2
:123456789012
:accesspoint/my-access-point
" }] }
例 4 – サービスコントロールポリシー
次のサービスコントロールポリシーは、すべての新しいアクセスポイントを 仮想プライベートクラウド (VPC) ネットワークオリジンで作成することを要求します。このポリシーを適用すると、組織内のユーザーは、インターネットからアクセス可能なアクセスポイントを新規に作成できなくなります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:CreateAccessPoint", "Resource": "*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } }] }
例 5 – S3 オペレーションを VPC ネットワークオリジンに制限するバケットポリシー
次のバケットポリシーは、すべての S3 オペレーションからバケット
へのアクセスを、VPC をネットワークオリジンとするアクセスポイントに制限します。amzn-s3-demo-bucket
重要
この例で示しているようなステートメントを使用する前に、アクセスポイントでサポートされない機能 (クロスリージョンレプリケーションなど) が不要であることを確認してください。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": [ "s3:AbortMultipartUpload", "s3:BypassGovernanceRetention", "s3:DeleteObject", "s3:DeleteObjectTagging", "s3:DeleteObjectVersion", "s3:DeleteObjectVersionTagging", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectLegalHold", "s3:GetObjectRetention", "s3:GetObjectTagging", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:GetObjectVersionTagging", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectLegalHold", "s3:PutObjectRetention", "s3:PutObjectTagging", "s3:PutObjectVersionAcl", "s3:PutObjectVersionTagging", "s3:RestoreObject" ], "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
/*", "Condition": { "StringNotEquals": { "s3:AccessPointNetworkOrigin": "VPC" } } } ] }
条件キー
S3 アクセスポイントには、IAM ポリシーでリソースへのアクセスを制御するために使用できる条件キーがあります。以下の条件キーは IAM ポリシーの一部にすぎません。すべてのポリシーの例については、「アクセスポイントポリシーの例」、「アクセスポイントへのアクセスコントロールの委任」および「クロスアカウントアクセスポイントへのアクセス許可の付与」を参照してください。
s3:DataAccessPointArn
-
この例は、アクセスポイントの ARN の照合に使用できる文字列です。次の例では、リージョン
の AWS アカウントus-west-2
のすべてのアクセスポイントを照合します。123456789012
"Condition" : { "StringLike": { "s3:DataAccessPointArn": "arn:aws:s3:
us-west-2
:123456789012
:accesspoint/*" } } s3:DataAccessPointAccount
-
この例は、アクセスポイントの所有者のアカウント ID を照合するために使用できる文字列演算子です。次の例では、AWS アカウント
が所有するすべてのアクセスポイントを照合します。123456789012
"Condition" : { "StringEquals": { "s3:DataAccessPointAccount": "
123456789012
" } } s3:AccessPointNetworkOrigin
-
この例は、ネットワークオリジン (
Internet
またはVPC
) の照合に使用できる文字列演算子です。次の例では、VPC オリジンを持つアクセスポイントのみを照合します。"Condition" : { "StringEquals": { "s3:AccessPointNetworkOrigin": "VPC" } }
Amazon S3 での条件キーの使用についての詳細は、「サービス認可リファレンス」の「Actions, resources, and condition keys for Amazon S3」を参照してください。
S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「Amazon S3 API オペレーションに必要なアクセス許可」を参照してください。
アクセスポイントへのアクセスコントロールの委任
バケットのアクセスコントロールをバケットのアクセスポイントに委任できます。以下のバケットポリシーの例では、バケット所有者のアカウントが所有するすべてのアクセスポイントへのフルアクセスを許可しています。したがって、このバケットへのすべてのアクセスは、そのアクセスポイントにアタッチされているポリシーによってコントロールされます。バケットへの直接アクセスを必要としないすべてのユースケースでは、この方法でバケットを設定することをお勧めします。
例 6 - アクセスコントロールをアクセスポイントに委任するバケットポリシー
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : "*", "Resource" : [ "
Bucket ARN
", "Bucket ARN
/*"], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Bucket owner's account ID
" } } }] }
クロスアカウントアクセスポイントへのアクセス許可の付与
別のアカウントが所有するバケットへのアクセスポイントを作成するには、まずバケット名とアカウント所有者 ID を指定してアクセスポイントを作成する必要があります。次に、バケット所有者は、アクセスポイントからのリクエストを許可するようにバケットポリシーを更新する必要があります。アクセスポイントの作成は、アクセスポイントがバケットの内容へのアクセスを提供しないという点で DNS CNAME の作成と似ています。すべてのバケットアクセスはバケットポリシーによって制御されます。次のバケットポリシーの例では、信頼できる AWS アカウント が所有するアクセスポイントからのバケットで、GET
および LIST
リクエストを許可します。
Bucket ARN
は、バケットの ARN に置き換えます。
例 7 — 別の AWS アカウント にアクセス許可を委任するバケットポリシー
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : ["s3:GetObject","s3:ListBucket"], "Resource" : [ "
Bucket ARN
", "Bucket ARN
/*"], "Condition": { "StringEquals" : { "s3:DataAccessPointAccount" : "Access point owner's account ID
" } } }] }