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
我创建了一个 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