跳至內容

如何解決 Lambda 函數「KMS 例外狀況」權限錯誤?

2 分的閱讀內容
0

我的 AWS Lambda 函式傳回了「KMS 例外狀況」、「您無權執行」或「不允許存取 KMS」錯誤。

解決方法

根據錯誤訊息更新您的 AWS Identity and Access Management (IAM) 身分的 AWS Key Management Service (KMS) 權限。如果 AWS KMS key 和 IAM 角色屬於不同的 AWS 帳戶,則必須同時更新 IAM 政策和 AWS KMS key 政策

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本

解決「KMS 例外狀況: UnrecognizedClientExceptionKMS 訊息」錯誤

當 Lambda 函式的執行角色遭到刪除,然後使用相同的名稱但不同的主體重新建立時,就會發生以下錯誤:

「呼叫調用 API 動作失敗,並顯示以下訊息: Lambda 無法解密環境變數,因為 KMS 存取遭拒。請檢查該函式的 AWS KMS key 設定。KMS 例外狀況: UnrecognizedClientExceptionKMS 訊息: 請求中包含的安全權杖無效。」

若要解決該錯誤,您必須重設函式執行角色的 AWS KMS 授權

**注意:**建立和更新 Lambda 函式的 IAM 使用者必須擁有使用 AWS KMS key 的權限

  1. 若要取得函式目前執行角色和 AWS KMS key 的 Amazon Resource Name (ARN),請執行下列 get-function-configuration 命令:
    aws lambda get-function-configuration --function-name your-function-name
    **注意:**將 yourFunctionName 替換為您的函式名稱。
  2. 若要重設 AWS KMS 授權,請執行下列其中一項操作:
    若要將函式的執行角色更新為不同的暫存值,請執行下列 update-function-configuration 命令:
    aws lambda update-function-configuration --function-name yourFunctionName --role temporaryValue
    **注意:**將 temporaryValue 替換為暫存執行角色 ARN。
    若要將函式的執行角色更新回原始執行角色,請執行下列 update-function-configuration 命令:
    aws lambda update-function-configuration --function-name yourFunctionName --role originalValue
    **注意:**將 originalValue 替換為原始執行角色 ARN。
    -或-
    若要將函式的 AWS KMS key 更新為不同的暫存值,請執行以下 update-function-configuration 命令:
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn temporaryValue
    **注意:**將 temporaryValue 替換為暫存 AWS KMS key ARN。若要使用預設服務金鑰,請將 kms-key-arn 參數設為 ""
    若要將函式的 AWS KMS key 更新回原始 AWS KMS key ARN,請執行下列 update-function-configuration 命令
    aws lambda update-function-configuration --function-name yourFunctionName --kms-key-arn originalValue
    
    **注意:**將 originalValue 替換為原始 AWS KMS key ARN。

解決「KMS 例外狀況: AccessDeniedException KMS 訊息」錯誤

以下錯誤表示您的 IAM 身分沒有執行 kms:Decrypt API 動作所需的權限:

「Lambda 無法解密您的環境變數,因為 KMS 存取遭拒。請檢查您的 KMS 權限。KMS 例外狀況: AccessDeniedException KMS 訊息: 密文對應的客戶主金鑰不存在、在此區域中不存在,或者您沒有存取權。」

若要解決該錯誤,請將下列政策陳述式新增至您的 IAM 使用者或角色:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "kms:Decrypt",
            "Resource": "your-KMS-key-arn"
        }
    ]
}

**注意:**將 your-KMS-key-arn 替換為您的 AWS KMS key ARN。

如需指示,請參閱新增權限給使用者 (主控台)

若要解決「您無權執行」錯誤

以下錯誤表示您的 IAM 身分沒有存取 AWS KMS key 所需的權限:

「您無權執行:kms:Encrypt。」

「您無權執行:kms:CreateGrant。」

「使用者:user-arn 無權對資源:* 執行:kms:ListAliases,並明確拒絕。」

**注意:**如果您使用預設金鑰政策,則您的 IAM 身分或函數的執行角色不需要 AWS KMS 權限。

若要解決這些類型的錯誤,請確認您的 IAM 使用者或角色是否具有執行下列 AWS KMS API 動作所需的權限:

如需指示,請參閱新增權限給使用者 (主控台)

授與存取客戶自管 AWS KMS key 所需權限的 IAM 政策陳述式範例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:CreateGrant"
            ],
            "Resource": "your-kms-key-arn"
        },
        {
            "Sid": "statement2",
            "Effect": "Allow",
            "Action": "kms:ListAliases",
            "Resource": "*"
        }
    ]
}

注意:****資源值必須為 "*"kms:ListAliases 動作不支援低階權限。另外,請確認將 "your-kms-key-arn" 替換為您的 AWS KMS key ARN。

若要解決「不允許存取 KMS」錯誤

下列錯誤表示 IAM 實體沒有取得 AWS Secrets Manager 密碼的權限:

「不允許存取 KMS (服務: AWSSecretsManager;狀態代碼: 400;錯誤代碼: AccessDeniedException;請求 ID: 123a4bcd-56e7-89fg-hij0-1kl2m3456n78)」

確定您的 IAM 使用者或角色具有執行下列 AWS KMS API 動作所需的權限:

如需詳細資訊,請參閱如何解決在嘗試擷取加密的 Secret Manager 密碼後,出現 AWS KMS key 存取錯誤?

相關資訊

如何對 AWS Lambda 中的 HTTP 502 和 HTTP 500 狀態碼 (伺服器端) 錯誤進行疑難排解?

如何對 Lambda 函數失敗進行疑難排解?

AWS 官方已更新 9 個月前