ディレクトリバケットのアクセスポイントを使用するための IAM ポリシーの設定
アクセスポイントは AWS Identity and Access Management (IAM) リソースポリシーをサポートしています。これにより、リソース、ユーザー、その他の条件別にアクセスポイントの使用を制御できます。アプリケーションやユーザーがアクセスポイントを介してオブジェクトにアクセスするには、アクセスポイントと基になるバケットポリシーの両方でリクエストを許可する必要があります。
重要
アクセスポイントをバケットに追加しても、バケット名でアクセスしたときのバケットの動作は変わりません。バケットに対する既存のすべてのオペレーションは、以前と同じように動作します。アクセスポイントポリシーまたはアクセスポイントスコープに含めた制限は、そのアクセスポイントを介したリクエストにのみ適用されます。
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 ポリシーチェックリファレンス」を参照してください。
ディレクトリバケットポリシーのアクセスポイントの例
以下のアクセスポイントポリシーは、ディレクトリバケットへのリクエストを制御する方法を示しています。アクセスポイントポリシーには、バケット ARN またはアクセスポイント ARN が必要です。アクセスポイントのエイリアスは、ポリシーではサポートされていません。アクセスポイント ARN の例を次に示します。
arn:aws:s3express:
region
:account-id
:accesspoint/myaccesspoint
--zoneID
--xa-s3
アクセスポイント ARN は、アクセスポイントの詳細で確認できます。詳細については、「ディレクトリバケットのアクセスポイントの詳細を表示する」を参照してください。
注記
アクセスポイントポリシーで付与されるアクセス許可は、基になるバケットでも同じアクセスが許可される場合にのみ有効です。このためには以下の 2 つの方法があります。
-
(推奨)「アクセスポイントへのアクセスコントロールの委任」の説明に従って、バケットからアクセスポイントにアクセスコントロールを委任します。
-
アクセスポイントポリシーに含まれているものと同じアクセス許可を、基になるバケットのポリシーに追加します。
例 1 – アクセスポイントを VPC ネットワークオリジンに制限するサービスコントロールポリシー
次のサービスコントロールポリシーは、すべての新しいアクセスポイントを 仮想プライベートクラウド (VPC) ネットワークオリジンで作成することを要求します。このポリシーを適用すると、組織内のユーザーは、インターネットからアクセス可能なアクセスポイントを作成できなくなります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3express:CreateAccessPoint", "Resource": "*", "Condition": { "StringNotEquals": { "s3express:AccessPointNetworkOrigin": "VPC" } } } ] }
例 2 – バケットへのアクセスを VPC ネットワークオリジンを持つアクセスポイントに制限するアクセスポイントポリシー
次のアクセスポイントポリシーでは、バケット amzn-s3-demo-bucket--zoneID--x-s3
へのすべてのアクセスを、VPC ネットワークオリジンを持つアクセスポイントに制限します。
{ "Version": "2012-10-17", "Statement": [ { "Principal": "*", "Action": "s3express:CreateSession", "Effect": "Deny", "Resource": "arn:aws:s3express:
region
:111122223333
:bucket/amzn-s3-demo-bucket--zoneID--x-s3", "Condition": { "StringNotEqualsIfExists": { "s3express:AccessPointNetworkOrigin": "VPC" } } } ] }
条件キー
ディレクトリバケットのアクセスポイントには、IAM ポリシーでリソースへのアクセスを制御するために使用できる条件キーがあります。以下の条件キーは IAM ポリシーの一部にすぎません。すべてのポリシーの例については、「ディレクトリバケットポリシーのアクセスポイントの例」、「アクセスポイントへのアクセスコントロールの委任」および「クロスアカウントアクセスポイントへのアクセス許可の付与」を参照してください。
s3express:DataAccessPointArn
-
この例では、アクセスポイントの Amazon リソースネーム (ARN) でアクセスをフィルタリングし、リージョン
region
における AWS アカウント111122223333
のすべてのアクセスポイントと一致させる方法を示します。"Condition" : { "StringLike": { "s3express:DataAccessPointArn": "arn:aws:s3express:
region
:111122223333
:accesspoint/*" } } s3express:DataAccessPointAccount
-
この例は、アクセスポイントの所有者のアカウント ID を照合するために使用できる文字列演算子です。次の例では、AWS アカウント
が所有するすべてのアクセスポイントを照合します。111122223333
"Condition" : { "StringEquals": { "s3express:DataAccessPointAccount": "
111122223333
" } } s3express:AccessPointNetworkOrigin
-
この例は、ネットワークオリジン (
Internet
またはVPC
) の照合に使用できる文字列演算子です。次の例では、VPC オリジンを持つアクセスポイントのみを照合します。"Condition" : { "StringEquals": { "s3express:AccessPointNetworkOrigin": "VPC" } }
s3express:Permissions
-
s3express:Permissions
を使用して、アクセスポイントの範囲で特定の API オペレーションへのアクセスを制限できます。以下の API オペレーションがサポートされています。PutObject
GetObject
DeleteObject
ListBucket
(ListObjectsV2
では必須)GetObjectAttributes
AbortMultipartUpload
ListBucketMultipartUploads
ListMultipartUploadParts
注記
複数値条件キーを使用する場合は、
Allow
ステートメントでForAllValues
を使用し、Deny
ステートメントでForAnyValue
を使用することをお勧めします。詳細については、「IAM ユーザーガイド」の「複数値のコンテキストキー」を参照してください。
Amazon S3 での条件キーの使用についての詳細は、「サービス認可リファレンス」の「Actions, resources, and condition keys for Amazon S3」を参照してください。
S3 リソースタイプ別の S3 API オペレーションへの必須のアクセス許可の詳細については、「Amazon S3 API オペレーションに必要なアクセス許可」を参照してください。
アクセスポイントへのアクセスコントロールの委任
バケットポリシーからアクセスポイントポリシーにアクセス制御を委任できます。以下のバケットポリシーの例では、バケット所有者のアカウントが所有するすべてのアクセスポイントへのフルアクセスを許可しています。ポリシーの適用後、このバケットへのすべてのアクセスは、アクセスポイントポリシーによって制御されます。バケットへの直接アクセスを必要としないすべてのユースケースでは、この方法でバケットを設定することをお勧めします。
例 アクセスコントロールをアクセスポイントに委任するバケットポリシー
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : "*", "Resource" : [ "
Bucket ARN
", "Condition": { "StringEquals" : { "s3express:DataAccessPointAccount" : "Bucket owner's account ID
" } } }] }
クロスアカウントアクセスポイントへのアクセス許可の付与
別のアカウントが所有するバケットへのアクセスポイントを作成するには、まずバケット名とアカウント所有者 ID を指定してアクセスポイントを作成する必要があります。次に、バケット所有者は、アクセスポイントからのリクエストを許可するようにバケットポリシーを更新する必要があります。アクセスポイントの作成は、アクセスポイントがバケットの内容へのアクセスを提供しないという点で DNS CNAME の作成と似ています。すべてのバケットアクセスはバケットポリシーによって制御されます。次のバケットポリシーの例では、信頼できる AWS アカウント が所有するアクセスポイントからのバケットで、GET
および LIST
リクエストを許可します。
Bucket ARN
は、バケットの ARN に置き換えます。
例 別の AWS アカウントにアクセス許可を委任するバケットポリシー
{ "Version": "2012-10-17", "Statement" : [ { "Effect": "Allow", "Principal" : { "AWS": "*" }, "Action" : "s3express:CreateSession", "Resource" : [ "
Bucket ARN
" ], "Condition": { "StringEquals" : { "s3express:DataAccessPointAccount": "Access point owner's account ID
" }, "ForAllValues:StringEquals": { "s3express:Permissions": [ "GetObject", "ListBucket" ] } } }] }