我启动了一个附加有加密 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 密钥用户
完成以下步骤:
- 打开 AWS KMS 控制台。
- 选择 Customer managed keys(客户管理型密钥)。
- 对于 Key ID(密钥 ID),选择您的密钥 ID。
- 对于 Key users(密钥用户),选择 Add(添加)。
- 对于 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