DynamoDB でリソースベースのポリシーでパブリックアクセスをブロックする - Amazon DynamoDB

DynamoDB でリソースベースのポリシーでパブリックアクセスをブロックする

ブロックパブリックアクセス (BPA) は、Amazon Web Services (AWS) アカウント全体で DynamoDB のテーブル、インデックス、ストリームへのパブリックアクセスを許可するリソースベースのポリシーを特定し、アタッチされないように防ぐ機能です。BPA を使用すると、DynamoDB リソースへのパブリックアクセスを阻止できます。BPA はリソースベースのポリシーの作成時や変更時にチェックを行い、DynamoDB のセキュリティ体制の改善に貢献します。

BPA は自動推論を活用して、リソースベースのポリシーで許可されるアクセスを分析し、該当するアクセス許可がリソースベースのポリシーの管理時に見つかった場合は警告します。分析では、リソースベースのポリシーのステートメント、アクション、ポリシーで使用されている条件キーセットをすべてまたいでアクセスを検証します。

重要

BPA は、DynamoDB リソース (テーブル、インデックス、ストリームなど) に直接アタッチされたリソースベースのポリシーによってパブリックアクセスが許可されることがないように防いで、リソースを保護します。BPA を利用したうえでさらに、次のポリシーを注意深く調べて、パブリックアクセスが許可されていないことを確かめてください。

  • 関連する AWS プリンシパル (IAM ロールなど) にアタッチされているアイデンティティベースのポリシー

  • 関連する AWS リソース (AWS Key Management Service (KMS) キーなど) にアタッチされているリソースベースのポリシー

プリンシパル* エントリを含めないでください。または、指定された条件キーのいずれかでプリンシパルからリソースへのアクセスが制限されていることを確認する必要があります。リソースベースのポリシーが AWS アカウント 全体でテーブル、インデックス、またはストリームへのパブリックアクセスを許可している場合、ポリシー内の指定内容が修正され、非パブリックと判断されない限り、そのポリシーの作成または変更は阻止されます。

Principal ブロック内に 1 つ以上のプリンシパルを指定することで、ポリシーを非パブリックにすることができます。次のリソースベースのポリシーの例では、2 つのプリンシパルを指定することで、パブリックアクセスをブロックしています。

{ "Effect": "Allow", "Principal": { "AWS": [ "123456789012", "111122223333" ] }, "Action": "dynamodb:*", "Resource": "*" }

特定の条件キーを指定してアクセスを制限するポリシーも、パブリックとは見なされません。リソースベースのポリシーで指定されているプリンシパルを評価するほかに、以下の信頼できる条件キーも、リソースベースのポリシーが付与するアクセスが非パブリックであるという評価の補足に使用できます。

  • aws:PrincipalAccount

  • aws:PrincipalArn

  • aws:PrincipalOrgID

  • aws:PrincipalOrgPaths

  • aws:SourceAccount

  • aws:SourceArn

  • aws:SourceVpc

  • aws:SourceVpce

  • aws:UserId

  • aws:PrincipalServiceName

  • aws:PrincipalServiceNamesList

  • aws:PrincipalIsAWSService

  • aws:Ec2InstanceSourceVpc

  • aws:SourceOrgID

  • aws:SourceOrgPaths

さらに、リソースベースのポリシーが非パブリックとなるには、Amazon リソースネーム (ARN) と文字列キーの値にワイルドカードや変数が含まれていてはいけません。リソースベースのポリシーで aws:PrincipalIsAWSService キーが使用されている場合は、キー値を true に設定する必要があります。

次のポリシーでは、指定されたアカウントのユーザー John にアクセスが限定されています。この条件により Principal が制限されるため、パブリックとは見なされません。

{ "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "dynamodb:*", "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalArn": "arn:aws:iam::123456789012:user/John" } } }

次の例は非パブリックのリソースベースのポリシーです。StringEquals 演算子を使用して sourceVPC を制限しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection", "Condition": { "StringEquals": { "aws:SourceVpc": [ "vpc-91237329" ] } } } ] }