我已将亚马逊机器映像(AMI)复制到另一个 AWS 账户或 AWS 区域。但是,我无法从复制的 AMI 启动 Amazon Elastic Compute Cloud (Amazon EC2) 实例。
简短描述
如果没有以下权限,则无法使用加密的 Amazon Elastic Block Store (Amazon EBS) 从复制的 AMI 启动实例:
- AWS Key Management Service (AWS KMS) 客户托管密钥政策缺少正确的主体,该主体可允许请求账户访问 AMI。
- 请求账户中的 AWS Identity and Access Management(IAM)实体没有相应卷的跨账户 AWS KMS 密钥所必需的 AWS KMS 权限。
解决方法
在复制的 AMI 上启用对现有 AWS KMS 自定义密钥的跨账户存取
有关详细说明,请参阅使用 AWS Key Management Service,在账户之间更安全地共享自定义加密密钥。
为 EC2 实例设置访问 AWS KMS 密钥的权限
1. 打开 AWS KMS 控制台。
**注意:**请确保您位于正确的区域。
2. 选择客户管理的密钥,然后选择相应密钥。
3. 在密钥策略下,滚动到密钥用户。验证密钥用户部分是否列出了所有需要访问密钥的内部和外部账户以及用户。
4. 如果密钥用户部分中缺少任何账户或用户,请在密钥策略下选择切换到策略视图。
**注意:**如果您在任何时候手动编辑了 AWS KMS 密钥政策,则仅可在策略 (JSON) 视图下查看该密钥政策。
5. 验证密钥政策中的允许使用密钥语句是否正确。语句中必须包含所有需要访问密钥的账户和用户的 ARN。
以下是在默认密钥政策中允许使用密钥语句的示例片段。该示例包括以下 ARN:
- 包含复制的 AMI 的外部 AWS 账户。
- AMI 的父账户。
- 外部账户中的用户。
有关整个默认密钥政策的概述和示例,请参阅默认密钥政策。
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111122223333:root",
"arn:aws:iam::444455556666:root",
"arn:aws:iam::111122223333: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::111122223333:root",
"arn:aws:iam::444455556666:root",
"arn:aws:iam::111122223333:user/UserA"
]
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
}]
}
6. 创建并分配 IAM policy。
创建 IAM policy 并将其附加到您的 IAM 用户或群组
要创建 IAM policy 并将其附加到您的 IAM 用户或群组,请完成以下步骤:
**注意:**如果您已经创建了 IAM policy,请继续执行步骤 7,以附加策略。
1. 使用具有管理员权限的用户打开 IAM 控制台。
2. 选择策略。
3. 选择创建策略。
4. 选择 JSON 选项卡。复制以下 JSON 策略示例,然后将其输入到 JSON 文本框中。将 arn:aws:kms:REGION:MAINACCOUNTNUMBER:key/1a345678-1234-1234-1234-EXAMPLE 替换为您的 AWS KMS 密钥的 ARN。
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "AllowUseOfTheKey",
"Effect": "Allow",
"Action": ["kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey"],
"Resource": ["arn:aws:kms:REGION:MAINACCOUNTNUMBER:key/1a345678-1234-1234-1234-EXAMPLE"]
}, {
"Sid": "AllowAttachmentOfPersistentResources",
"Effect": "Allow",
"Action": ["kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant"],
"Resource": ["arn:aws:kms:REGION:MAINACCOUNTNUMBER:key/1a345678-1234-1234-1234-EXAMPLE"],
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}]
}
5. 选择查看策略。策略验证器会报告存在的任何语法错误。
6. 在审核页面上,输入 KmsKeyUsagePolicy 作为策略名称。查看策略摘要以查看您的策略授予的权限,然后选择创建策略以保存策略。新策略显示在托管策略列表中,可以附加到您的 IAM 用户或群组。
7. 在 IAM 控制台的导航窗格中,选择策略。
8. 在搜索框中,输入 KmsKeyUsagePolicy。然后,选中 KmsKeyUsagePolicy 旁边的复选框。
9. 选择策略操作,然后选择附加。
10. 对于筛选条件,选择用户。
11. 在搜索框中,输入您的用户名。然后,选中您用户名旁边的复选框。
12. 选择附加策略。
相关信息
复制 AMI
编辑密钥
教程: 创建并附加您的第一个客户管理型策略
验证 IAM policy