本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Lambda Web 函數端點存取控制
您可以使用AuthType您在每個端點上設定的 來控制對 AWS Lambda Web 函數端點的存取。根據身分驗證類型,您也可以將資源型政策連接至 Web 函數,以控制誰可以叫用端點。
設定端點時,您可以指定下列其中一個AuthType選項:
IamAuth-
使用此身分驗證類型時,Lambda 會使用 AWS Identity and Access Management (IAM) 根據發起人的身分政策和 Web 函數的資源型政策來驗證和授權請求。發起人會直接使用 AWS Signature 第 4 版 (SigV4) 或 Signature 第 4a 版 (SigV4a) 為
MultiRegion端點簽署請求,或者使用 Amazon CloudFront AWS 服務 等在端點前面代表他們簽署請求 (請參閱 CloudFront 整合)。如果您希望 Lambda 在端點上強制執行 IAM 型存取控制,請選擇此選項。 ApplicationManaged-
Lambda 不會驗證或授權請求。每個請求都會到達您的函數,而您的函數程式碼會負責任何身分驗證。針對公有端點或在您自己的程式碼中處理身分驗證時,選擇此選項。
叫用端點的 IAM 動作是 lambda:InvokeWebFunctionEndpoint。
您可以在建立端點 (create-web-function-endpoint) 時,使用 --auth-type 參數設定端點的身分驗證類型,之後可以使用 進行變更update-web-function-endpoint。如需建立命令,請參閱 建立端點。如需您可以變更的屬性,請參閱 更新端點。
使用IamAuth身分驗證類型
如果您選擇IamAuth身分驗證類型,呼叫者必須使用 SigV4 (MultiRegion端點的 SigV4a) 簽署每個請求,並且必須允許 叫用端點。根據提出請求的人員,您可以使用 Web 函數上的資源型政策、發起人上的身分型政策或兩者來授予此許可。
如果呼叫者與 Web 函數 AWS 帳戶 位於相同位置,則可以lambda:InvokeWebFunctionEndpoint透過身分型政策或函數的資源型政策來授予呼叫者。如果發起人位於不同的 帳戶中,他們需要以身分為基礎的政策來授予 動作,以及在 函數上以資源為基礎的政策來允許他們。
以資源為基礎的政策會連接到 Web 函數,但每個陳述式都可以將 範圍Resource限定在特定端點 ARN。下列資源型政策允許 帳戶中InvokeRole的角色222233334444叫用 的prod端點my-function:
範例跨帳戶資源型政策
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222233334444:role/InvokeRole" }, "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod" } ] }
若要連接以資源為基礎的政策,請使用 put-resource-policy搭配 函數 ARN (而非端點 ARN):
aws lambda-web put-resource-policy \ --resource-arn "arn:aws:lambda:us-east-1:111122223333:web-function/my-function" \ --policy file://policy.json \ --region us-east-1
您可以使用 get-resource-policy和 檢閱或移除政策delete-resource-policy。
Web 函數有一個以資源為基礎的政策,並予以put-resource-policy取代。若要新增陳述式,例如 中的 CloudFront 陳述式CloudFront 整合、使用 取得目前的政策get-resource-policy、將陳述式新增至其Statement陣列,以及revisionId使用 傳遞傳回的 --revision-id。如果有人在您讀取政策後變更政策,請求會失敗,ConflictException而不會覆寫其變更。
若要允許叫用函數的所有端點,請在資源 ARN 中使用萬用字元:
"Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/*"
將區域、帳戶 ID 和函數名稱取代為您自己的值。在最後保留 endpoint/* 。
將調用許可授予委託人
呼叫者需要lambda:InvokeWebFunctionEndpoint叫用端點。對於與 Web 函數相同帳戶中的發起人,在發起人以身分為基礎的政策中授予此動作已足夠。不需要以資源為基礎的政策。對於不同帳戶中的發起人,除了允許它們的 函數上的資源型政策之外,還需要此身分型政策。
將下列政策連接至將叫用端點的 IAM 角色或使用者:
範例用於叫用端點的身分型政策
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/my-function/endpoint/prod" } ] }
簽署請求
Lambda 不提供呼叫端點的專用 SDK。您可以使用服務名稱 傳送標準 HTTP 請求,並使用 SigV4 或 SigV4a 自行簽署lambda。注意下列事項:
-
每個已簽署的請求都必須包含
X-Amz-Content-SHA256標頭,包括沒有內文的請求。Lambda 驗證簽章時不會讀取請求內文,因此使用此標頭值做為承載雜湊。沒有請求的請求會遭到 拒絕403 Forbidden。 -
如果您未簽署內文 (例如,串流時),請使用 的常值
UNSIGNED-PAYLOADX-Amz-Content-SHA256。Lambda 不支援區塊式內文簽署。 -
Lambda 不會針對
X-Amz-Content-SHA256值檢查請求內文。簽章涵蓋標頭值,而非內文內容。如果您需要 TLS 以外的身體完整性保護,請在應用程式中實作。 -
區域端點 (
HomeRegion、PerRegion) 使用 SigV4 搭配端點的區域。MultiRegion端點使用 AWS Signature 第 4a 版 (SigV4a),該版本會簽署一組區域而非一個區域。使用區域集*。 -
如果
IamAuth請求傳回403 Forbidden,請檢查請求是否使用 SigV4 (或 SigV4a) 簽署、包含X-Amz-Content-SHA256標頭,並使用未過期的登入資料,以及您的政策是否允許lambda:InvokeWebFunctionEndpoint端點 ARN。
如需簽署請求的詳細資訊,請參閱簽署 AWS API 請求。
在 Lambda 驗證 SigV4 或 SigV4a 簽章之後,它會先移除 Authorization標頭,再將請求轉送到您的函數。如果您希望函數在IamAuth端點上接收 Authorization標頭,請透過 CloudFront 傳送請求,該 CloudFront 會代表您簽署這些請求 (請參閱 CloudFront 整合)。
CloudFront 整合
您可以使用 Amazon CloudFront 原始存取控制 (OAC),將 CloudFront 分佈放在IamAuth端點前面。使用 OAC,CloudFront 會代表檢視器簽署每個原始伺服器請求,因此呼叫者不會自行簽署請求。CloudFront 不會使用 Authorization標頭來簽署原始伺服器請求,因此可以將Authorization標頭傳遞至 函數。
Lambda 會移除本身為 AWS 簽章的任何Authorization值 (以 開頭的值AWS4-)。這可讓您在 CloudFront 簽署每個原始伺服器請求時保留應用程式的身分驗證 (例如 JWT 或 Cookie)。若要執行此作業,請將 分佈設定為轉送 Authorization標頭。如需詳細資訊,請參閱限制對 AWS 原始伺服器的存取。
端點網域仍可在網際網路上存取,Lambda 也接受來自政策允許之任何主體的直接簽署請求。
這需要端點的身分驗證類型為 IamAuth。使用原始伺服器類型 lambda和簽署行為 建立原始伺服器存取控制always-amz-auth。CloudFront 拒絕 Web 函數原始伺服器的其他簽署行為。
注意
Lambda 不會驗證對ApplicationManaged端點的請求,也不會評估 Web 函數的資源型政策。即使在 CloudFront 後方,這類端點仍可在自己的網域上公開連線。
若要允許 CloudFront 叫用端點,請將資源型政策連接至 Web 函數,以授予 CloudFront 服務主體 (cloudfront.amazonaws.com) 該lambda:InvokeWebFunctionEndpoint動作。使用 aws:SourceArn條件只允許您的特定分佈:
範例 CloudFront OAC 的資源型政策
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontOACAccess", "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": { "StringEquals": { "aws:SourceArn": "arn:aws:cloudfront::111122223333:distribution/<distribution-id>" } } } ] }
使用ApplicationManaged身分驗證類型
當端點的身分驗證類型為 時ApplicationManaged,具有端點網域的任何人都可以叫用您的 函數。Lambda 不會執行身分驗證或授權。
選擇您希望端點可公開連線ApplicationManaged的時間,例如,直接從 Web 瀏覽器提供請求。您也可以在自己的程式碼中處理身分驗證時加以選擇,例如 OAuth 2.0、OpenID Connect 或自訂權杖配置。
使用此身分驗證類型:
-
Lambda 允許所有呼叫者叫用端點。它不會評估這些請求的資源型政策。
-
Lambda 會將發起人的
Authorization標頭轉送到您的函數,以便您的程式碼可以驗證它。如果 標頭包含 AWS Signature 第 4 版 (SigV4) 簽章,Lambda 會將其與任何X-Amz-Security-Token標頭一起移除,以便 AWS 登入資料不會傳遞到您的函數程式碼。 -
您的函數負責所有身分驗證和授權。
注意
對於ApplicationManaged端點,Lambda 不會評估 Web 函數的資源型政策來叫用請求。您無法使用資源型政策來限制誰叫用ApplicationManaged端點。若要限制調用,請IamAuth改用 。以資源為基礎的政策仍然適用於管理動作。例如,它可以授予另一個帳戶更新端點的許可。如需詳細資訊,請參閱資源型政策。
控管和存取權控制
您可以控制誰可以設定端點。
Lambda 支援下列 IAM 動作來管理端點:
-
lambda:CreateWebFunction– 建立 Web 函數並設定其初始端點,包括其AuthType。 -
lambda:CreateWebFunctionEndpoint– 建立端點並設定其AuthType。 -
lambda:UpdateWebFunctionEndpoint– 更新端點,包括其AuthType。 -
lambda:GetWebFunctionEndpoint– 檢視端點的組態。 -
lambda:ListWebFunctionEndpoints– 列出 Web 函數的端點。 -
lambda:DeleteWebFunctionEndpoint– 刪除端點。
若要根據身分驗證類型允許或拒絕動作,請使用 條件金鑰。 lambda:Request/WebFunctionAuthType適用於 CreateWebFunction、 CreateWebFunctionEndpoint和 UpdateWebFunctionEndpoint。 lambda:Resource/WebFunctionAuthType 適用於 InvokeWebFunctionEndpoint(IamAuth端點)UpdateWebFunctionEndpoint、、 GetWebFunctionEndpoint和 DeleteWebFunctionEndpoint。如需詳細資訊,請參閱條件索引鍵。
限制組織中的公有端點
如果您管理 AWS 組織,並想要防止開發人員建立公有端點,請使用服務控制政策 (SCP),拒絕使用ApplicationManaged身分驗證類型建立或更新端點。使用 lambda:Request/WebFunctionAuthType條件索引鍵,反映請求中的身分驗證類型:
範例 SCP 拒絕公有端點
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "lambda:CreateWebFunction", "lambda:CreateWebFunctionEndpoint", "lambda:UpdateWebFunctionEndpoint" ], "Resource": "*", "Condition": { "StringEquals": { "lambda:Request/WebFunctionAuthType": "ApplicationManaged" } } } ] }
政策包含 ,lambda:CreateWebFunction因為該操作會從請求的 建立初始端點endpointConfig。制定此政策後,除非開發人員新增 ,否則 aws lambda-web deploy會失敗並出現存取遭拒錯誤--auth-type IamAuth。根據預設, 命令會建立ApplicationManaged端點。
條件索引鍵
對於精細存取控制,Lambda 支援下列條件內容索引鍵:
-
lambda:Request/WebFunctionAuthType– 請求中指定的身分驗證類型。在CreateWebFunction、CreateWebFunctionEndpoint和 期間可用UpdateWebFunctionEndpoint。使用它來控制可以設定的身分驗證類型。 -
lambda:Resource/WebFunctionAuthType– 目前在端點上設定的身分驗證類型,其值為IamAuth和ApplicationManaged。在InvokeWebFunctionEndpoint、DeleteWebFunctionEndpoint、UpdateWebFunctionEndpoint和 期間可用GetWebFunctionEndpoint。對於InvokeWebFunctionEndpoint,Lambda 只會在IamAuth端點上評估金鑰,因為對ApplicationManaged端點的請求未獲得 IAM 的授權。 -
aws:ResourceTag/${TagKey}– 依 Web 函數上的標籤篩選存取權。端點和修訂會繼承父函數的標籤,因此您可以使用 ABAC 控制調用存取。
範例僅允許在已標記函數的端點上叫用
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeWebFunctionEndpoint", "Resource": "arn:aws:lambda:us-east-1:111122223333:web-function/*/endpoint/prod", "Condition": { "StringEquals": { "aws:ResourceTag/Environment": "Production" } } } ] }