

# 在 DynamoDB 中使用基于资源的策略屏蔽公共访问权限
<a name="rbac-bpa-rbp"></a>

[阻止公有访问（BPA）](#rbac-bpa-rbp)功能可识别并防止附加基于资源的策略，这些策略授予跨您的 [Amazon Web Services（AWS）](https://aws.amazon.com/)账户对您的 DynamoDB 表、索引或流进行公有访问的权限。使用 BPA，您可以阻止对您的 DynamoDB 资源的公有访问。BPA 会在创建或修改基于资源的策略期间执行检查，并通过 DynamoDB 帮助改善您的安全状况。

BPA 使用[自动推理](https://aws.amazon.com/what-is/automated-reasoning/)来分析您的基于资源的策略授予的访问权限，并且如果在管理基于资源的策略时发现此类权限，为您发送提醒。该分析可验证策略中使用的所有基于资源的策略语句、操作和条件键集的访问权限。

**重要**  
BPA 通过直接附加到您 DynamoDB 资源（例如表、索引和流）的基于资源的策略阻止授予公有访问权限，从而有助于保护您的资源。除了使用 BPA 之外，还要仔细检查以下策略，来确认它们不授予公有访问权限：  
附加到关联 AWS 主体（例如 IAM 角色）的基于身份的策略
附加到关联 AWS 资源 [例如 AWS Key Management Service（KMS）密钥] 的基于资源的策略

您必须确保[主体](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)不包含 `*` 条目，或者指定的条件键之一限制主体对资源的访问。如果基于资源的策略允许跨 AWS 账户对您的表、索引或流进行公有访问，则 DynamoDB 将阻止您创建或修改策略，直到策略中的规范得到更正并被视为非公开为止。

您可以通过在 `Principal` 块内指定一个或多个主体来将策略设为非公有。以下基于资源的策略示例通过指定两个主体来阻止公有访问。

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

通过指定特定条件键来限制访问的策略也不被视为公有策略。除了评估基于资源的策略中指定的主体外，还使用以下[可信条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)来完成就非公有访问对基于资源的策略的评估：
+ `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`。

------
#### [ JSON ]

****  

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

------