我有条件地创建了一个 DynamoDb 表:
MyDynamoTable:
Type: AWS::DynamoDB::Table
Condition: IsDevAccount
这就是使用输入参数定义 IsDevAccount
的方式:
Conditions:
IsDevAccount: !Equals [ !Ref Stage, dev ]
现在我正在创建一个 Lambda 函数,它通过环境变量接受表的名称(除其他外)作为输入。这也是有条件地完成的。在函数的代码中,我会检查表名是否被传递(如果不满足条件,则传递空)。如果是这样,我会放一些东西进去。
但是,我不确定如何有条件地将策略模板应用于函数的角色。通常我是这样做的:
MyFunction:
Type: AWS::Serverless::Function
Properties:
Policies:
- DynamoDBWritePolicy:
TableName: !Ref MyDynamoTable
如果由于不满足条件而没有创建表(例如:在另一个帐户中),函数的执行角色会发生什么情况?我也可以有条件地应用此策略模板吗?
我不想做的是盲目地给账户内的所有 DynamoDB 表授予写权限。
答案 0 :(得分:0)
是的,您可以将条件添加到数据库写入策略中,以便仅在满足条件时才允许写入策略。
您仅在环境是登台或开发时才创建表,您可以在策略上应用条件以检查您的表名,然后应用写入策略。下面的例子
MyDynamoTable:
Type: AWS::DynamoDB::Table
Condition: IsDevAccount
Conditions:
IsDevAccount: !Equals [ !Ref Stage, dev ]
MyFunction:
Type: AWS::Serverless::Function
Properties:
Policies:
- DynamoDBWritePolicy:
Condition: !Equals [ !Ref MyDynamoTable, "myTableName" ],
TableName: !Ref MyDynamoTable