我无法从快照创建或挂载加密的 Amazon Elastic Block Store(Amazon EBS)卷。快照使用 AWS Key Management Service(AWS KMS)客户自主管理型密钥进行加密。
简短描述
您可能无法从加密的快照创建或挂载加密的 EBS 卷。当您的快照和用于加密快照的自定义 KMS 密钥在同一个账户中并且缺少密钥政策权限时,就会发生这种情况。若要解决此问题,请在 AWS KMS 密钥政策中允许 AWS Identity and Access Management(IAM)用户或角色。
解决方法
从使用 CloudTrail 事件历史记录的政策中找出缺少的权限
- 打开 AWS CloudTrail 控制台。
- 选择事件历史记录。然后,在进行 AttachVolume 或 CreateVolume API 调用时,在时间范围中输入一个 15 分钟的时段。
- 选择筛选条件,选择事件源,然后输入 kms.amazonaws.com。
- 加载结果后,选择下载按钮,然后选择下载 CSV。
- 打开 .csv 文件,然后筛选 AccessDenied 的错误代码列。带有 AccessDenied 错误代码的事件名称通常就是缺少的权限。
注意:CloudTrail 事件最多需要 15 分钟才能显示在事件历史记录选项卡上。在收到 CreateVolume 或 AttachVolume 失败状态后立即检查事件历史记录可能不会显示任何事件。
确定了缺少的权限后,完成以下步骤以解决问题。
验证 KMS 密钥政策包含尝试挂载或创建卷的 IAM 用户或角色
AWS KMS 控制台默认视图
1. 打开 AWS KMS 控制台。
2. 选择客户管理的密钥,然后选择相应的密钥。
3. 在密钥策略下,向下滚动到密钥用户。确认密钥用户部分列出了尝试创建或挂载卷的 IAM 用户或角色。
4. 如果密钥用户部分未列出用户或角色,请选择添加,选择用户或角色,然后选择添加。
AWS KMS 控制台策略视图
如果您之前手动编辑了 AWS KMS 密钥政策,则仅可在政策(JSON)视图下查看该密钥政策。若要允许所需的 AWS KMS 权限,请在语句中将 IAM 用户或角色的 ARN 列为主体。
示例密钥政策
以下是允许 UserA 访问 Key1 的 AWS KMS 密钥政策的示例:
{
"Version": "2012-10-17",
"Id": "key-consolepolicy-3",
"Statement": [{
"Sid": "Enable IAM User Permissions",
...
},
{
"Sid": "Allow access for Key Administrators",
...
},
{
"Sid": "Allow use of the keys",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:user/UserA"
},
"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::111111111111:user/UserA"
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
}
]
}