lambda:InvokeFunction 不适用于所有资源集

Mil*_*dia 5 amazon-web-services aws-lambda

我正在为我用来运行 Lambda 函数的用户角色之一制定访问策略。我有这个:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeInstances",
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我知道将我的资源设置*为不是最佳实践,但我只是想在我缩小它的最锁定版本之前让它工作。

当我测试我的 lambda 函数时,它说:

ClientError: An error occurred (AccessDeniedException) when calling the Invoke operation: User: arn:aws:sts::{NUMBERS}:assumed-role/{ROLE_NAME}/awslambda_{NUMBERS}_{NUMBERS} is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-east-1:{NUMBERS}:function:{FUNCTION_NAME}
Run Code Online (Sandbox Code Playgroud)

我显然用大括号和单词掩盖了上面的一些内容,但上面的 ROLE_NAME 与我正在编辑策略的角色名称相匹配。我不确定为什么会失败。我已经尝试过像这样的资源:

arn:aws:lambda:*:*:*:*
arn:aws:lambda:*:*:*
Run Code Online (Sandbox Code Playgroud)

那些不起作用。所以我尝试了非常广泛的尝试,我试图缩小它,但没有任何效果。我还需要做些什么才能让它们坚持下去?我在一个屏幕上打开了 IAM 策略窗口,在另一个屏幕上打开了 lambda,所以我在更新策略后立即进行测试,但我也完全注销并重新登录以查看是否有问题。那没有解决它。

有任何想法吗?

Bel*_*izy 4

我不久前做过这个。这是我的笔记里的。当然账户支票还在。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["lambda:InvokeFunction"],
      "Effect": "Allow",
      "Resource": "arn:aws:lambda:*:*:*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

您还可以尝试 AWS 控制台中的 IAM 策略模拟器页面。您可以选择操作和资源,看看它是否成功。乍一看,解释有时很混乱,但很有帮助。