

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

# 在相同 AWS 帳戶中分隔 DynamoDB 環境的 IAM 政策
<a name="iam-policy-separate-environments"></a>

假設您有不同的環境，且每個環境都會維護各自版本的資料表 (名為 `ProductCatalog`)。如果您在同一個 AWS 帳戶中建立兩個`ProductCatalog`資料表，由於許可的設定方式，在一個環境中工作可能會影響另一個環境。例如，在 AWS 帳戶層級設定並行控制平面操作數量的配額 （例如 `CreateTable`)。

因此，一個環境中的每個動作都會減少另一個環境中可用的操作數目。還有一種風險是，一個環境中的程式碼可能會在另一個環境中意外存取資料表。

**注意**  
若想區隔生產和測試工作負載來協助控制事件的潛在「爆炸範圍」，最佳實務是為測試和生產工作負載建立不同的 AWS 帳戶。如需詳細資訊，請參閱 [AWS 帳戶管理與區隔](https://docs.aws.amazon.com//wellarchitected/latest/security-pillar/aws-account-management-and-separation.html)。

進一步假設您有兩位開發人員 (Amit 和 Alice) 正在測試 `ProductCatalog` 資料表。您的開發人員可以共用相同的測試 AWS 帳戶，而不是每個需要個別 AWS 帳戶的開發人員。在此測試帳戶中，您可以建立相同資料表的複本以供每位開發人員處理 (例如 `Alice_ProductCatalog` 和 `Amit_ProductCatalog`)。在這種情況下，您可以在為測試環境建立的 AWS 帳戶中建立使用者 Alice 和 Amit。您接著可以將許可授予這些使用者，以對他們擁有的資料表執行 DynamoDB 動作。

若要授予這些 IAM 使用者許可，您可以執行下列其中一項：
+ 為每位使用者建立不同的政策，然後分別將每個政策連接至其使用者。例如，您可以將下列政策連接至使用者 Alice，允許她存取 `Alice_ProductCatalog` 資料表上的所有 DynamoDB 動作：

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "AllAPIActionsOnAliceTable",
              "Effect": "Allow",
              "Action": [
                "dynamodb:DeleteItem",
                "dynamodb:DescribeContributorInsights",
                "dynamodb:RestoreTableToPointInTime",
                "dynamodb:ListTagsOfResource",
                "dynamodb:CreateTableReplica",
                "dynamodb:UpdateContributorInsights",
                "dynamodb:CreateBackup",
                "dynamodb:DeleteTable",
                "dynamodb:UpdateTableReplicaAutoScaling",
                "dynamodb:UpdateContinuousBackups",
                "dynamodb:TagResource",
                "dynamodb:DescribeTable",
                "dynamodb:GetItem",
                "dynamodb:DescribeContinuousBackups",
                "dynamodb:BatchGetItem",
                "dynamodb:UpdateTimeToLive",
                "dynamodb:BatchWriteItem",
                "dynamodb:ConditionCheckItem",
                "dynamodb:UntagResource",
                "dynamodb:PutItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteTableReplica",
                "dynamodb:DescribeTimeToLive",
                "dynamodb:RestoreTableFromBackup",
                "dynamodb:UpdateTable",
                "dynamodb:DescribeTableReplicaAutoScaling",
                "dynamodb:GetShardIterator",
                "dynamodb:DescribeStream",
                "dynamodb:GetRecords",
                "dynamodb:DescribeLimits",
                "dynamodb:ListStreams"
              ],
              "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/Alice_ProductCatalog/*"
          }
      ]
  }
  ```

------

  然後，您可以為使用者 Amit 建立具有不同資源 (`Amit_ProductCatalog` 資料表) 的類似政策。
+ 您可以使用 IAM 政策變數來撰寫單一政策，並將它連接至群組，而不是將政策連接至個別使用者。您需要建立群組，而在此範例中，會將使用者 Alice 和 Amit 新增至群組。下列範例授予對 `${aws:username}_ProductCatalog` 資料表執行所有 DynamoDB 動作的許可。評估政策時，政策變數 `${aws:username}` 會取代為申請者的使用者名稱。例如，如果 Alice 傳送新增項目的請求，則只有在 Alice 將項目新增至 `Alice_ProductCatalog` 資料表時，才允許此動作。

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

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "ActionsOnUserSpecificTable",
              "Effect": "Allow",
              "Action": [
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:BatchWriteItem",
                "dynamodb:GetItem",
                "dynamodb:BatchGetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:ConditionCheckItem"
              ],
              "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_ProductCatalog"
          },
          {
              "Sid": "AdditionalPrivileges",
              "Effect": "Allow",
              "Action": [
                  "dynamodb:ListTables",
                  "dynamodb:DescribeTable",
                  "dynamodb:DescribeContributorInsights"
              ],
              "Resource": "arn:aws:dynamodb:us-west-2:123456789012:table/*"
          }
      ]
  }
  ```

------

**注意**  
使用 IAM 政策變數時，您必須在政策中明確地指定 `2012-10-17` 版本的 IAM 政策語言。IAM 政策語言 (`2008-10-17`) 的預設版本不支援政策變數。

您可以對資料表使用萬用字元 (\$1) 授予許可 (而不是如同一般作法將特定資料表識別為資源)，在這些資料表中，資料表名稱的前面會加上提出請求的使用者，如下範例所示。

```
"Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_*"
```