本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可使用 AuthType
參數和連接至特定函數的資源型政策,控制對 Lambda 函數 URL 的存取權。這兩個元件的組態能決定誰可以對函數 URL 呼叫或執行其他管理動作。
AuthType
參數決定 Lambda 如何對函數 URL 的請求執行身分驗證或授權。設定函數 URL 時,您必須指定以下任一 AuthType
選項:
-
AWS_IAM
– Lambda 使用 AWS Identity and Access Management (IAM) 根據 IAM 主體的身分政策和函數的資源型政策來驗證和授權請求。如果您希望只讓完成身分驗證的 使用者和角色透過函數 URL 呼叫您的函數,請選擇此選項。
-
NONE
– Lambda 不會在呼叫函數前執行任何身分驗證。然而,函數的資源型政策永遠有效,而且您必須授予公有存取權,您的函數 URL 才能接收請求。選擇此選項,即可允許使用者公開存取函數 URL,而且不必完成身分驗證。
除了 AuthType
之外,您也可以使用資源型政策授予其他 AWS 帳戶 呼叫函數的許可。如需詳細資訊,請參閱在 Lambda 中檢視資源型 IAM 政策。
如需安全性的其他洞見,您可以使用 AWS Identity and Access Management Access Analyzer 來全面分析對函數 URL 的外部存取。IAM Access Analyzer 也能監控您 Lambda 函數新增或更新的許可,以協助您識別授予公有和跨帳戶存取權的許可。IAM Access Analyzer 可供任何 AWS 客戶免費使用。若要開始使用 IAM Access Analyzer,請參閱使用 AWS IAM Access Analyzer。
本頁面提供兩種驗證類型的資源型政策範例,並說明如何使用 AddPermission API 操作或 Lambda 主控台來建立這些政策。如需了解在設定許可後呼叫函數 URL 的相關資訊,請參閱呼叫 Lambda 函數 URL。
使用 AWS_IAM
驗證類型
如果您選擇採用 AWS_IAM
驗證類型,使用者必須擁有 lambda:InvokeFunctionUrl
許可才能呼叫您的 Lambda 函數 URL。視提出呼叫請求的使用者而定,您可能必須使用資源型政策授予此許可。
如果提出請求的委託人與函數 URL AWS 帳戶 位於相同位置,則委託人必須在其身分型政策中擁有lambda:InvokeFunctionUrl
許可,或在函數的資源型政策中授予許可。換句話說,如果使用者已經由身分型政策擁有 lambda:InvokeFunctionUrl
許可,即可自行決定是否使用資源型政策。政策評估作業需遵循決定是否允許或拒絕帳戶中的請求一文所述的規則。
如果提出請求的委託人位於不同帳戶,則委託人必須同時經由身分型政策取得 lambda:InvokeFunctionUrl
許可,並且針對其嘗試呼叫的函數,透過資源型政策取得許可。在這些跨帳戶的情況中,政策評估作業需遵循決定是否允許跨帳戶請求一文所述的規則。
對於跨帳戶互動範例,下列資源型政策允許 中的example
AWS 帳戶 444455556666
角色叫用與函數 相關聯的函數 URLmy-function
:
範例 函數 URL 跨帳戶呼叫政策
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/
example
" }, "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function
", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }
您可以依照以下步驟,透過主控台建立此政策陳述式:
將 URL 呼叫許可授予其他帳戶 (主控台)
-
開啟 Lambda 主控台中的函數頁面
。 -
選擇您要授予 URL 呼叫許可的函數名稱。
-
依序選擇 Configuration (組態) 索引標籤和 Permissions (許可)。
-
在 Resource-based policy (資源型政策) 底下,選擇 Add permissions (新增許可)。
-
選擇 Function URL (函數 URL)。
-
針對 Auth type (驗證類型) 選擇 AW_IAM。
-
(選用) 針對 Statement ID (陳述式 ID) 輸入政策陳述式的陳述式 ID。
-
依據您要授予許可的使用者或角色,在主體輸入其 Amazon Resource Name (ARN)。例如:
444455556666
。 -
選擇 Save (儲存)。
或者,您可以使用下列 add-permission
aws lambda add-permission --function-name my-function \ --statement-id example0-cross-account-statement \ --action lambda:InvokeFunctionUrl \ --principal 444455556666 \ --function-url-auth-type AWS_IAM
在先前的範例中,lambda:FunctionUrlAuthType
條件索引鍵值為 AWS_IAM
。唯有當函數 URL 的驗證類型也是 AWS_IAM
時,此政策才會允許您存取函數 URL。
使用 NONE
驗證類型
重要
當您的函數 URL 驗證類型為 NONE
,而且資源型政策授予公有存取權時,任何未經身分驗證的使用者只要取得您的函數 URL,都可以呼叫您的函數。
部分情況下,您可能需要將函數 URL 設為公有狀態。例如,您可能希望為直接透過 Web 瀏覽器提出的請求提供服務。如要允許使用者公開存取您的函數 URL,請選擇 NONE
驗證類型。
如果您選擇 NONE
驗證類型,Lambda 就不會使用 IAM 對存取函數 URL 的請求執行身分驗證。不過,使用者仍必須擁有 lambda:InvokeFunctionUrl
許可,才能成功呼叫您的函數 URL。您可以使用以下資源型政策來授予 lambda:InvokeFunctionUrl
許可:
範例 函數 URL 呼叫政策 (適用於所有未經身分驗證的委託人)
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:
my-function
", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } } ] }
注意
當您NONE
透過主控台或 AWS Serverless Application Model (AWS SAM) 建立具有身分驗證類型的函數 URL 時,Lambda 會自動為您建立上述以資源為基礎的政策陳述式。如果政策早已建立,或建立應用程式的使用者或角色沒有適當的許可,Lambda 就不會為您建立該政策。如果您直接使用 AWS CloudFormation AWS CLI、 或 Lambda API,則必須自行新增lambda:InvokeFunctionUrl
許可。如此一來,您的函數就會設為公有狀態。
此外,如果您刪除具有驗證類型 NONE
的函數 URL,則 Lambda 不會自動刪除關聯的資源型政策。如果您想要刪除此政策,則必須手動執行。
此陳述式的 lambda:FunctionUrlAuthType
條件索引鍵值為 NONE
。唯有當函數 URL 的驗證類型也是 NONE
時,此政策陳述式才會允許您存取函數 URL。
如果函數的資源型政策並未授予 lambda:invokeFunctionUrl
許可,當使用者嘗試呼叫您的函數 URL,畫面會顯示 403 禁止錯誤代碼,即使函數 URL 使用 NONE
驗證類型,依然會發生此錯誤。
控管和存取權控制
除了函數 URL 呼叫許可之外,您也可以控制函數 URL 設定動作的存取權。Lambda 支援以下適用於函數 URL 的 IAM 政策動作:
-
lambda:InvokeFunctionUrl
– 使用函數 URL 呼叫 Lambda 函數。 -
lambda:CreateFunctionUrlConfig
– 建立函數 URL 並設定其AuthType
。 -
lambda:UpdateFunctionUrlConfig
– 更新函數 URL 組態及其AuthType
。 -
lambda:GetFunctionUrlConfig
– 檢視函數 URL 的詳細資訊。 -
lambda:ListFunctionUrlConfigs
– 列出函數 URL 組態。 -
lambda:DeleteFunctionUrlConfig
– 刪除函數 URL。
注意
Lambda 主控台僅支援為 lambda:InvokeFunctionUrl
新增許可。如需執行其他所有動作,您必須使用 Lambda API 或 AWS CLI新增許可。
若要允許或拒絕對其他 AWS 實體的函數 URL 存取,請在 IAM 政策中包含這些動作。例如,以下政策授予 example
角色以更新my-function
帳戶 中 AWS 帳戶 函數的函數 URL 的444455556666
許可123456789012
。
範例 跨帳戶函數 URL 政策
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:UpdateFunctionUrlConfig", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:
my-function
" } ] }
條件索引鍵
如要精細控制函數 URL 的存取權,請使用條件索引鍵。Lambda 為函數 URL 額外支援一種條件索引鍵:FunctionUrlAuthType
。FunctionUrlAuthType
索引鍵可定義描述函數 URL 所用驗證類型的列舉值。此值可以是 AWS_IAM
或 NONE
。
您可以在與函數相關聯的政策中使用此條件索引鍵。例如,您可能希望限制哪些人可以變更函數 URL 的組態。若要針對 URL 驗證類型為 NONE
的所有函數拒絕所有 UpdateFunctionUrlConfig
請求,您可以定義以下政策:
範例 明確拒絕請求的函數 URL 政策
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action":[
"lambda:UpdateFunctionUrlConfig"
],
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:*",
"Condition": {
"StringEquals": {
"lambda:FunctionUrlAuthType": "NONE"
}
}
}
]
}
若要授予許可中example
AWS 帳戶 444455556666
的角色,以對 URL 驗證類型 的函數進行 CreateFunctionUrlConfig
和 UpdateFunctionUrlConfig
請求AWS_IAM
,您可以定義下列政策:
範例 明確允許請求的函數 URL 政策
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::444455556666:role/example"
},
"Action":[
"lambda:CreateFunctionUrlConfig",
"lambda:UpdateFunctionUrlConfig"
],
"Resource": "arn:aws:lambda:us-east-1:123456789012:function:*",
"Condition": {
"StringEquals": {
"lambda:FunctionUrlAuthType": "AWS_IAM"
}
}
}
]
}
您也可以在服務控制政策(SCP) 中使用此條件索引鍵。在 AWS Organizations中使用 SCP 管理整個組織的許可。例如,若要拒絕使用者建立或更新使用 AWS_IAM
以外驗證類型的函數 URL,請使用以下服務控制政策:
範例 明確拒絕請求的函數 URL SCP
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action":[
"lambda:CreateFunctionUrlConfig",
"lambda:UpdateFunctionUrlConfig"
],
"Resource": "arn:aws:lambda:*:123456789012:function:*",
"Condition": {
"StringNotEquals": {
"lambda:FunctionUrlAuthType": "AWS_IAM"
}
}
}
]
}