本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Lambda Web 函數許可
Lambda Web Functions 使用 AWS Identity and Access Management (IAM) 來控制您的應用程式程式碼可執行的操作 (執行角色),以及誰可以存取您的 Web Function (以資源為基礎的政策)。此頁面說明如何設定每種類型。
-
執行角色 – Web 函數程式碼擔任的 IAM 角色,用於存取 Amazon CloudWatch Logs、DynamoDB 或 Amazon S3 等 AWS 服務。
-
資源型政策 – 連接至 Web 函數的政策。它定義哪些 IAM 主體 AWS 或服務可以執行 Web 函數動作,例如叫用身分驗證類型為 的端點
IamAuth,這表示 Lambda 使用 IAM 驗證請求。如需詳細資訊,請參閱身分驗證類型。另一個帳戶中的 IAM 主體也需要以身分為基礎的許可。
下圖顯示需要許可的身分,以及每個需要許可的用途。部署器會呼叫 Lambda 管理動作,並iam:PassRole需要執行角色。程式碼上傳程式s3:PutObject需要版本控制的 Amazon S3 儲存貯體,Lambda 會讀取程式碼物件版本。Lambda 可以使用選用的客戶受管 AWS KMS 金鑰來加密 Web 函數程式碼和環境變數。您的程式碼使用 執行角色執行,這會授予對 Amazon CloudWatch Logs 和您的相依性的存取權。端點發起lambda:InvokeWebFunctionEndpoint人需要IamAuth端點,或ApplicationManaged端點的應用程式登入資料。
執行角色
執行角色是 Lambda 在執行 Web 函數程式碼時擔任的 IAM 角色。您的應用程式會使用此角色的許可與其他 AWS 服務互動。您的 Web 函數至少需要將日誌寫入 Amazon CloudWatch Logs 的許可,才能監控您的應用程式。如果您的應用程式從 DynamoDB 讀取、寫入 Amazon S3 或呼叫其他 AWS 服務,您可以將這些許可新增至執行角色。
建立執行角色
若要為您的 Web 函數建立執行角色,請建立具有信任政策的 IAM 角色,允許 Lambda 服務主體擔任該角色,並連接許可政策,以授予您應用程式所需的存取權。
建立執行角色 (AWS CLI)
-
trust-policy.json使用下列信任政策建立名為 的檔案。此政策允許 Lambda 服務主體代表您擔任該角色。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } -
建立角色。
aws iam create-role \ --role-namemy-web-function-role\ --assume-role-policy-document file://trust-policy.json -
連接 AWS Lambda 基本執行角色受管政策。此政策授予許可,以建立日誌群組、日誌串流和將日誌事件寫入 Amazon CloudWatch Logs。
aws iam attach-role-policy \ --role-namemy-web-function-role\ --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
如果您偏好建立自訂許可政策,而不是使用 受管政策,則 Web 函數記錄所需的最低許可為:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/web/my-web-app:*", "arn:aws:logs:*:111122223333:log-group:/aws/lambda/web/my-web-app.local:*" ] } ] }
此政策涵蓋兩個日誌群組。Lambda 會將區域內日誌寫入.local日誌群組,然後將它們集中到日誌群組中,而不需要主區域中的字尾。集中式日誌群組 ARN 使用主區域。.local ARN 使用區域萬用字元,因為 Lambda 會在端點提供流量的每個區域中寫入該群組。這可讓一個執行角色支援具有不同區域集的端點。如果角色無法寫入區域中的.local日誌群組,Lambda 不會從該區域交付日誌。如果您使用自訂日誌群組,請將這兩個 ARNs 取代為您的日誌群組名稱和日誌群組名稱,後面接著 .local。如需詳細資訊,請參閱日誌群組。
新增其他服務的許可
如果您的應用程式存取其他 AWS 服務,請將對應的許可新增至執行角色。下列範例新增對 DynamoDB 資料表的讀取存取權和對 Amazon S3 儲存貯體的寫入存取權。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:log-group:/aws/lambda/web/my-web-app:*", "arn:aws:logs:*:111122223333:log-group:/aws/lambda/web/my-web-app.local:*" ] }, { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:Query" ], "Resource": "arn:aws:dynamodb:us-east-1:111122223333:table/my-table" }, { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::my-output-bucket/*" } ] }
建立 Web 函數或修訂的 IAM 身分會使用自己的許可,而不是執行角色。該身分在執行角色lambda:CreateWebFunctionRevisioniam:PassRole上需要 lambda:CreateWebFunction或 ,以及對 Amazon S3 中部署套件的讀取存取權。如需 Amazon S3 許可,請參閱 來電者許可。如果您使用客戶受管金鑰來加密 Web 函數程式碼和環境變數,則該身分也需要 AWS KMS 許可。如需詳細資訊,請參閱Web 函數的靜態加密。
資源型政策
資源型政策是您連接到 Web 函數的 JSON 政策文件。除了 lambda:CreateWebFunction IAM 主體 AWS 或服務之外,它可以授予任何 Web 函數動作。例如,它可以lambda:InvokeWebFunctionEndpoint授予 IamAuth端點。它也可以授予管理動作,例如 lambda:GetWebFunction、 lambda:CreateWebFunctionRevision和 lambda:UpdateWebFunctionEndpoint。
政策附件及其陳述式使用不同的資源 ARNs:
-
Web 函數 ARN – 將此 ARN 與
PutResourcePolicy、GetResourcePolicy和 搭配使用DeleteResourcePolicy,並在 陳述式的Resource元素中授予 Web 函數本身的動作,例如lambda:GetWebFunction、lambda:CreateWebFunctionRevision或lambda:CreateWebFunctionEndpoint。例如arn:aws:lambda:us-east-1:111122223333:web-function/my-function。對於現有端點上的動作,例如lambda:UpdateWebFunctionEndpoint,請使用端點 ARN。對於現有修訂的動作,例如lambda:DeleteWebFunctionRevision,請使用修訂 ARN。若要涵蓋 Web 函數的所有端點,請使用arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/*。 -
端點 ARN – 在授予 的政策陳述式的
Resource元素中使用此 ARNlambda:InvokeWebFunctionEndpoint。例如arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod。
對於相同帳戶中的 IAM 主體,主體的身分型政策或 Web 函數的資源型政策可以授予許可。對於另一個帳戶中的 IAM 主體,這兩個政策都必須授予許可。這同時適用於叫用和管理動作。
若要根據 Web 函數的標籤允許或拒絕動作,請使用屬性型存取控制 (ABAC)。如需支援的條件金鑰,請參閱 標記 Web 函數。
注意
Web 函數不支援 AddPermission、 RemovePermission或 GetPolicy。使用 PutResourcePolicy、 GetResourcePolicy和 管理政策DeleteResourcePolicy。
在下列情況下使用資源型政策:
-
您想要將調用存取權授予不同 AWS 帳戶 (跨帳戶調用) 中的委託人。
-
您想要授予叫用存取 AWS 服務的權限,例如 CloudFront。
-
您想要讓另一個 中的委託人 AWS 帳戶 管理 Web 函數,例如建立修訂或更新端點。
-
對於相同帳戶調用,您無法修改發起人的 IAM 政策 (例如,當發起人由另一個團隊管理時)。
不允許公有政策
您無法將公有資源型政策連接至 Web 函數。如果政策是公有的,請求會失敗並顯示 ValidationException。
在本節中,公有描述一個政策,授予對一組未指定委託人的存取權。它不會描述端點的網路可存取性或身分驗證類型。
使政策公開的原因
除非政策將可呼叫資源的人員限制為一組指定的委託人,否則政策為公有政策。Lambda 假設政策是公有的,然後評估其是否符合非公有條件。如果政策允許任何 AWS 客戶可以擔任的委託人,則政策為公有。最常見的案例是不受限制的萬用字元主體,如下列範例所示。Lambda 使用 拒絕此政策ValidationException。請勿使用它。
{ "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-west-2:123456789012:web-function/my-web-function/endpoint/prod" }
下列限制不會將政策設為非公有:
-
IP 地址條件。縮小
aws:SourceIp至 CIDR 範圍還不夠。 -
聯合委託人。命名聯合身分提供者的
Principal區塊不會限制對一組指定良好的身分的存取。 -
描述資源的條件索引鍵。端點的身分驗證類型等金鑰會描述資源的設定方式,而不是呼叫的人員,因此無法限制委託人。
有兩種方式可將政策設為非公有。
在主體區塊中指定主體
在 Principal區塊中列出一或多個完全指定的主體。這些值不得包含萬用字元或政策變數。主體數量並不重要。
{ "Effect": "Allow", "Principal": { "AWS": [ "123456789012", "111122223333" ] }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-west-2:123456789012:web-function/my-web-function/endpoint/prod" }
另一個帳戶中的 IAM 主體也需要身分型許可,才能叫用端點。
使用信任的條件金鑰
將下列其中一個條件索引鍵限制為固定值。這些金鑰可識別已驗證的發起人,且無法由請求者設定。
aws:PrincipalAccountaws:PrincipalArnaws:PrincipalOrgIDaws:PrincipalOrgPathsaws:SourceAccountaws:SourceArnaws:SourceOrgIDaws:SourceOrgPathsaws:SourceVpcaws:SourceVpcArnaws:SourceVpceaws:VpceAccountaws:VpceOrgIDaws:VpceOrgPathsaws:Ec2InstanceSourceVpcaws:UserIdaws:PrincipalServiceNameaws:PrincipalServiceNamesListaws:PrincipalIsAWSServicelambda:SourceFunctionArn
自行命名信任的金鑰並不足夠。您還必須限制 值:
-
字串值不得包含萬用字元或政策變數。
-
ARN 值不得在 ARN 的前五個欄位中包含萬用字元或政策變數:
arn、分割區、服務、區域和帳戶 ID。允許資源部分中的萬用字元。 -
aws:PrincipalIsAWSService必須設定為true。
下列政策會授予組織中的主體叫用端點所需的資源型許可,且不會視為公有。另一個帳戶中的 IAM 主體也需要以身分為基礎的許可。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowOrgAccess", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-west-2:123456789012:web-function/my-web-function/endpoint/prod", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-a1b2c3d4e5" } } } ] }
跨帳戶存取權
下列資源型政策會授予另一個帳戶中的特定 IAM 角色許可,以叫用 Web 函數的一個端點。此角色也需要身分型許可,才能叫用端點。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCrossAccountInvoke", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/caller-role" }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod" } ] }
若要讓跨帳戶調用成功,下列所有項目都必須為 true:
-
發起人的身分型政策會授予端點 ARN 的
lambda:InvokeWebFunctionEndpoint許可。 -
Web 函數上的資源型政策會授予發起人許可 (如上所示)。
-
端點使用
IamAuth身分驗證,以便 Lambda 評估發起人的登入資料。
授予 AWS 服務的存取權
下列資源型政策授予 CloudFront 服務主體叫用 Web 函數的許可。當您使用 Web 函數端點做為原始伺服器來設定 CloudFront 分佈時,請使用此政策。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontInvoke", "Effect": "Allow", "Principal": { "Service": "cloudfront.amazonaws.com" }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:cloudfront::111122223333:distribution/EDFDVBD6EXAMPLE" } } } ] }
aws:SourceArn 條件限制對特定 CloudFront 分佈的存取。如果沒有此條件,任何帳戶中的任何 CloudFront 分佈都可以叫用您的 Web 函數。
複寫和最終一致性
當您在具有 MultiRegion 或 PerRegion 端點的 Web 函數上連接或更新資源型政策時,Lambda 會將政策複寫到 AWS 區域 端點操作的所有複本。此複寫最終一致。
在複寫時段期間,Lambda 可能會根據舊版政策評估複本區域中的請求。這表示:
-
新增的許可可能不會立即在所有區域中生效。
-
在複寫完成之前,Lambda 可能仍會遵守某些區域中最近移除的許可。
政策複寫沒有客戶可見的完成訊號。在依賴新政策之前,測試每個端點區域中預期的允許或拒絕行為。對於緊急遏制,更新流量路由,或將端點的 throttleConfig.rateLimit 設定為 0 在政策變更傳播時封鎖所有流量。如需詳細資訊,請參閱限流。
對於 HomeRegion 端點,政策僅適用於主要區域,不需要跨區域複寫。變更仍可能需要很短的時間才會生效。
設定聯網的許可
設定聯網的身分需要建立或更新相關 Lambda 資源的許可。它還需要許可才能傳遞所需的角色和連接器。視 操作而定,許可包括:
lambda:CreateNetworkConnectorlambda:UpdateNetworkConnectorlambda:GetNetworkConnectorlambda:CreateWebFunctionlambda:CreateWebFunctionRevisionlambda:UpdateWebFunctionEndpointlambda:PassNetworkConnectoriam:PassRole
每當 create-web-function或 create-web-function-revision 呼叫集 時,發起人必須在參考的連接器lambda:PassNetworkConnector上具有 egressNetworkConnectorArn。將此許可範圍限定為核准的連接器資源。範圍iam:PassRole為您在建立 Web 函數或修訂時傳遞的核准執行角色,以及您在建立或更新網路連接器時傳遞的核准運算子角色。如需 運算子角色許可政策,請參閱 運算子角色許可。