AWS::DynamoDB::GlobalTable ResourcePolicy - AWS CloudFormation

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

AWS::DynamoDB::GlobalTable ResourcePolicy

创建或更新基于资源的策略文档,其中包含对 DynamoDB 资源(例如表、其索引和流)的权限。基于资源的策略允许您通过指定谁有权访问每种资源以及允许他们对每个资源执行的操作来定义访问权限。

在 CloudFormation 模板中,您可以以 JSON 或 YAML 格式提供策略,因为在将 YAML 提交到之前会将其 CloudFormation 转换为 JSON。 DynamoDB有关基于资源的策略的更多信息,请参阅使用基于资源的策略 DynamoDB和基于资源的策略

在 CloudFormation 模板中定义基于资源的策略时,需要考虑以下注意事项:

  • JSON 格式的基于资源的策略文档支持的最大大小为 20 KB。 DynamoDB 根据此限制计算策略大小时,会计算空格。

  • 基于资源的策略不支持偏移检测。如果您在 CloudFormation 堆栈模板之外更新策略,则需要使用更改更新 CloudFormation 堆栈。

  • 基于资源的策略不支持 out-of-band 更改。如果您在模板之外添加、更新或删除策略,则如果 CloudFormation 模板内的策略没有更改,则更改不会被覆盖。

    例如,假设您的模板包含基于资源的策略,您稍后可以在模板之外对其进行更新。如果您未对模板中的政策进行任何更改,则中更新的政策将 DynamoDB 不会与模板中的策略同步。

    相反,假设你的模板不包含基于资源的策略,但你在模板之外添加了一个策略。 DynamoDB 只要您不将此政策添加到模板中,就不会将其删除。当您将策略添加到模板并更新堆栈时,中的现有策略 DynamoDB 将更新为与模板中定义的策略相匹配。

  • 在基于资源的策略中,如果 DynamoDB 服务相关角色 (SLR) 为全局表复制数据的操作被拒绝,则添加或删除副本将失败并显示错误。

  • AWS:: DynamoDB:: GlobalTable 资源不支持在部署堆栈更新的区域以外的区域中在同一个堆栈更新中创建副本。

有关所有注意事项的完整列表,请参阅基于资源的策略注意事项

语法

要在 AWS CloudFormation 模板中声明此实体,请使用以下语法:

JSON

{ "PolicyDocument" : Json }

YAML

PolicyDocument: Json

属性

PolicyDocument

基于资源的策略文档,其中包含添加到指定 DynamoDB 表、其索引和流的权限。在 CloudFormation 模板中,您可以以 JSON 或 YAML 格式提供策略,因为在将 YAML 提交到之前会将其 CloudFormation 转换为 JSON。 DynamoDB有关基于资源的策略的更多信息,请参阅使用基于资源的策略 DynamoDB和基于资源的策略

必需:是

类型:Json

更新要求没有中断

示例

将基于资源的策略附加到使用该资源创建的 DynamoDB AWS::DynamoDB::GlobalTable表。

以下 CloudFormation 模板使用:: DynamoDB AWS:: GlobalTable 资源创建一个表,并将基于资源的策略附加到该表及其流。此策略允许用户foobar对表执行GetItem操作。此外,以下模板启用了直播,然后将基于资源的策略附加到该流。基于资源的直播策略允许用户foobar对直播执行GetRecordsGetShardIterator、和DescribeStream操作。

重要

如果您在 CloudFormation 模板中启用了直播并为该直播定义了策略,则只有在启用直播之后,但在堆栈更新完成之前,该策略才会附加到该流。

JSON

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "GlobalMusicCollection": { "Type": "AWS::DynamoDB::GlobalTable", "Properties": { "TableName": "MusicCollection", "AttributeDefinitions": [{ "AttributeName": "Artist", "AttributeType": "S" }], "KeySchema": [{ "AttributeName": "Artist", "KeyType": "HASH" }], "BillingMode": "PAY_PER_REQUEST", "StreamSpecification": { "StreamViewType": "NEW_AND_OLD_IMAGES" }, "Replicas": [ { "Region": "us-east-1", "ResourcePolicy": { "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Principal": { "AWS": [ "arn:aws:iam::111122223333:user/foobar" ] }, "Effect": "Allow", "Action": "dynamodb:GetItem", "Resource": "*" }] } }, "ReplicaStreamSpecification": { "ResourcePolicy": { "PolicyDocument": { "Version": "2012-10-17", "Statement": [{ "Principal": { "AWS": "arn:aws:iam::111122223333:user/foobar" }, "Effect": "Allow", "Action": [ "dynamodb:GetRecords", "dynamodb:GetShardIterator", "dynamodb:DescribeStream" ], "Resource": "*" }] } } } } ] } } } }