アクセスポイントは 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 ポリシーチェックリファレンス」を参照してください。
ディレクトリバケットポリシーのアクセスポイントの例
以下の例は、ディレクトリバケットのアクセスポイントを介したリクエストを制御するためのアクセスポイントポリシーの作成方法を示しています。
注記
アクセスポイントポリシーで付与されるアクセス許可は、基になるバケットでも同じアクセスが許可される場合にのみ有効です。このためには以下の 2 つの方法があります。
-
(推奨)「アクセスポイントへのアクセスコントロールの委任」の説明に従って、バケットからアクセスポイントにアクセスコントロールを委任します。
-
アクセスポイントポリシーに含まれているものと同じアクセス許可を、基になるバケットのポリシーに追加します。
例 1 – アクセスポイントを VPC ネットワークオリジンに制限するサービスコントロールポリシー
次のサービスコントロールポリシーは、すべての新しいアクセスポイントを 仮想プライベートクラウド (VPC) ネットワークオリジンで作成することを要求します。このポリシーを適用すると、組織内のユーザーは、インターネットからアクセス可能なアクセスポイントを作成できなくなります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "s3express:CreateAccessPoint",
"Resource": "*",
"Condition": {
"StringNotEquals": {
"s3express:AccessPointNetworkOrigin": "VPC"
}
}
}
]
}
例 2 – アクセスポイントを介した S3 オペレーションを VPC ネットワークオリジンに制限するバケットポリシー
次のバケットポリシーは、すべての S3 オペレーションからバケット
へのアクセスを、VPC をネットワークオリジンとするアクセスポイントからに制限します。amzn-s3-demo-bucket
{
"Version": "2012-10-17",
"Statement": [
{
"Principal": "*",
"Action": "s3express:CreateSession",
"Effect": "Deny",
"Resource": "arn:aws:s3express:us-west-2:123456789012:bucket/amzn-s3-demo-bucket--usw2-az1--x-s3",
"Condition": {
"StringNotEquals": {
"s3express:AccessPointNetworkOrigin": "VPC"
}
}
}
]
条件キー
ディレクトリバケットのアクセスポイントには、IAM ポリシーでリソースへのアクセスを制御するために使用できる条件キーがあります。以下の条件キーは IAM ポリシーの一部にすぎません。すべてのポリシーの例については、「汎用バケットのアクセスポイントのポリシー例」、「アクセスポイントへのアクセスコントロールの委任」および「クロスアカウントアクセスポイントへのアクセス許可の付与」を参照してください。
s3express:DataAccessPointArn
-
AWS SDK オペレーションでは、オブジェクトリクエストに ARN を使用する必要があります。この例は、アクセスポイントの ARN の照合に使用できる文字列です。次の例では、
us-west-2
リージョンの AWS アカウント111122223333
のすべてのアクセスポイントを照合します。"Condition" : { "StringLike": { "s3express:DataAccessPointArn": "arn:aws:s3express:
us-west-2
: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
を使用できます。アクセスポイントポリシーはSessionMode
をサポートしていません。これらの値は、IAM ポリシーで使用される S3 GP アクセス許可名です。これらは API オペレーションにマッピングされます。有効な値は次のとおりです。PutObject
GetObject
DeleteObject
ListBucket
GetObjectAttributes
AbortMultipartUpload
ListBucketMultipartUploads
ListMultipartUploadParts
SesssionMode
を使用するバケットポリシーの場合、s3express:Permissions
の値は次のように読み取り専用アクションと読み取り/書き込みアクションにマッピングされます。-
ReadOnly
アクション-
GetObject
-
ListBucket
-
GetObjectAttributes
-
ListBucketMultipartUploads
-
ListMultipartUploadParts
-
-
ReadWrite
アクション-
PutObject
-
GetObject
-
DeleteObject
-
ListBucket
-
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"
]
}
}
}]
}