跳至内容

如何解决使用加密 Amazon EBS 卷的 Amazon EC2 实例的启动或启动失败问题?

2 分钟阅读
0

我启动了一个附加有加密 Amazon Elastic Block Store (Amazon EBS) 卷的 Amazon Elastic Compute Cloud (Amazon EC2) 实例。但是,该 EC2 实例无法启动或启动。

简短描述

当您启动实例时,出现启动问题的实例可能会从 Pending(待处理)状态变为 Shutting down(正在关闭),然后再变为 Terminated(已终止)。

或者,您可能会在 describe-instances AWS 命令行界面 (AWS CLI) 命令的输出中收到以下错误消息:

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

如果您用于加密的 AWS Key Management Service (AWS KMS) 密钥未设置为 Enable(启用),则会出现此问题。或者,启动实例的 AWS Identity and Access Management (IAM) 用户或角色没有所需的 AWS KMS 权限。

注意: 即使您的 IAM 用户拥有完整的 Amazon EC2 权限,您仍然需要授予其访问 AWS KMS 密钥的权限。

要解决 IAM 相关问题,请创建允许访问您的 AWS KMS 密钥的策略,然后将该策略附加到您的 IAM 实体。或者,将 IAM 实体添加到 AWS KMS 密钥用户。

解决方法

注意: 如果您在运行 AWS CLI 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。

查看 AWS KMS 密钥状态

确保将 AWS KMS 密钥设置为“启用”。

创建允许访问您的 AWS KMS 密钥的策略,然后将该策略附加到您的 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 密钥的 Amazon 资源名称 (ARN)。

然后,将策略附加到您的 IAM 角色或用户。

将 IAM 实体添加到 AWS KMS 密钥用户

完成以下步骤:

  1. 打开 AWS KMS 控制台。
  2. 选择 Customer managed keys(客户管理型密钥)。
  3. 对于 Key ID(密钥 ID),选择您的密钥 ID。
  4. 对于 Key users(密钥用户),选择 Add(添加)。
  5. 对于 Name(名称),选择 IAM 用户或角色,然后选择 Add(添加)。
    注意: 默认密钥策略允许访问您的 AWS 账户。如果您改用自定义密钥策略,则 AWS KMS 密钥策略必须显式允许以下权限:
    {
          "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 个月前