設定 AWS Lambda 的程式碼簽署
AWS Lambda 的程式碼簽署可協助確保只有受信任的程式碼會在您的 Lambda 函數中執行。啟用函數的程式碼簽署時,Lambda 會檢查每個程式碼部署,並確認程式碼套件是由受信任的來源簽署。
注意
定義為容器映像的函數不支援程式碼簽署。
若要驗證程式碼完整性,請使用 AWS Signer 為函數和 Layer 建立數位簽署的程式碼套件。若使用者嘗試部署程式碼套件時,Lambda 會對程式碼套件執行驗證檢查,然後再接受部署。因為程式碼簽署驗證檢查會在部署時執行,因此不會影響函數執行的效能。
您也可以使用 AWS Signer 來建立簽署描述檔。您可以使用簽署描述檔來建立簽署的程式碼套件。使用 AWS Identity and Access Management (IAM) 控制誰可以簽署程式碼套件並建立簽署描述檔。如需詳細資訊,請參閱《 AWS Signer 開發人員指南》中的驗證與存取控制。
若要啟用函數的程式碼簽署,您可以建立程式碼簽署組態並將其附加至函數。程式碼簽署組態會定義允許簽署描述檔的清單,以及在任何驗證檢查失敗時要採取的政策動作。
Lambda 層會遵循與函數程式碼套件相同的已簽署程式碼套件格式。將層新增至已啟用程式碼簽署的函數時,Lambda 會檢查該層是否由允許的簽署描述檔簽署。若您啟用函數的程式碼簽署,新增至函數的所有 Layer 也必須由其中一個允許的簽署描述檔來簽署。
使用 IAM 來控制誰可以建立程式碼簽署組態。通常,僅允許特定的管理使用者擁有此功能。此外,您可以設定 IAM 政策,來強制只有開發人員可建立已啟用程式碼簽署的函數。
您可以設定程式碼簽署以記錄 AWS CloudTrail 的變更。函數的成功部署和受阻部署會記錄至 CloudTrail,包含簽章和驗證檢查的相關資訊。
您可以使用 Lambda 主控台、AWS Command Line Interface (AWS CLI)、AWS CloudFormation 和 AWS Serverless Application Model (AWS SAM) 來設定函數的程式碼簽署。
使用 AWS Signer 或 AWS Lambda 的程式碼簽署無需額外付費。
簽署驗證
在您將已簽署的程式碼套件部署至函數時,Lambda 會執行下列驗證檢查:
-
完整性 - 驗證程式碼套件自簽署後尚未修改。Lambda 將套件的雜湊與簽章中的雜湊作比較。
-
過期 - 驗證程式碼套件的簽章尚未過期。
-
不相符 - 驗證程式碼套件是否使用其中一個允許的 Lambda 函數的簽署描述檔來進行簽署。如果簽署不存在,也會發生不相符情況。
-
撤銷 - 驗證程式碼套件的簽章尚未被叫用。
如果任何驗證檢查失敗,程式碼簽署組態中定義的簽章驗證政策將確定 Lambda 會採取下列哪些動作:
-
警告 — Lambda 允許部署程式碼套件,但會發出警告。Lambda 會發出新的 Amazon CloudWatch 指標,還會將警告存放在 CloudTrail 記錄中。
-
強制 - Lambda 發出警告 (與「警告」動作相同) 並阻止程式碼套件的部署。
您可以設定到期、不相符和撤銷驗證檢查的政策。請注意,您無法設定完整性檢查的政策。如果完整性檢查失敗,Lambda 會阻止部署。
組態先決條件
在您可以設定 Lambda 函數的程式碼簽署之前,請使用 AWS Signer 執行下列動作:
-
建立一個或多個簽署描述檔。
-
使用簽署描述檔為您的函數建立簽署的程式碼套件。
如需詳細資訊,請參閱《AWS Signer 開發人員指南 》中的建立簽署描述檔 (主控台)。
建立程式碼簽署組態
程式碼簽署組態會定義允許的簽署描述檔和簽署驗證政策。
建立程式碼簽署組態 (主控台)
-
開啟 Lambda 主控台中的 Code signing configurations
(程式碼簽署組態) 頁面。 -
選擇 Create configuration (建立組態)。
-
針對 Description (描述),輸入組態的描述性名稱。
-
在 Signing profiles (簽署描述檔) 下,可將多達 20 個簽署描述檔新增至組態。
-
針對 Signing profile version ARN (簽署描述檔版本 ARN),選擇描述檔版本的 Amazon Resource Name (ARN),或輸入 ARN。
-
若要新增額外的簽署描述檔,選擇 Add signing profiles (新增簽署描述檔)。
-
-
在 Signature validation policy (簽署驗證政策) 下,選擇 Warn (警告) 或 Enforce (強制)。
-
選擇 Create configuration (建立組態)。
更新程式碼簽署組態
若更新程式碼簽署組態,變更會影響已附加程式碼簽署組態的函數的未來部署。
更新程式碼簽署組態 (主控台)
-
開啟 Lambda 主控台中的 Code signing configurations
(程式碼簽署組態) 頁面。 -
選取要更新的程式碼簽署組態,然後選擇 Edit (編輯)。
-
針對 Description (描述),輸入組態的描述性名稱。
-
在 Signing profiles (簽署描述檔) 下,可將多達 20 個簽署描述檔新增至組態。
-
針對 Signing profile version ARN (簽署描述檔版本 ARN),選擇描述檔版本的 Amazon Resource Name (ARN),或輸入 ARN。
-
若要新增額外的簽署描述檔,選擇 Add signing profiles (新增簽署描述檔)。
-
-
在 Signature validation policy (簽署驗證政策) 下,選擇 Warn (警告) 或 Enforce (強制)。
-
選擇 Save changes (儲存變更)。
刪除程式碼簽署組態
只有在沒有任何函數使用的情況下,才能刪除程式碼簽署組態。
刪除程式碼簽署組態 (主控台)
-
開啟 Lambda 主控台中的 Code signing configurations
(程式碼簽署組態) 頁面。 -
選取要刪除的程式碼簽署組態,然後選擇 Delete (刪除)。
-
若要確認,再次選擇 Delete (刪除)。
啟用函數的程式碼簽署
若要啟用函數的程式碼簽署,請將程式碼簽署組態與函數建立關聯。
將程式碼簽署組態與函數 (主控台) 關聯
開啟 Lambda 主控台中的 Functions (函數) 頁面
。 -
選擇您要啟用程式碼簽署的函數。
-
在 Code signing configuration (程式碼簽署組態) 下,選擇 Edit (編輯)。
-
在 Edit code signing (編輯程式碼簽署) 中,選擇此函數的程式碼簽署組態。
-
選擇 Save (儲存)。
設定 IAM 政策
若要授予使用者存取程式碼簽署 API 操作的許可,請將一個或多個政策陳述式附加至使用者政策。如需使用者政策的詳細資訊,請參閱Lambda 適用的身分型 IAM 政策。
下列範例政策陳述式會授予建立、更新及擷取程式碼簽署組態的許可。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:CreateCodeSigningConfig", "lambda:UpdateCodeSigningConfig", "lambda:GetCodeSigningConfig" ], "Resource": "*" } ] }
管理員可以使用 CodeSigningConfigArn
條件金鑰,來指定開發人員必須用於建立或更新函數的程式碼簽署組態。
下列範例政策陳述式會授予建立函數的許可。政策聲明包括 lambda:CodeSigningConfigArn
條件以指定允許的程式碼簽署組態。Lambda 會阻止任何 CreateFunction
API 請求,前提是如果其 CodeSigningConfigArn
參數遺失或不符合條件中的值。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowReferencingCodeSigningConfig", "Effect": "Allow", "Action": [ "lambda:CreateFunction", ], "Resource": "*", "Condition": { "StringEquals": { "lambda:CodeSigningConfigArn": “arn:aws:lambda:us-west-2:123456789012:code-signing-config:csc-0d4518bd353a0a7c6” } } } ] }
使用 Lambda API 來設定程式碼簽署
若要使用 AWS CLI 或 AWS SDK 來管理程式碼簽署組態,請使用下列 API 操作:
若要管理函數的程式碼簽署組態,請使用下列 API 操作: