对于IAM用户上的lambda ListFunctions的AWS AccessDeniedException

时间:2017-05-15 18:47:22

标签: amazon-web-services lambda aws-lambda amazon-iam access-denied

预备注意:我通过IAM用户控制台帐户执行所有AWS配置,该帐户基本上具有AWS / Amazon帐户所有者的所有权限。我将此IAM用户称为 root 帐户。

问题描述:

  • 我从 root 帐户创建了以下IAM用户 仅程序化访问: lambda-test
  • 我在〜/ .aws / * 文件中添加了IAM访问密钥(作为个人资料条目)。
  • 现在,对于 lambda-test 帐户,我接下来创建了一个允许以下AWS-Lamdba操作的内联/嵌入式策略: ListFunctions,GetFunction,UpdateFunctionCode,UpdateFunctionConfiguration < / LI>

政策声明 - 经过正确验证 - 如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1111111111111",  # <--- Altered for this post.
            "Effect": "Allow",
            "Action": [
                "lambda:GetFunction",
                "lambda:ListFunctions",
                "lambda:UpdateFunctionCode",
                "lambda:UpdateFunctionConfiguration"
            ],
            "Resource": [
                "arn:aws:lambda:*"
            ]
        }
    ]
}

回到笔记本电脑CLI,我发出以下命令,该命令会生成一个AccessDeniedException:

user@linux$ aws lambda list-functions --profile lambda-test

以下是例外:

An error occurred (AccessDeniedException) when calling the ListFunctions operation: User: arn:aws:iam::<AWS-Account-ID>:user/lambda-test is not authorized to perform: lambda:ListFunctions

我错过了什么吗? (当然我做了。= :)) 提前谢谢!

2 个答案:

答案 0 :(得分:3)

您可以在AWS lambda中使用两种类型的访问策略:

1)基于身份的策略(IAM策略) 您正在使用的是IAM政策。如果您阅读此AWS lambda access control overview documentation,那么当您使用基于IAM的访问时,AWS现在仅支持*作为资源。因为“lambda:ListFunctions”不能用完整的ARN调用(可以使用FULL arn调用this documentation并且可以用*调用它),你需要给*。

  

在当前实现中,Lambda不支持使用资源ARN(也称为资源级权限)为某些API操作标识特定资源,因此您必须指定通配符(*)。

2)基于资源的策略(Lambda函数策略)

  

每个Lambda函数都可以具有与之关联的基于资源的权限策略。对于Lambda,Lambda函数是主要资源,这些策略称为Lambda函数策略。您可以使用Lambda函数策略授予跨帐户权限,以替代使用具有IAM角色的基于身份的策略。例如,您可以通过简单地向Lambda函数策略添加权限而不是创建IAM角色来授予Amazon S3权限来调用Lambda函数。

更多examples are here

答案 1 :(得分:0)

不是OP的问题,而是Google遇到的其他问题:
确保已为正在使用的IAM用户启用控制台登录。 可以在IAM->用户->(选择用户)->安全凭证下设置