用于将 DynamoDB 环境分离在同一个环境中的 IAM 策略Amazon账户 - Amazon DynamoDB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

用于将 DynamoDB 环境分离在同一个环境中的 IAM 策略Amazon账户

假设您拥有单独的环境,其中每个环境都持有自己的名为ProductCatalog。如果创建两个ProductCatalog表位于同一个Amazon账户,在一个环境中工作可能会影响另一个环境,这是因为权限的设置方式。例如,对并发控制平面操作数量的配额(例如CreateTable)设置在Amazon帐户级别。

因此,一个环境中的每个操作都会减少另一个环境中可执行的操作数量。同时,一个环境中的代码还存在会意外访问另一个环境中的表的风险。

注意

如果您希望分离生产和测试工作负载以帮助控制事件的潜在 “爆炸半径”,最佳做法是创建单独的Amazon用于测试和生产工作负载。有关更多信息,请参阅 。Amazon账户管理和分离

进一步假设您有两个开发人员(Amin 和 Alice),他们在对ProductCatalog表。而不是每个开发人员需要一个单独的Amazon帐户,您的开发人员可以共享相同的测试Amazonaccount. 在此测试账户中,您可以创建同一个表的副本(如 Alice_ProductCatalogAmit_ProductCatalog),以便每个开发人员都可以对其执行操作。在这种情况下,您可以在Amazon帐户为测试环境创建。然后,您可以授予这些用户对其拥有的表执行 DynamoDB 操作的权限。

要向这些 IAM 用户授予权限,您可以执行以下任一操作:

  • 为每个用户创建单独的策略,然后分别将每个策略挂载到相应用户。例如,您可以将以下策略附加到用户 Alice,允许她对Alice_ProductCatalog表:

    { "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_ProductCatalog表)为用户 Amit。

  • 您可以使用 IAM 策略变量编写一项策略并将其挂载到某个组,而不是为各个用户挂载策略。在此示例中,您需要创建一个组,并且将用户 Alice 和 Amin 添加到这个组中。以下示例授予权限,以便对${aws:username}_ProductCatalog表。评估策略时,策略变量 ${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 策略变量时,您必须明确指定2012-10-17的版本IAM策略语言在策略中。默认版本IAM策略语言(2008-10-17)不支持策略变量。

您无需将特定表标识为通常所需的资源,可以使用通配符 (*) 为所有表授予权限,如以下示例所示。

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