本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在相同 AWS 帳戶中分隔 DynamoDB 環境的 IAM 政策
假設您有不同的環境,且每個環境都會維護各自版本的資料表 (名為 ProductCatalog
)。如果您在同一個 AWS 帳戶中建立兩個ProductCatalog
資料表,由於許可的設定方式,在一個環境中工作可能會影響另一個環境。例如,在 AWS 帳戶層級設定並行控制平面操作數量的配額 (例如 CreateTable
)。
因此,一個環境中的每個動作都會減少另一個環境中可用的操作數目。還有一種風險是,一個環境中的程式碼可能會在另一個環境中意外存取資料表。
若想區隔生產和測試工作負載來協助控制事件的潛在「爆炸範圍」,最佳實務是為測試和生產工作負載建立不同的 AWS
帳戶。如需詳細資訊,請參閱 AWS 帳戶管理與區隔。
進一步假設您有兩位開發人員 (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
) 的預設版本不支援政策變數。
您可以對資料表使用萬用字元 (*) 授予許可 (而不是如同一般作法將特定資料表識別為資源),在這些資料表中,資料表名稱的前面會加上提出請求的使用者,如下範例所示。
"Resource":"arn:aws:dynamodb:us-west-2:123456789012:table/${aws:username}_*"