跳至內容

如何解決連接加密 Amazon EBS 磁碟區的 Amazon EC2 執行個體建立或啟動失敗的問題?

2 分的閱讀內容
0

我啟動了一個連接加密 Amazon Elastic Block Store (Amazon EBS) 磁碟區的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。不過,該 EC2 執行個體無法建立或啟動。

簡短說明

啟動執行個體時,發生啟動問題的執行個體可能會從擱置中狀態轉為正在關閉,最後進入已終止狀態。

或者,您可能會在 describe-instances AWS Command Line Interface (AWS CLI) 命令的輸出中收到以下錯誤訊息:

" "StateReason": { "Code": "Client.InternalError" "Message": "Client.InternalError: Client error on launch" }"

如果用於加密的 AWS Key Management Service (KMS) 金鑰未設為啟用,便會發生此問題。另一個可能原因是,啟動執行個體的 AWS Identity and Access Management (IAM) 使用者或角色不具備必要的 AWS KMS 權限。

注意: 即使 IAM 使用者具備完整的 Amazon EC2 權限,您仍必須授予該使用者 AWS KMS key 的存取權。

若要解決 IAM 問題,請建立允許存取 AWS KMS key 的政策,然後將該政策連接至 IAM 實體。或者,將 IAM 實體新增為 AWS KMS key 使用者。

解決方法

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

檢查 AWS KMS key 狀態

請確認您已將 AWS KMS key 設為啟用。

建立允許存取 AWS KMS key 的政策,然後將該政策連接至 IAM 實體

建立以下 IAM 政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:Encrypt",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    {
      "Effect": "Allow",
      "Action": "kms:CreateGrant",
      "Resource": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
      "Condition": {
        "Bool": {
          "kms:GrantIsForAWSResource": true
        }
      }
    }
  ]
}

注意: 將 arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab 替換為AWS KMS key 的 Amazon Resource Name (ARN)。

接著,將政策連接至 IAM 角色或使用者。

將 IAM 實體新增為 AAWS KMS key 使用者

完成以下步驟:

  1. 開啟 AWS KMS console (AWS KMS 主控台)。
  2. 選擇 Customer managed keys (客戶管理金鑰)。
  3. 在 Key ID (金鑰 ID),選擇您的金鑰 ID。
  4. 在 Key users (金鑰使用者),選擇 Add (新增)。
  5. 在 Name (名稱),選擇 IAM 使用者或角色,然後選擇 Add (新增)。
    注意: 預設金鑰政策允許您的 AWS 帳戶存取金鑰。如果改用自訂金鑰政策,AWS KMS key 政策必須明確允許以下權限:
    {
          "Sid": "Allow use of the key",
          "Effect": "Allow",
          "Principal": {
            "AWS": [
              "arn:aws:iam::123456789012:role/MyRoleName",
              "arn:aws:iam::123456789012:user/MyUserName"
            ]
          },
          "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:DescribeKey"
          ],
          "Resource": "*"
        },
        {
          "Sid": "Allow attachment of persistent resources",
          "Effect": "Allow",
          "Principal": {
            "AWS": [
              "arn:aws:iam::123456789012:role/MyRoleName",
              "arn:aws:iam::123456789012:user/MyUserName"
            ]
          },
          "Action": [
            "kms:CreateGrant",
            "kms:ListGrants",
            "kms:RevokeGrant"
          ],
          "Resource": "*",
          "Condition": {
            "Bool": {
              "kms:GrantIsForAWSResource": "true"
            }
          }
        }
    注意: 將 arn:aws:iam::123456789012:role/MyRoleName 替換為 IAM 角色 ARN,並將 arn:aws:iam::123456789012:user/MyUserName 替換為 IAM 使用者 ARN。

相關資訊

如何確認 AWS KMS API 呼叫使用具備資料加密的已驗證加密?

AWS KMS 中的金鑰政策

Amazon Elastic Block Store (Amazon EBS) 如何使用 AWS KMS

AWS 官方已更新 7 個月前