本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Lambda 中使用資源型政策
透過以資源為基礎的許可政策,您可以授予其他 AWS 帳戶使用者、組織和 Lambda 函數的 AWS 服務 存取權。資源型政策是包含一或多個陳述式的 JSON 文件。每個陳述式定義下列項目:
-
Principal:您想要授予許可的實體 (另一個 AWS 服務、IAM 角色或使用者,或其他 AWS 帳戶) -
Action:您要允許或拒絕指定委託人的 API 動作清單 -
Effect:您是否要允許或拒絕委託人使用所選 API 動作的能力 -
Resource:您要套用陳述式的 Lambda 函數、版本或別名 (您也可以使用萬用字元來指定函數的所有版本和別名)
您也可以使用選用的元素,例如 Sid(陳述式識別符) 和 Condition(精細存取控制的邏輯條件)。如需支援政策元素的完整清單,請參閱《 AWS Identity and Access Management 使用者指南》中的 IAM JSON 政策元素參考。
將資源型許可新增至 Lambda 函數
您可以使用兩種方法,將資源型許可新增至 Lambda 函數:
-
完整 JSON 政策 – 使用 Lambda 主控台 AWS CLI或 PutResourcePolicy API 動作來新增完整的 JSON 政策文件。透過完整的 JSON 政策,您可以使用完整的 IAM 全域條件金鑰範圍、新增具有多個主體的多個陳述式,以及建立明確的
Deny陳述式。JSON 資源型政策的大小上限為 20 KB。 -
個別許可 – 使用主控台或 AddPermission API 動作來新增單一
Allow陳述式。個別許可僅支援一組有限的條件金鑰 (aws:SourceArn、aws:SourceAccount和aws:PrincipalOrgID)。
建議您定義完整的 JSON 政策,將資源型許可新增至函數。建立完整的 JSON 政策可讓您更靈活地控制許可。
重要
使用 會put-resource-policy取代資源上任何現有的資源型政策。如果資源已具有以 定義的許可add-permission, 會put-resource-policy覆寫它們。get-resource-policy 使用 在進行變更之前擷取現有的政策。
所需的許可
若要使用 PutResourcePolicy、 GetResourcePolicy和 DeleteResourcePolicy API 動作,您需要下列 IAM 許可:
| API 動作 | 所需的許可 |
|---|---|
| PutResourcePolicy | lambda:PutResourcePolicy、lambda:AddPermission 與 lambda:RemovePermission |
| GetResourcePolicy | lambda:GetResourcePolicy 和 lambda:GetPolicy |
| DeleteResourcePolicy | lambda:DeleteResourcePolicy 和 lambda:RemovePermission |
檢視函數的資源型政策
刪除函數的資源型政策
更新現有政策
當您更新函數的現有資源型許可時,行為取決於您使用的方法:
-
put-resource-policy/ PutResourcePolicy – 取代整個現有政策。任何先前新增的個別許可都會遭到覆寫。 -
add-permission/ AddPermission – 在不覆寫的情況下將陳述式新增至現有政策。如果您在add-permission之後呼叫put-resource-policy,新陳述式會附加到現有的 JSON 政策。
若要避免在使用 時意外覆寫現有的許可put-resource-policy,請先擷取函數的現有政策。get-resource-policy 輸出包含 RevisionId 欄位。
aws lambda get-resource-policy --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function
當您連接新政策時,請提供 參數RevisionId的值,--revision-id以確保您更新的是最新版本。如果您提供較舊的修訂 ID,Lambda 不會更新函數的政策。
aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function\ --policy file://policy.json \ --revision-ida1b2c3d4-5678-90ab-cdef-EXAMPLE11111
注意
使用 建立的現有資源型政策會AddPermission繼續運作,無需修改。使用新的 PutResourcePolicy API 不需要變更函數程式碼。
安全最佳實務
使用 JSON 資源型政策,您可以遵循最低權限的存取模式。您也可以符合明確拒絕的法規要求。使用完整的 JSON 政策,您可以:
-
建立明確
Deny陳述式以封鎖特定主體或條件。 -
使用組織條件 (
aws:PrincipalOrgID、aws:PrincipalOrgPaths) 來限制對 Organizations 的存取,而無需列舉個別帳戶。 -
使用完整的 IAM 全域條件金鑰範圍特定來源帳戶或 ARNs 的許可。
以資源為基礎的政策範例
範例使用拒絕陳述式將許可授予 Amazon S3
下列政策會授予帳戶中的所有 Amazon S3 儲存貯體呼叫 函數的許可,明確拒絕的儲存貯體除外。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-s3", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" } } }, { "Sid": "deny-s3-bucket", "Effect": "Deny", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-east-2:111122223333:function:my-function", "arn:aws:lambda:us-east-2:111122223333:function:my-function:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket" } } } ] }
範例將許可授予組織中的帳戶
下列政策會授予 叫用 組織中所有 AWS 帳戶 的存取權。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "org-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-a1b2c3d4e5f" } } } ] }
範例將許可授予具有條件的多個 IAM 角色
下列政策授予兩個 IAM 角色使用指定 IP 地址中 CreateAlias 動作的許可。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-roles", "Effect": "Allow", "Action": "lambda:CreateAlias", "Principal": { "AWS": [ "arn:aws:iam::444455556666:role/role-name", "arn:aws:iam::444455556666:role/role-name2" ] }, "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "IpAddress": { "aws:SourceIp": "192.0.2.0" } } } ] }
範例除非發起人是指定組織的一部分,否則拒絕存取
{ "Version": "2012-10-17", "Statement": [ { "Sid": "deny-access", "Effect": "Deny", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAllValues:StringNotLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } }, { "Sid": "allow-access", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Principal": "*", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:my-function", "Condition": { "ForAnyValue:StringLike": { "aws:PrincipalOrgPaths": [ "o-a1b2c3d4e5/r-ab12/ou-ab12-11111111/*" ] } } } ] }
支援的 API 動作
下列 Lambda API 動作支援資源型政策:
-
InvokeFunctionUrl (僅限許可)