

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 保護 Lambda 環境變數
<a name="configuration-envvars-encryption"></a>

若要保護您的環境變數，可以使用伺服器端加密來保護您的靜態資料，並使用用戶端加密來保護傳輸中的資料。

**注意**  
為了提高資料庫安全性，我們建議您使用 AWS Secrets Manager 而非環境變數來存放資料庫登入資料。如需詳細資訊，請參閱[在 Lambda 函式中使用 Secrets Manager 秘密](with-secrets-manager.md)。

**靜態安全**  
Lambda 永遠使用 AWS KMS key提供靜態伺服器端加密。預設情況下，Lambda 使用 AWS 受管金鑰。如果此預設行為符合您的工作流程，您便不需要設定其他項目。Lambda 會在您的帳戶 AWS 受管金鑰 中建立 ，並為您管理許可。 AWS 不會向您收取使用此金鑰的費用。

如果您願意，您可以改為提供 AWS KMS 客戶受管金鑰。您可以這樣做以控制 KMS 金鑰的輪換或滿足您的組織對管理 KMS 金鑰的請求。當您使用客戶受管的金鑰時，只有您帳戶中具有 KMS 金鑰存取權的使用者才能檢視或管理函數上的環境變數。

客戶受管金鑰會產生標準 AWS KMS 費用。如需詳細資訊，請參閱 [AWS Key Management Service 定價](https://aws.amazon.com/kms/pricing/)。

**傳輸中安全**  
基於額外的安全性考量，您可啟用傳輸中加密輔助工具，此類工具能確保環境變數在傳輸過程中透過用戶端加密得到加密保護。

**若要為環境變數配置加密**

1. 使用 AWS Key Management Service (AWS KMS) 為 Lambda 建立任何客戶受管金鑰，以用於伺服器端和用戶端加密。如需詳細資訊，請參閱*AWS Key Management Service 開發人員指南*中的[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

1. 使用 Lambda 主控台，導覽至 **Edit environment variables** (編輯環境變數) 頁面。

   1. 開啟 Lambda 主控台中的 [函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

   1. 選擇一個函數。

   1. 選擇 **Configuration** (組態)，然後從左側導覽列選擇 **Environment variables** (環境變數)。

   1. 在 **Environment variables** (環境變數) 區段中，選擇 **Edit** (編輯)。

   1. 展開 **Encryption configuration** (加密組態)。

1. (選用) 啟用主控台加密輔助工具，以透過用戶端加密保護傳輸中的資料。

   1. 在**傳輸中加密**下，選擇**啟用傳輸中加密輔助工具**。

   1. 對於每個要啟用主控台加密輔助工具的環境變數，請選擇該環境變數旁的**加密**選項。

   1.  在 AWS KMS key 下加密傳輸中，選擇您在此程序開始時建立的客戶受管金鑰。

   1. 選擇 **Execution role policy** (執行角色政策)，然後複製政策。此政策授予函數的執行角色解密環境變數的許可。

      儲存此政策，以便在此程序的最後一個步驟中使用。

   1. 向函數中新增解密環境變數的程式碼。若要查看範例，請選擇**解密秘密程式碼片段**。

1. (選用) 指定用於靜態加密的客戶受管金鑰。

   1. 選擇 **Use a customer master key** (使用客戶主金鑰)。

   1. 選擇在此程序開始時建立的客戶受管金鑰。

1. 選擇 **Save** (儲存)。

1. 設定許可。

   如果搭配使用客戶受管金鑰和伺服器端加密，請向您希望其能檢視或管理該函數環境變數的任何使用者或角色授予許可。如需詳細資訊，請參閱[管理伺服器端加密 KMS 金鑰的許可](#managing-permissions-to-your-server-side-encryption-key)。

   如果您要啟用用戶端加密來增強傳輸中安全，您的函數需要許可來呼叫 `kms:Decrypt` API 操作。將您先前在此程序中儲存的政策新增至函數的[執行角色](lambda-intro-execution-role.md)。

## 管理伺服器端加密 KMS 金鑰的許可
<a name="managing-permissions-to-your-server-side-encryption-key"></a>

您的使用者或函數的執行角色不需要任何 AWS KMS 許可，即可使用預設加密金鑰。若要使用客戶受管金鑰，您需要使用金鑰的許可。Lambda 會使用您的許可，在金鑰上建立授權。這麼做可讓 Lambda 使用它來進行加密。
+ `kms:ListAliases` – 在 Lambda 主控台中檢視金鑰。
+ `kms:CreateGrant`、`kms:Encrypt` - 在函數上設定客戶受管金鑰。
+ `kms:Decrypt` - 檢視及管理使用客戶受管金鑰加密的環境變數。

您可以從 AWS 帳戶 或從金鑰的資源型許可政策取得這些許可。 `ListAliases` 是由 [Lambda 的 受管政策](access-control-identity-based.md)提供。金鑰政策會將其餘許可授予 **Key users** (金鑰使用者) 群組中的使用者。

沒有 `Decrypt` 許可的使用者仍然可以管理函數，但是無法在 Lambda 主控台中檢視或管理環境變數。如要防止使用者檢視環境變數，請將拒絕存取預設金鑰、客戶受管金鑰，或是所有金鑰的陳述式新增到使用者的許可。

**Example IAM 政策 - 透過金鑰 ARN 拒絕存取**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Deny",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": "arn:aws:kms:us-east-2:111122223333:key/3be10e2d-xmpl-4be4-bc9d-0405a71945cc"
        }
    ]
}
```

如需有關管理金鑰許可的詳細資訊，請參閱《AWS Key Management Service 開發人員指南》**中的 [AWS KMS中的金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)。