【问题标题】:How to construct import command for aws_lambda_permission如何为 aws_lambda_permission 构造导入命令
【发布时间】:2021-01-26 17:16:18
【问题描述】:

现在 Terraform 可以 import lambda permissions(在创建 this post 时这是不可能的)我如何找到 aws_lambda_permission 资源的 import 参数的 function_name/statement_id 部分?

我想这可以改写为:当权限对象由控制台等创建时,我在哪里可以找到权限对象的 SID?

在 Lambda 函数的 permissions 选项卡中,我有以下策略:

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "11111111-1234-1234-1234-1234567891234",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:eu-west-2:123456789012:function:MyLizardApp",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:execute-api:eu-west-2:123456789012:hfqy1l9g3m/*/*/*"
        }
      }
    },
    {
      "Sid": "22222222-1234-1234-1234-1234567891234",
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:eu-west-2:123456789012:function:MyLizardApp",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:execute-api:eu-west-2:123456789012:hfqy1l9g3m/*/*/"
        }
      }
    }
  ]
}

我尝试使用的导入命令是这样的:

terraform import aws_lambda_permission.apigw_lambda_proxy MyLizardApp/InvokeFunction

我这样做是为了尝试填充 terraform 资源(这被描述为在 this post 中导入 terraform 的一种方法):

resource "aws_lambda_permission" "apigw_lambda_proxy" {
}

resource "aws_lambda_permission" "apigw_lambda_root" {
}

【问题讨论】:

    标签: amazon-web-services terraform terraform-provider-aws


    【解决方案1】:

    这应该只是在 AWS 控制台中 Lambda 函数的权限选项卡中。该选项卡的第一部分是 Lambda 函数具有的权限,而第二部分(标题为 Resource-based policy)具有从其他 AWS 服务调用 Lambda 函数的权限。

    您还应该能够使用 AWS CLI 的 aws lambda get-policy 获取它。这会将调用策略返回为嵌套的转义 JSON,可以使用 jq 提取:

    aws lambda get-policy --function-name MY_EXAMPLE_FUNCTION | jq -r '.Policy | fromjson | .Statement[].Sid'
    

    【讨论】:

    • 你能给我举个例子,看看 ID 是什么样的吗?我只是无法确定它在页面上的位置,而且我看到的所有示例都使用不切实际的字符串作为占位符。
    • 我没有通过 AWS 控制台创建的任何 Lambda 函数,但它应该位于标记为 Resource-based policy 的部分中。如果您不确定它在控制台中的位置,您是否尝试过在答案中运行 AWS CLI 命令来检索它?
    猜你喜欢
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2014-08-15
    • 2018-02-23
    • 2013-10-30
    相关资源
    最近更新 更多