2017-08-21 44 views
1

我們有這個需求來自鋼筆測試。我有一個lambda函數說「add_address」和角色「account_management_role」。如何通過給定的lambda函數來設定角色?

我想使「account_management_role」只能通過「add_address」lambda函數來保證。我不希望任何其他的lambda函數承擔這個角色。

我嘗試了不同的事情,我嘗試在IAM角色的「信任關係」中添加此條目。這沒有奏效。

任何人有任何想法如何得到這個工作?

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "Service": "lambda.amazonaws.com" 
     }, 
     "Action": "sts:AssumeRole", 
     "Condition": { 
     "ArnEquals": { 
      "aws:SourceArn": "<ARN of lambda function>" 
     } 
     } 
    } 
    ] 
} 

回答

1

@nagalakshmi從第一段的給定鏈路http://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html他們清楚地提到它不支持。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "CreateFunctionPermissions", 
      "Effect": "Allow", 
      "Action": [ 
       "lambda:CreateFunction" 
      ], 
      "Resource": "*" 
     }, 
     { 
      "Sid": "PermissionToPassAnyRole", 
      "Effect": "Allow", 
      "Action": [ 
       "iam:PassRole" 
      ], 
      "Resource": "arn:aws:iam::account-id:role/*" 
     } 
    ] 
} 

從AWS文檔

的政策有兩種說法:

爲AWS LAMBDA行動的第一個語句授予的權限:在資源(拉姆達CreateFunction)通過使用亞馬遜的資源名稱(ARN)用於Lambda函數。 目前,AWS Lambda不支持在資源級別執行此特定操作的權限。因此,策略指定通配符(*)作爲資源值。


第二條語句爲IAM角色授予IAM操作(iam:PassRole)的權限。資源值末尾的通配符()表示該語句允許任何IAM角色的iam:PassRole操作權限。要將此權限限制爲特定角色,請將資源ARN中的通配符()替換爲特定角色名稱。

在上述文檔中他們提到的聲明目前不支持資源級別的權限。

所以他們可能有功能請求。

+0

是有道理的。這就是我們現在正在做的。看起來像增加條件來限制誰可以承擔角色不按預期工作。 –

0

創建角色X並附着到功能lambda函數甲。然後,我創建新拉姆達函數B具有相同作用X.我有以下錯誤

「的配置選項卡未能挽回理由:你的角色還沒有準備好,或者無法通過拉姆達假設請等待最多一分鐘,然後再試一次。「

以下是相同的信任關係策略。 請檢查您的lambda ARN。

{ 
     "Version": "2012-10-17", 
     "Statement": [ 
     { 
      "Effect": "Allow", 
      "Principal": { 
      "Service": "lambda.amazonaws.com" 
      }, 
      "Action": "sts:AssumeRole", 
      "Condition": { 
      "ArnEquals": { 
       "aws:SourceArn": "arn:aws:lambda:us-east-1:xxxxxxxxx:function:lambdatest" 
      } 
      } 
     } 
     ] 
    } 
+0

問題是甚至Lambda函數A無法承擔角色X.我得到了同樣的錯誤。 「配置選項卡保存失敗原因:您的角色尚未準備好,或者無法由Lambda承擔,請等待一分鐘後再試。」這一點並不一致。它在等待幾個小時後停止工作。 –

0

看起來像是一個錯誤。這是我用AWS支持團隊創建的票證得到的回覆。 貌似只有這樣,才能限制誰可以承擔的作用是限制它通過改變用戶級訪問

塊引用 我繼續嘗試你想一個lambda函數中實現的限制,但我們無法使其正常工作;我們進行了一系列測試以確定結果,並且我們的測試失敗了,因爲我們無法將特定函數指定爲承擔角色的條件。這是因爲最初的角色假設是由Lambda服務本身執行的,甚至沒有尋找它想要調用的函數。我通過向'StringLike'添加'IfExists'修飾符來發現這一點:它告訴IAM在AssumeRole請求中檢查這個特定的特徵,但是如果它不存在,則忽略該條件並繼續。該函數不適用於特定的條件集,即使提供了確切的ARN,它仍然失敗。但是,在添加IfExists之後,該函數可以工作......但是另一個不相關的函數試圖利用該角色。這意味着Lambda函數ARN在Lambda服務承擔角色之前未被檢查。 Blockquote 在您調用某個函數時,您隱式信任AWS Lambda服務承擔角色並完全按照所述執行函數。因此,您的信任關係不是應該修改的;相反,如果要限制特定函數具有的訪問權限,則應限制IAM實體在調用該實體時調用該實體,因爲角色由於具有足夠的iam的實體而被傳遞:PassRole權限將特定角色傳遞給Lambda服務, Lambda然後用來調用該函數。下面的文件顯示瞭如何IAM限制的例子:PassRole到特定角色或只設置角色:http://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html

+0

嗨nagalakshmi昨天第一次我嘗試通過使用IAM:passrole,但它不適用於您的使用情況。如果您在這裏找到解決方案更新 –

相關問題