授予一个IAM角色访问大量DynamoDB表的权限

时间:2020-02-12 20:02:12

标签: amazon-dynamodb amazon-cloudformation amazon-iam

我有一个使用主CloudFormation堆栈和十几个嵌套堆栈定义的AppSync应用。每个嵌套堆栈都定义一个DynamoDB表,该表的AppSync数据源以及该数据源访问该表的IAM角色。数据源取决于角色,而角色取决于表。

出于以下三个原因,我想巩固这些IAM角色:

  • 角色定义非常重复,而且很简单。
  • 此应用程序的副本很多,它总共增加了许多IAM角色-足以使我们接近软限制运行。
  • 某些解析器使用DynamoDB批处理操作来访问多个表,因此,至少某些IAM角色必须始终授予对多个表的访问权限。

我不想授予角色对帐户中所有DynamoDB表的整体访问权限。

向每个必需的表授予一个角色访问权限的最简单方法是在策略文档中手动列出它们。这显然具有需要添加新表时手动保持策略同步的缺点。但是,还存在一个依赖项问题:嵌套堆栈中的数据源取决于主堆栈中的角色,而该角色取决于嵌套堆栈中的表。

我本想使用标签:为具有特定标签的所有DynamoDB表授予权限,然后为每个表设置该标签。这样,添加新表时就无需编辑IAM角色。但显然DynamoDB does not support tag-based conditions

是否有一种简单的方法可以授予单个IAM角色对许多DynamoDB表的访问权限,而无需授予对所有DynamoDB的访问权限,也无需在角色中单独列出这些表?

1 个答案:

答案 0 :(得分:2)

如果您可以使用给表命名相同的前缀来命名表,则可以在资源中使用通配符。

arn:aws:dynamodb:<Region>:<Account>:table/MyPrefix-*

这将适用于以MyPrefix-开头的所有表

如果您使用生成的名称,则可能可以使用AWS::StackName值代替MyPrefix,但是请注意,使用嵌套堆栈时,该值可能会缩短。