预备注意:我通过IAM用户控制台帐户执行所有AWS配置,该帐户基本上具有AWS / Amazon帐户所有者的所有权限。我将此IAM用户称为 root 帐户。
问题描述:
政策声明 - 经过正确验证 - 如下所示:
{
"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
我错过了什么吗? (当然我做了。= :)) 提前谢谢!
答案 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函数。
答案 1 :(得分:0)
不是OP的问题,而是Google遇到的其他问题:
确保已为正在使用的IAM用户启用控制台登录。
可以在IAM->用户->(选择用户)->安全凭证下设置