

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# DynamoDB 資源型政策範例
<a name="rbac-examples"></a>

當您在資源型政策的 `Resource` 欄位中指定 ARN 時，僅當該 ARN 與其所附加的 DynamoDB 資源 ARN 相符時，政策才會生效。

**注意**  
請以資源特定資訊取代*斜體*文字。

## 資料表的資源型政策
<a name="rbac-examples-get"></a>

下列資源型政策附加至名為 *MusicCollection* 的 DynamoDB 資料表，授予 IAM 使用者 *John* 和 *Jane* 在 *MusicCollection* 資源上執行 [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) 與 [BatchGetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchGetItem.html) 動作的權限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
        "Effect": "Allow",
        "Principal": {
          "AWS": [
            "arn:aws:iam::111122223333:user/username",
            "arn:aws:iam::111122223333:user/Jane"
          ]
        },
        "Action": [
          "dynamodb:GetItem",
          "dynamodb:BatchGetItem"
        ],
        "Resource": [
          "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
        ]
    }
  ]
}
```

------

## 串流的資源型政策
<a name="rbac-examples-streams"></a>

下列資源型政策附加至名為 `2024-02-12T18:57:26.492` 的 DynamoDB 串流，授予 IAM 使用者 *John* 和 *Jane* 在 `2024-02-12T18:57:26.492` 資源上執行 [GetRecords](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetRecords.html)、[GetShardIterator](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_GetShardIterator.html) 與 [DescribeStream](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_streams_DescribeStream.html) API 動作的權限。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::111122223333:user/username",
          "arn:aws:iam::111122223333:user/Jane"
        ]
      },
      "Action": [
        "dynamodb:DescribeStream",
        "dynamodb:GetRecords",
        "dynamodb:GetShardIterator"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/stream/2024-02-12T18:57:26.492"
      ]
    }
  ]
}
```

------

## 資源型政策：允許對指定資源執行所有動作的存取權
<a name="rbac-examples-wildcard"></a>

若要允許使用者對資料表及其所有相關索引執行所有動作，您可以使用萬用字元 (\$1) 來表示與該資料表相關的動作和資源。將萬用字元用於資源時，使用者即可存取 DynamoDB 資料表及其所有相關索引，包括尚未建立的索引。例如，下列政策將授予使用者 *John* 對 *MusicCollection* 資料表及其所有索引執行任何動作的權限，包括未來建立的索引。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:user/role-name"
      },
      "Action": "dynamodb:*",
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection",
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/index/index-name"
      ]
    }
  ]
}
```

------

## 跨帳戶存取權資源型政策
<a name="rbac-examples-cross-account"></a>

您可以為跨帳戶的 IAM 身分指定存取 DynamoDB 資源的權限。例如，您可能需要讓受信任帳戶的使用者讀取資料表內容，但僅能存取特定項目及其特定屬性。下列政策允許使用者 *John* 從信任 AWS 帳戶 ID *111111111111* 存取，以使用 [GetItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_GetItem.html) API 從帳戶 *123456789012* 中的資料表存取資料。此政策可確保使用者僅能存取主索引鍵為 *Jane* 的項目，並且只能擷取屬性 `Artist` 和 `SongTitle`，無法讀取其他屬性。

**重要**  
如果未指定 `SPECIFIC_ATTRIBUTES` 條件，系統將傳回項目的所有屬性。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CrossAccountTablePolicy",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/John"
            },
            "Action": "dynamodb:GetItem",
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": "Jane",
                    "dynamodb:Attributes": [
                        "Artist",
                        "SongTitle"
                    ]
                },
                "StringEquals": {
                    "dynamodb:Select": "SPECIFIC_ATTRIBUTES"
                }
            }
        }
    ]
}
```

------

除了上述資源型政策外，附加於使用者 *John* 的身分型政策也必須允許相關的 `GetItem` API 動作，才能使跨帳戶存取權運作。以下範例顯示您必須附加至使用者 *John* 的身分型政策。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "CrossAccountIdentityBasedPolicy",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": "Jane",
                    "dynamodb:Attributes": [
                        "Artist",
                        "SongTitle"
                    ]
                },
                "StringEquals": {
                    "dynamodb:Select": "SPECIFIC_ATTRIBUTES"
                }
            }
        }
    ]
}
```

------

使用者 John 可以在 `table-name` 參數中指定資料表 ARN，提出 `GetItem` 請求以存取帳戶 *123456789012* 中的 *MusicCollection* 資料表。

```
aws dynamodb get-item \
    --table-name arn:aws:dynamodb:us-west-2:123456789012:table/MusicCollection \
    --key '{"Artist": {"S": "Jane"}' \
    --projection-expression 'Artist, SongTitle' \
    --return-consumed-capacity TOTAL
```

## 含 IP 位址條件的資源型政策
<a name="rbac-examples-conditions"></a>

您可以套用條件以限制來源 IP 位址、虛擬私有雲端 (VPC)，以及 VPC 端點 (VPCE)。您可以根據請求的來源 IP 位址指定權限。例如，您可能僅允許使用者從特定 IP 來源 (如公司 VPN 端點) 存取 DynamoDB 資源。請在 `Condition` 陳述式中指定這些 IP 位址。

下列範例允許使用者 *John* 在來源 IP 位址為 `54.240.143.0/24` 和 `2001:DB8:1234:5678::/64` 時，存取任何 DynamoDB 資源。

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

****  

```
{
  "Id":"PolicyId2",
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Sid":"AllowIPmix",
      "Effect":"Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111111111111:user/username"
      },
      "Action":"dynamodb:*",
      "Resource":"*",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "54.240.143.0/24",
            "2001:DB8:1234:5678::/64"
          ]
        }
      }
    }
  ]
}
```

------

您也可以拒絕所有對 DynamoDB 資源的存取，除非來源是特定的 VPC 端點，例如 *vpce-1a2b3c4d*。

**重要**  
當您將 DAX 與IPv6-only環境中具有 IP 資源政策的 DynamoDB 資料表搭配使用時，您必須設定其他存取規則。如果您的資源政策限制存取資料表`0.0.0.0/0`上的 IPv4 地址空間，您必須允許存取與 DAX 叢集相關聯的 IAM 角色。將 `ArnNotEquals`條件新增至您的政策，以確保 DAX 維持對 DynamoDB 資料表的存取。如需詳細資訊，請參閱 [DAX 和 IPv6](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DAX.create-cluster.DAX_and_IPV6.html)。

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

****  

```
{
  "Id":"PolicyId",
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AccessToSpecificVPCEOnly",
      "Principal": "*",
      "Action": "dynamodb:*",
      "Effect": "Deny",
      "Resource": "*",
      "Condition": {
        "StringNotEquals":{
          "aws:sourceVpce":"vpce-1a2b3c4d"
        }
      }
    }
  ]
}
```

------

## 使用 IAM 角色的資源型政策
<a name="rbac-examples-iam"></a>

您也可以在資源型政策中指定 IAM 服務角色。取得此角色的 IAM 實體，將受限於該角色中所指定的允許動作，以及資源型政策中定義的特定資源集合。

下列範例允許 IAM 實體在 *MusicCollection* 與 *MusicCollection* 兩個 DynamoDB 資源上執行所有 DynamoDB 動作。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "1111",
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111122223333:role/role-name" },
      "Action": "dynamodb:*",
      "Resource": [
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection",
        "arn:aws:dynamodb:us-east-1:123456789012:table/MusicCollection/*"
      ]
    }
  ]
}
```

------