IAM 政策來分隔相同 AWS 帳戶中的 DynamoDB 環境 - Amazon DynamoDB

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

IAM 政策來分隔相同 AWS 帳戶中的 DynamoDB 環境

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

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

注意

若想區隔生產和測試工作負載來協助控制事件的潛在「爆炸範圍」,最佳實務是為測試和生產工作負載建立不同的 AWS 帳戶。如需詳細資訊,請參閱 AWS 帳戶管理與區隔

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

若要授予這些IAM使用者許可,您可以執行下列其中一項操作:

  • 為每位使用者建立不同的政策,然後分別將每個政策連接至其使用者。例如,您可以將下列政策連接至使用者 Alice,允許她存取 Alice_ProductCatalog 資料表上的所有 DynamoDB 動作:

    { "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 資料表時,才允許此動作。

    { "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政策變數時,您必須在政策中明確指定IAM政策語言的2012-10-17版本。IAM 政策語言 (2008-10-17) 的預設版本不支援政策變數。

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

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