AWS SAM - 为有条件创建的资源应用策略模板

时间:2021-07-05 07:06:17

标签: aws-lambda aws-serverless aws-sam

我有条件地创建了一个 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 表授予写权限。

1 个答案:

答案 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