![](/img/trans.png)
[英]Error code: AccessDeniedException. User: arn:aws:iam::xxx:user/xxx is not authorized to perform: lambda:CreateEventSourceMapping on resource: *
[英]AWS AccessDeniedException for lambda ListFunctions on a IAM user
注意:我通過一個IAM用戶控制台帳戶執行所有AWS調配,該帳戶本質上具有AWS / Amazon帳戶所有者的所有特權。 我將這個IAM用戶稱為根帳戶。
問題說明:
正確驗證的政策聲明如下所示:
{
"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
我錯過了什么? (我當然做到了。= :))在此先感謝!
您可以對AWS lambda使用兩種類型的訪問策略:
1)基於身份的策略(IAM策略)您正在使用的策略是IAM策略。 如果您閱讀此AWS lambda訪問控制概述文檔 ,那么在使用基於IAM的訪問時,AWS現在僅支持*作為資源。 因為不能用完整的ARN調用“ lambda:ListFunctions”(請參閱本文檔 , 該文檔可以用FULL arn調用,而可以用*調用),因此您需要指定*。
在當前實現中,Lambda不支持使用某些API操作的資源ARN(也稱為資源級權限)來標識特定資源,因此必須指定通配符(*)。
2)基於資源的策略(Lambda功能策略)
每個Lambda函數都可以具有與之關聯的基於資源的權限策略。 對於Lambda,Lambda函數是主要資源,這些策略稱為Lambda函數策略。 您可以使用Lambda函數策略來授予跨帳戶權限,這可以替代使用具有IAM角色的基於身份的策略。 例如,您可以通過簡單地向Lambda函數策略添加權限而不是創建IAM角色來授予Amazon S3調用Lambda函數的權限。
還有更多的例子在這里
不是OP的問題,而是Google遇到的其他問題:
確保已為正在使用的IAM用戶啟用控制台登錄。 可以在IAM->用戶->(選擇用戶)->安全憑證下設置
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.