【问题标题】:Error creating IAM Role: MalformedPolicyDocument: Has prohibited field Resource创建 IAM 角色时出错:MalformedPolicyDocument:已禁止字段资源
【发布时间】:2020-04-22 12:08:02
【问题描述】:

我正在尝试创建一个 Lambda 角色并将其附加一个策略以允许所有 ElasticSearch 集群操作。

下面是代码 -

resource "aws_iam_role" "lambda_iam" {
  name = "lambda_iam"
  assume_role_policy = <<EOF
  {
    "Version": "2012-10-17",
    "Statement": [{
            "Action": [
                "es:*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }]
  }
EOF
}

resource "aws_lambda_function" "developmentlambda" {
  filename      = "lambda_function.zip"
  function_name = "name"
  role          = "${aws_iam_role.lambda_iam.arn}"
  handler       = "exports.handler"

  source_code_hash = "${filebase64sha256("lambda_function.zip")}"

  runtime = "nodejs10.x"
}

我收到以下错误

Error creating IAM Role lambda_iam: MalformedPolicyDocument: Has prohibited field Resource

关于资源的 Terraform 文档说您可以为所有用户指定一个“*”。 Principal 字段也不是强制性的,所以这不是问题。 我还是改成

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "es.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}

但那是说 -

Error creating Lambda function: InvalidParameterValueException: The role defined for the function cannot be assumed by Lambda.

我的 lambda 函数定义很简单

resource "aws_lambda_function" "development_lambda" {
  filename      = "dev_lambda_function.zip"
  function_name = "dev_lambda_function_name"
  role          = "${aws_iam_role.lambda_iam.arn}"
  handler       = "exports.test"

  source_code_hash = "${filebase64sha256("dev_lambda_function.zip")}"

  runtime = "nodejs10.x"
}

lambda 文件本身没有任何内容,但我不知道这是否解释了错误。

这里有什么我遗漏的吗?

【问题讨论】:

    标签: aws-lambda terraform amazon-iam


    【解决方案1】:

    担任角色政策是角色的信任政策(允许担任角色),而不是角色的权限政策(什么权限角色授予假设实体)。

    Lambda 执行角色需要这两种类型的策略。

    即时错误,即 “Lambda 无法承担为函数定义的角色” 正在发生,因为它需要 "Principal": {"Service": "lambda.amazonaws.com"},而不是 es.amazonaws.com - 这在权限策略中。我不使用 terraform,但它看起来可能是基于 https://www.terraform.io/docs/providers/aws/r/lambda_function.htmlresource "aws_iam_policy",我认为这是您正在使用的参考。

    【讨论】:

    • 是的,这就是我的工作。允许 lambda 函数的所有弹性搜索操作权限的最佳方法是什么?这就是我在这里尝试做的。任何帮助将不胜感激。
    • 我不久前写了这个答案,这可能有助于提供一些关于“承担角色政策”如何适应大局的额外背景:stackoverflow.com/a/44658378/281848
    • 谢谢@MartinAtkins。这有帮助。
    猜你喜欢
    • 2017-11-17
    • 2020-09-10
    • 2021-09-26
    • 2020-11-15
    • 2020-11-30
    • 2017-11-02
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多