簡體   English   中英

IAM用戶上的lambda ListFunctions的AWS AccessDeniedException

[英]AWS AccessDeniedException for lambda ListFunctions on a IAM user

注意:我通過一個IAM用戶控制台帳戶執行所有AWS調配,該帳戶本質上具有AWS / Amazon帳戶所有者的所有特權。 我將這個IAM用戶稱為帳戶。

問題說明:

  • 我從root帳戶創建了以下IAM用戶,該用戶僅具有編程訪問權限: lambda-test
  • 我在〜/ .aws / *文件中添加了IAM訪問密鑰(作為配置文件條目)。
  • 現在到該lambda測試帳戶,我接下來創建了一個內聯/嵌入式策略,該策略允許以下AWS-Lamdba操作: ListFunctions,GetFunction,UpdateFunctionCode,UpdateFunctionConfiguration

正確驗證的政策聲明如下所示:

{
    "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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM