我想在 AWS 账户之间共享加密的亚马逊机器映像 (AMI),以启动加密的 Amazon Elastic Compute Cloud (Amazon EC2) 实例。
解决方法
按照这些先决条件和步骤共享加密 AMI,然后启动加密实例。
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
先决条件
AWS 账户
要共享 AMI,您需要以下两种类型的 AWS 账户:
- 源账户: 一个 AWS 账户,用于构建自定义 AMI,然后加密相关的 Amazon Elastic Block Store (Amazon EBS) 快照。
- 目标账户: 一个 AWS 账户,用于启动带有共享自定义 AMI 的加密 EC2 实例。
本文中的示例使用账户 ID 111111111111 作为源账户,使用账户 ID 999999999999 作为目标账户。
客户自主管理型 AWS KMS 密钥
客户自主管理型密钥是您创建的 AWS Key Management Service (AWS KMS) 密钥。在同一 AWS 区域的源账户中创建 AWS KMS 密钥。
本文中的示例使用了别名为 cmkSource 的 AWS KMS 密钥,该密钥位于 us-east-1 区域的源账户 ID 111111111111 下。别名 cmkSource 对 AMI ID ami-1234578 进行加密,然后与目标账户 ID 999999999999 共享。
**注意:**确保您还查看了限制和最佳实践。
为源账户创建 IAM 用户或角色策略
按照以下步骤使用 AWS Identity and Access Management (IAM) 为源账户创建用户或角色策略。然后,将目标账户 ID 添加到 AWS KMS 密钥策略中。
-
为源账户创建 IAM 用户或角色策略,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:ModifyImageAttribute"
],
"Resource": [
"arn:aws:ec2:us-east-1::image/12345678"
]
}
]
}
-
打开 AWS KMS 控制台。
-
在导航窗格中,选择 Customer managed keys(客户自主管理型密钥),然后选择您的 AWS KMS 密钥。例如,cmkSource。
-
在 Other AWS accounts(其他 AWS 账户)中,选择 Add other AWS accounts(添加其他 AWS 账户),然后选择 Add another AWS account(添加另一个 AWS 账户)。
-
在e arn:aws:iam:: 字段中,输入您的目标账户的 ID。例如,999999999999。
-
选择 Save changes(保存更改)。
为目标账户创建 IAM 用户或角色策略设置
为目标账户创建 IAM 用户或角色策略,如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:DescribeKey",
"kms:ReEncrypt*",
"kms:Decrypt",
"kms:GenerateDataKeyWithoutPlainText"
],
"Resource": [
"arn:aws:kms:us-east-1:111111111111:key/key-id of cmkSource"
]
},
{
"Effect": "Allow",
"Action": "kms:CreateGrant",
"Resource": [
"arn:aws:kms:us-east-1:111111111111:key/key-id of cmkSource"
],
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}
]
}
此策略允许您使用源账户中的 AWS KMS 密钥来加密从目标账户启动的新实例。
与目标账户共享 AMI
按照以下步骤共享 AMI:
**注意:**您无法共享来自不同 AWS 区域的 AMI。您可以复制 AMI,然后在新区域共享它或启动它。有关详细信息,请参阅如何在一个 AWS 区域创建 AMI,然后将其复制到另一个 AWS 区域?
从共享加密 AMI 启动实例
按照以下步骤从共享加密 AMI 启动实例
- 打开 EC2 控制台。
- 在导航窗格中,选择 EC2 Dashboard(EC2 控制面板),然后选择 Launch instance(启动实例)。
- 在 Names and tags(名称和标签)下,对于 Name(名称),输入您的实例的名称。
- 在 Application and OS Images (Amazon Machine Image)(应用程序和操作系统映像(亚马逊机器映像))下,选择 Browse more AMIs(浏览更多 AMI)以查找共享的加密 AMI。选择 My AMIs(我的 AMI),然后选择 Shared with me(与我共享)。
- 在 Instance type(实例类型)下,选择实例类型。
- 在 Key pair (login)(密钥对(登录))下,对于 Key pair name(密钥对名称),选择一个密钥对。或者,创建一个新的密钥对。
- (可选)在 Network settings(网络设置)下,选择 Edit(编辑),然后选择您的 VPC 和 Subnet(子网)。
- 在 Configure storage(配置存储)下,选择 Advanced(高级)。
- 在 EBS Volumes(EBS 卷)下,展开 Volume(卷)。
- 在 Encrypted(加密)下,选择 Encrypted(加密)。
- 在 KMS key(KMS 密钥)下,选择 Specify a custom value(指定自定义值),然后输入完整的 ARN。例如,'arn:aws:kms:us-east-1:111111111111:key/key-id of cmkSource'。
**注意:**如果不选择 AWS KMS 密钥,则使用目标账户中用于 EBS 加密的默认 KMS 密钥。
- 在 Summary(摘要)下,选择 Launch instance(启动实例)。
有关详细信息,请参阅使用新启动实例向导启动实例。
**注意:**从共享加密 AMI 启动实例的步骤与使用自定义 AMI 启动实例的步骤相同。有关详细信息,请参阅如何从自定义 AMI 启动 EC2 实例?
相关信息
如何与另一个 AWS 账户私下共享亚马逊机器映像 (AMI)?
实例启动场景
启动实例