AWS: AWS Data Exchange を除くアカウント外の Amazon S3 リソースへのアクセスを拒否する - AWS Identity and Access Management

AWS: AWS Data Exchange を除くアカウント外の Amazon S3 リソースへのアクセスを拒否する

ID ベースポリシーの条件キー aws:ResourceAccount を使用すると、ユーザーまたはロールでサービスが所有するアカウント内のリソースとのやり取りを要求する AWS サービスを利用する機能に影響を与える可能性があります。

ご自分の環境で AWS Data Exchange を使用する場合、サービスはサービスアカウントが所有する Amazon S3 バケットなどのリソースを作成し、操作します。たとえば、AWS Data Exchange は、IAM プリンシパル (ユーザーまたはロール) に代わって AWS Data Exchange API を呼び出す AWS Data Exchange サービスが所有する Amazon S3 バケットに要求を送信します。その場合は、aws:ResourceAccount ポリシーを使用して、AWS Data Exchange が所有するリソースを考慮せず、サービスアカウントが所有するバケットへのアクセスを拒否します。

次の例では、AWS Data Exchange が通常の操作に必要とするリソースを除いた、アカウントに属さないの AWS 内のすべてのリソースへのアクセスを拒否する IAM ポリシーを作成する方法を示します。

このポリシーを使用するには、イタリック体のプレースホルダーテキストをお客様の情報と置き換えます。

  • ステートメント DenyAllAwsResourcesOutsideAccountExceptS3 では、ステートメントにリスト表示されておらず、またリスト表示されたアカウントに属していないすべてのアクションへのアクセスを明確に拒否する効果を持つ NotAction 要素を使用します。NotAction 要素は、このステートメントの例外を示します。これらのアクションは、ステートメントの例外を示します。これは AWS Data Exchange によって作成されたリソースでアクションが実行されると、ポリシーによってアクションが拒否されるためです。

  • このステートメント DenyAllS3ResoucesOutsideAccountExceptDataExchange は、ResourceAccount および CalledVia の条件の組み合わせを使用して、前のステートメントで除外された 3 つの Amazon S3 アクションへのアクセスを拒否します。このステートメントは、そのリソースがリスト表示されたアカウントに属していない場合、そして呼び出しサービスが AWS Data Exchange でない場合にアクションを拒否します。このステートメントは、リソースがリスト表示されたアカウントに属しているか、リスト表示されているサービスプリンシパル dataexchange.amazonaws.com が操作を行う場合には、アクションを拒否しません。

重要

このポリシーでは、アクションを許可しません。それは、リスト表示されたアカウントに属さないステートメントでリスト表示された、すべてのリソースへのアクセスを明確に拒否する Deny の効果を使用します。特定のリソースへのアクセスを許可する他のポリシーと組み合わせてこのポリシーを使用します。

次の例は、必要な Amazon S3 バケットへのアクセスを許可するためにポリシーを設定する方法を示しています。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAllAwsReourcesOutsideAccountExceptAmazonS3", "Effect": "Deny", "NotAction": [ "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "111122223333" ] } } }, { "Sid": "DenyAllS3ResourcesOutsideAccountExceptDataExchange", "Effect": "Deny", "Action": [ "s3:GetObject", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "111122223333" ] }, "ForAllValues:StringNotEquals": { "aws:CalledVia": [ "dataexchange.amazonaws.com" ] } } } ] }