将 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 时泄露敏感数据,请阅读 共享 Linux AMI 指导原则 中的安全注意事项并遵循建议的操作。

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

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

  • 账单 – 当其他 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. 选择保存更改

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" }