AWS Lambda上的StatmentId函数add_permission实时在哪里?

时间:2016-04-15 17:50:03

标签: python aws-lambda boto3

我创建了一个python(使用boto3库)脚本来创建一个触发我的lambda函数的s3触发器。我首先必须在lambda上添加一个权限,该权限赋予s3 lambda:InvokeFunction权限。

response = client.add_permission(
    FunctionName='string',
    StatementId='string',
    Action='string',
    Principal='string',
    SourceArn='string')

我的问题是关于StatementId。它说要给出一个独特的ID。如果我再次尝试再次运行,则会抱怨此ID已存在。

在Amazon Services中创建此StatementId的位置是什么?我希望能够使用boto(或cli)来删除和重新创建(或更新)它,以便我的脚本是幂等的。

2 个答案:

答案 0 :(得分:1)

add_permission方法实际上是在与Lambda函数关联的IAM策略中添加语句。要查看整个策略,请使用get_policy方法。这将作为JSON文档返回整个策略,包括您通过add_permission添加的任何单个语句。要删除单个语句,请使用remove_permission,其中包含函数的名称和要删除的语句的statement_id,这就是为什么statement_id必须是唯一的。

答案 1 :(得分:0)

如果在使用Terraform时遇到这种情况,可以完全省略statement_id,也可以指定一个statement_id_prefix,TF会生成唯一的Id。

https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/lambda_permission