将 AMI 设为公用 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将 AMI 设为公用

您可以通过向所有 Amazon Web Services 账户 共享来公开您的 AMI。

如果您想阻止公开共享您的 AMI,可以启用阻止 AMI 的公开访问。这可以阻止任何公开 AMI 的尝试,从而有助于防止未经授权的访问和对 AMI 数据的潜在滥用。请注意,启用阻止公开访问不会影响已经公开提供的 AMI;它们仍然公开可用。

要仅允许特定账户使用您的 AMI 启动实例,请参阅 与特定 Amazon 账户共享 AMI

注意事项

在将 AMI 设为公用之前,请考虑以下事项。

  • 所有权 – 若要将 AMI 设为公有,您的 Amazon Web Services 账户 必须拥有 AMI。

  • 区域 – AMI 是一种区域性资源。当您共享 AMI 时,则它只能在您共享该 AMI 的区域使用。要使 AMI 能够在其他区域使用,请将该 AMI 复制到该区域并进行共享。有关更多信息,请参阅 复制 AMI

  • 阻止公开访问 – 要公开共享 AMI,必须在 AMI 公开共享的每个区域禁用阻止 AMI 的公开访问。公开共享 AMI 后,您可以重新启用阻止 AMI 的公开访问功能,以防止进一步公开共享您的 AMI。

  • 有些 AMI 无法设为公共 – 如果您的 AMI 包含以下组件之一,则无法将其设为公共(但您可以将 AMI 与特定 Amazon Web Services 账户 账户共享):

    • 加密卷

    • 加密卷的快照

    • 产品代码

  • 使用 – 当您共享 AMI 时,用户只能从该 AMI 启动实例。他们无法删除、共享或修改实例。但是,在他们使用您的 AMI 启动实例后,他们可以从其启动的实例创建 AMI。

  • 自动弃用 – 默认情况下,所有公有 AMI 的弃用日期均设置为自 AMI 创建日期起 2 年。您可以将弃用日期设置为早于两年。要取消弃用日期,或将弃用移至未来某一日期,您必须通过仅将 AMI 与特定 Amazon Web Services 账户 共享来将其设为私有。

  • 删除过时的 AMI – 在公共 AMI 达到其弃用日期后,如果在六个月或更长时间内没有从 AMI 启动任何新实例,则 Amazon 最终会删除该公共共享属性,这样过时的 AMI 就不会出现在公共 AMI 列表中。

  • 账单 – 当其他 Amazon Web Services 账户 使用您的 AMI 启动实例时,您无需付费。使用 AMI 启动实例的账户将为它们启动的实例付费。

与所有 Amazon 账户共享 AMI(公开共享)

将 AMI 设为公开后,它将在控制台的社区 AMI 中可用,您可以从 EC2 控制台左侧导航器的 AMI 目录中访问此 AMI,或者在使用控制台启动实例时访问该 AMI。请注意,将某个 AMI 设置为公用之后,可能需要一点时间 Community AMIs 中才会显示该 AMI。

Console
将 AMI 设为公用
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 AMI

  3. 从列表中选择您的 AMI,然后选择 Actions(操作)、Edit AMI permissions(编辑 AMI 权限)。

  4. AMI 可用性下,选择公开

  5. 选择 Save changes(保存更改)

Tools for Windows PowerShell

每个 AMI 都有一个 launchPermission 属性,用于控制允许哪些 Amazon Web Services 账户(包括拥有者账户在内)使用该 AMI 启动实例。通过修改 AMI 的 launchPermission 属性,可以将该 AMI 设为公共(这会向所有 Amazon Web Services 账户 授予启动权限),或仅将其与您指定的 Amazon Web Services 账户 共享。

可以在具有 AMI 启动许可的账户的列表中添加或删除账户 ID。要将 AMI 设为公有,请指定 all 组。公用和显式启动许可都可以指定。

将 AMI 设为公用
  1. 使用 Edit-EC2ImageAttribute 命令可以将 all 组添加到指定 AMI 的 launchPermission 列表中,如下所示。

    PS C:\> Edit-EC2ImageAttribute -ImageId ami-0abcdef1234567890 -Attribute launchPermission -OperationType add -UserGroup all
  2. 要验证 AMI 的启动权限,请使用以下 Get-EC2ImageAttribute 命令。

    PS C:\> Get-EC2ImageAttribute -ImageId ami-0abcdef1234567890 -Attribute launchPermission
  3. (可选)要再次将 AMI 设为私有,请从其启动许可中删除 all 组。请注意,AMI 的拥有者始终具有启动许可,因此不受该命令影响。

    PS C:\> Edit-EC2ImageAttribute -ImageId ami-0abcdef1234567890 -Attribute launchPermission -OperationType remove -UserGroup all
Amazon CLI

每个 AMI 都有一个 launchPermission 属性,用于控制允许哪些 Amazon Web Services 账户(包括拥有者账户在内)使用该 AMI 启动实例。通过修改 AMI 的 launchPermission 属性,可以将该 AMI 设为公共(这会向所有 Amazon Web Services 账户 授予启动权限),或仅将其与您指定的 Amazon Web Services 账户 共享。

可以在具有 AMI 启动许可的账户的列表中添加或删除账户 ID。要将 AMI 设为公有,请指定 all 组。公用和显式启动许可都可以指定。

将 AMI 设为公用
  1. 使用 modify-image-attribute 命令可以将 all 组添加到指定 AMI 的 launchPermission 列表中,如下所示。

    aws ec2 modify-image-attribute \ --image-id ami-0abcdef1234567890 \ --launch-permission "Add=[{Group=all}]"
  2. 要验证 AMI 的启动权限,请使用 describe-image-attribute 命令。

    aws ec2 describe-image-attribute \ --image-id ami-0abcdef1234567890 \ --attribute launchPermission
  3. (可选)要再次将 AMI 设为私有,请从其启动许可中删除 all 组。请注意,AMI 的拥有者始终具有启动许可,因此不受该命令影响。

    aws ec2 modify-image-attribute \ --image-id ami-0abcdef1234567890 \ --launch-permission "Remove=[{Group=all}]"

阻止公开访问您的 AMI

要防止公开共享您的 AMI,您可以启用阻止公开访问 AMI 功能。此设置已在账户级别启用,但您需要在每个希望防止公开共享 AMI 的 Amazon Web Services 区域 中启用此设置。

启用阻止公开访问后,任何将 AMI 设为公开的尝试都会被自动阻止。但是,如果您已经有公开 AMI,它们将保持公开状态。

如果您想公开共享 AMI,则需要禁用阻止公开访问。共享完成后,最佳实践是重新启用阻止公开访问功能,以防止意外地公开共享您的 AMI。

您可以将 IAM 权限限制为管理员用户,这样只有此类用户可启用或禁用阻止 AMI 的公开访问。

默认设置

根据您的账户是新账户还是现有账户,以及您是否拥有公用 AMI,默认启用或禁用阻止公开访问 AMI 设置。下表列出了默认设置:

Amazon 账户 “阻止公开访问 AMI”默认设置
新账户 已启用

没有公用 AMI 的现有账户¹

已启用

有一个或多个公用 AMI 的现有账户¹

已禁用

¹如果您的账户在 2023 年 7 月 15 日当天或之后拥有一个或多个公用 AMI,那么即使您随后将所有 AMI 设为私有,系统仍会为您的账户默认禁用阻止公开访问 AMI

所需的 IAM 权限

要使用阻止公开访问 AMI 功能,您必须拥有以下 IAM 权限:

  • EnableImageBlockPublicAccess

  • DisableImageBlockPublicAccess

  • GetImageBlockPublicAccessState

启用阻止公开访问 AMI

要防止公开共享您的 AMI,请在账户级别启用阻止公开访问 AMI。您必须在要阻止公开共享 AMI 的每个 Amazon Web Services 区域 中启用阻止公开访问 AMI。如果您已经有公开 AMI,它们将保持公开状态。

Console
在指定区域中启用阻止公开访问 AMI
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航栏(位于屏幕顶部)中,选择启用阻止公开访问 AMI 的区域。

  3. 如果未显示控制面板,则在导航窗格中选择 EC2 控制面板

  4. 账户属性下,选择数据保护和安全

  5. 阻止公开访问 AMI 下,选择管理

  6. 选择阻止新的公开共享复选框,然后选择更新

    注意

    API 最多可能需要 10 分钟来配置此设置。在此期间,值将为允许新的公开共享。API 完成配置后,该值将自动更改为已阻止新的公共共享

Amazon CLI
在指定区域中启用阻止公开访问 AMI

使用 enable-image-block-public-access 命令并指定要启用阻止公开访问 AMI 的区域。对于 --image-block-public-access-state 参数,请指定 block-new-sharing

aws ec2 enable-image-block-public-access \ --region us-east-1 \ --image-block-public-access-state block-new-sharing

预期输出

{ "ImageBlockPublicAccessState": "block-new-sharing" }
注意

API 最多可能需要 10 分钟来配置此设置。在此期间,如果您运行 get-image-block-public-access-state 命令,则响应将是 unblocked。当 API 完成配置后,响应将为 block-new-sharing

禁用阻止公开访问 AMI

要允许您账户中的用户公开共享您的 AMI,请在账户级别禁用阻止公开访问。在要允许公开共享 AMI 的每个 Amazon Web Services 区域 中,您都必须禁用阻止公开访问 AMI。

Console
在指定区域禁用阻止公开访问 AMI
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航栏(位于屏幕顶部)中,选择禁用阻止公开访问 AMI 的区域。

  3. 如果未显示控制面板,则在导航窗格中选择 EC2 控制面板

  4. 账户属性下,选择数据保护和安全

  5. 阻止公开访问 AMI 下,选择管理

  6. 清除阻止新的公开共享复选框,然后选择更新

  7. 提示进行确认时,输入 confirm,然后选择允许公开共享

    注意

    API 最多可能需要 10 分钟来配置此设置。在此期间,值将为已阻止新的公开共享。API 完成配置后,该值将自动更改为已允许新的公共共享

Amazon CLI
在指定区域禁用阻止公开访问 AMI

使用 disable-image-block-public-access 命令并指定要禁用阻止公开访问 AMI 的区域。

aws ec2 disable-image-block-public-access --region us-east-1

预期输出

{ "ImageBlockPublicAccessState": "unblocked" }
注意

API 最多可能需要 10 分钟来配置此设置。在此期间,如果您运行 get-image-block-public-access-state 命令,则响应将是 block-new-sharing。当 API 完成配置后,响应将为 unblocked

查看 AMI 的阻止公共访问状态

要查看您的账户中是否禁止公开共享 AMI,您可以查看 AMI 的阻止公开访问状态。您必须在每个希望了解是否阻止 AMI 公开共享的 Amazon Web Services 区域 中查看此状态。

Console
查看指定区域中 AMI 的阻止公开访问状态
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航栏(位于屏幕顶部)中,选择查看 AMI 的阻止公开访问状态的区域。

  3. 如果未显示控制面板,则在导航窗格中选择 EC2 控制面板

  4. 账户属性下,选择数据保护和安全

  5. 阻止公开访问 AMI 下,选中公开访问字段。值为已阻止新的公开共享已允许新的公开共享

Amazon CLI
获取指定区域中 AMI 的阻止公开访问状态

使用 get-image-block-public-access-state 命令并指定要获取 AMI 的阻止公开访问 状态的区域。

aws ec2 get-image-block-public-access-state --region us-east-1

预期输出 – 值为 block-new-sharingunblocked

{ "ImageBlockPublicAccessState": "block-new-sharing" }