在 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 账户对您的表、索引或流进行公有访问,则 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" ] } } } ] }