本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
授予 Lambda 函數對其他帳戶的存取權
若要與另一個 共用函數 AWS 帳戶,請將跨帳戶許可陳述式新增至函數的資源型政策。建議使用 put-resource-policy來建立完整的 JSON 政策。使用 put-resource-policy,您可以指定多個主體、新增條件和建立拒絕陳述式。您也可以將 add-permission用於簡單的使用案例。
重要
使用 會put-resource-policy取代資源上任何現有的資源型政策。如果資源已具有以 定義的許可add-permission, 會put-resource-policy覆寫它們。get-resource-policy 使用 在進行變更之前擷取現有的政策。
使用完整的 JSON 政策 (建議)
下列範例政策授予兩個叫用 函數的 AWS 帳戶 許可,其中一個僅限於特定 IAM 角色:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-invoke", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:role/cross-account-role" ] }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function" } ] }
將政策儲存至名為 的檔案policy.json並套用。resource-arn 可以指定函數、版本或別名:
aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function\ --policy file://policy.json
您也可以使用別名限制對特定版本的跨帳戶存取。下列政策僅授予透過prod別名叫用存取權:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-account-prod-alias", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function:prod" } ] }
將此政策儲存至名為 的檔案,alias-policy.json並將其套用至別名:
aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function:prod\ --policy file://alias-policy.json
以資源為基礎的政策會授予其他帳戶存取函數的許可,但不允許該帳戶中的使用者超過其許可。另一個帳戶中的使用者必須具有相對應的使用者許可才能使用 Lambda API。
您可以為在現有函式上操作之大部分 API 動作授予跨帳戶存取。例如,您可以授予對 lambda:ListAliases 的存取,來讓帳戶取得別名的清單,或 lambda:GetFunction 讓他們下載函式程式碼。
若要授予其他帳戶多個動作或是不在函數上操作之動作的許可,我們建議您請使用 IAM 角色。
使用 add-permission
對於簡單的使用案例,您可以使用 add-permission 來新增個別陳述式。下列範例會授予帳戶my-function使用別名叫用 prod 的111122223333許可:
aws lambda add-permission \ --function-name my-function:prod\ --statement-id xaccount \ --action lambda:InvokeFunction \ --principal111122223333\ --output text
您應該會看到下列輸出:
{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-1:123456789012:function:my-function"}
注意
如果您在 add-permission之後呼叫 put-resource-policy,新陳述式會附加到現有的 JSON 政策。
若要限制另一個帳戶中使用者或角色的存取,請指定身分的完整 ARN 作為主體。例如 arn:aws:iam::123456789012:user/developer。