【问题标题】:Where does the StatmentId on AWS Lambda function add_permission live?AWS Lambda 函数 add_permission 上的 StatmentId 在哪里?
【发布时间】:2021-01-12 19:50:48
【问题描述】:

我创建了一个 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 已经存在。

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

【问题讨论】:

    标签: python aws-lambda boto3


    【解决方案1】:

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

    【讨论】:

    • 谢谢!后来,我查看了 kappa 源代码,发现您在 add_permission 方法中使用 str(uuid.uuid4()) 作为 statement_id。你回答了我的问题,我有点谦虚。 :)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 2020-04-10
      • 2020-12-10
      • 2010-09-19
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多