アクセスポイントを使用するための IAM ポリシーの設定 - Amazon Simple Storage Service

アクセスポイントを使用するための 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. (推奨)アクセスポイントへのアクセスコントロールの委任」の説明に従って、バケットからアクセスポイントにアクセスコントロールを委任します。

  2. アクセスポイントポリシーに含まれているものと同じアクセス許可を、基になるバケットのポリシーに追加します。例 1 のアクセスポイントポリシーの例は、必要なアクセスを許可するように基になるバケットポリシーを変更する方法を示しています。

例 1 - アクセスポイントポリシーによる付与

以下のアクセスポイントポリシーは、アカウント 123456789012 の IAM ユーザー 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 - タグ条件付きのアクセスポイントポリシー

以下のアクセスポイントポリシーは、アカウント 123456789012 の IAM ユーザー 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 – バケットのリスト取得を許可するアクセスポイントポリシー

以下のアクセスポイントポリシーでは、アカウント 123456789012 の IAM ユーザー 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 オペレーションからバケット amzn-s3-demo-bucket へのアクセスを、VPC をネットワークオリジンとするアクセスポイントに制限します。

重要

この例で示しているようなステートメントを使用する前に、アクセスポイントでサポートされない機能 (クロスリージョンレプリケーションなど) が不要であることを確認してください。

{ "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 の照合に使用できる文字列です。次の例では、リージョン us-west-2 の AWS アカウント 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" } } }] }