

# 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 アカウント 全体でテーブル、インデックス、またはストリームへのパブリックアクセスを許可している場合、ポリシー内の指定内容が修正され、非パブリックと判断されない限り、そのポリシーの作成または変更は阻止されます。

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

```
{
  "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"
          ]
        }
      }
    }
  ]
}
```

------