AWS Lambda 函数 add_permission 上的 StatmentId 位于何处?

Where does the StatmentId on AWS Lambda function add_permission live?

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

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

我的问题是关于 StatementId。它说要给一个唯一的ID。如果我再次尝试 运行 这个,它会抱怨这个 Id 已经存在。

这个 StatementId 是在亚马逊服务中的什么地方创建的?我希望能够使用 boto(或 cli)来删除和重新创建(或更新)它,以便我的脚本是幂等的。

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

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

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