在 DynamoDB 中使用基于资源的策略屏蔽公共访问权限
阻止公有访问(BPA)功能可识别并防止附加基于资源的策略,这些策略授予跨您的 Amazon Web Services(AWS)
BPA 使用自动推理
重要
BPA 通过直接附加到您 DynamoDB 资源(例如表、索引和流)的基于资源的策略阻止授予公有访问权限,从而有助于保护您的资源。除了使用 BPA 之外,还要仔细检查以下策略,来确认它们不授予公有访问权限:
-
附加到关联 AWS 主体(例如 IAM 角色)的基于身份的策略
-
附加到关联 AWS 资源 [例如 AWS Key Management Service(KMS)密钥] 的基于资源的策略
您必须确保主体不包含 *
条目,或者指定的条件键之一限制主体对资源的访问。如果基于资源的策略允许跨 AWS 账户对您的表、索引或流进行公有访问,则 DynamoDB 将阻止您创建或修改策略,直到策略中的规范得到更正并被视为非公开为止。
您可以通过在 Principal
块内指定一个或多个主体来将策略设为非公有。以下基于资源的策略示例通过指定两个主体来阻止公有访问。
{ "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" ] } } } ] }