与特定企业或组织部门共享 AMI - Amazon Elastic Compute Cloud

与特定企业或组织部门共享 AMI

AWS Organizations 是一项账户管理服务,可让您将多个 AWS 账户 整合到您创建并集中管理的组织中。除了与特定账户共享 AMI 之外,您还可以与您创建的企业或企业部门 (OU) 共享 AMI。

组织是指您创建用于整合和集中管理您的 AWS 账户 的实体。您可以以分层树状结构来组织账户,将放在树顶部,并将组织单位嵌套在组织根下。每个账户都可以直接添加到根中,也可以放在层次结构的其中一个 OU 中。有关更多信息,请参阅《AWS 用户指南》https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html中的 AWS Organizations Organizations 术语和概念

当您与企业或 OU 共享 AMI 时,所有子账户都可以访问该 AMI。例如,在下图中,AMI 与顶层 OU 共享(由数字 1 处的箭头指示)。嵌套在该顶层 OU 下面的所有 OU 和账户(由数字 2 处的虚线指示)还可以访问 AMI。组织中的账户和 OU 在虚线之外的账户(由数字 3 指示)没有访问该 AMI 的权限,因为它们不是 AMI 共享的 OU 的子级账户。


				AMI 与 OU 共享,所有子级 OU 和账户都可以访问 AMI。

注意事项

在与特定企业或企业部门共享 AMI 时,请考虑以下事项。

  • 所有权 – 若要共享 AMI,您的 AWS 账户 必须拥有 AMI。

  • 共享限制 – AMI 拥有者可以与任何组织或 OU 共享 AMI,包括他们不是其成员的组织和 OU。

    有关某一区域内可以共享 AMI 的最大实体数量,请参阅 Amazon EC2 服务限额

  • 标签 – 您无法共享用户定义的标签(附加到 AMI 的标签)。共享 AMI 时,与其共享 AMI 的组织或 OU 中的 AWS 账户 的任何用户均无法使用用户定义的标签。

  • ARN 格式 – 在命令中指定企业或 OU 时,请确保使用正确的 ARN 格式。如果只指定 ID,例如,如果您仅指定 o-123exampleou-1234-5example,则会出现错误。

    正确的 ARN 格式:

    • 企业 ARN:arn:aws:organizations::account-id:organization/organization-id

    • OU ARN:arn:aws:organizations::account-id:ou/organization-id/ou-id

    其中:

    • account-id 是 12 位管理账号,例如 123456789012。如果您不知道管理账号,您可以描述企业或企业部门以获取 ARN,其中包括管理账号。有关更多信息,请参阅 获取 ARN

    • organization-id 是企业 ID,例如 o-123example

    • ou-id 是企业部门 ID,例如 ou-1234-5example

    有关 ARN 格式的更多信息,请参阅 IAM 用户指南中的 Amazon 资源名称(ARN)

  • 加密和密钥 – 您可以共享由未加密和加密快照支持的 AMI。

    • 加密快照必须使用客户托管式密钥加密。您无法共享由使用默认 AWS 托管式密钥加密的快照支持的 AMI。

    • 如果您共享由加密快照支持的 AMI,则必须允许企业或 OU 使用用于加密快照的客户托管式密钥。有关更多信息,请参阅 允许企业和 OU 使用 KMS 密钥

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

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

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

允许企业和 OU 使用 KMS 密钥

如果您共享由加密快照支持的 AMI,则还须允许组织或 OU 使用用于加密快照的 AWS KMS keys。

使用 aws:PrincipalOrgIDaws:PrincipalOrgPaths 密钥可将发出请求的委托人的 AWS Organizations 路径与策略中的路径进行比较。该主体可以是用户、IAM 角色、联合用户或 AWS 账户 根用户。在策略中,此条件密钥可确保请求者是 AWS Organizations 中指定企业根或 OU 的账户成员。有关更多示例条件语句,请参阅《IAM 用户指南》https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid中的 aws:PrincipalOrgIDaws:PrincipalOrgPaths

有关编辑密钥政策的信息,请参阅《AWS Key Management Service 开发人员指南》中的允许其它账户中的用户使用 KMS 密钥

要向企业或 OU 授予使用 KMS 密钥的权限,请向密钥策略添加以下语句。

{ "Sid": "Allow access for organization root", "Effect": "Allow", "Principal": "*", "Action": [ "kms:Describe*", "kms:List*", "kms:Get*", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-123example" } } }

要与多个 OU 共享 KMS 密钥,则可以使用类似以下示例的策略。

{ "Sid": "Allow access for specific OUs and their descendants", "Effect": "Allow", "Principal": "*", "Action": [ "kms:Describe*", "kms:List*", "kms:Get*", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*" ], "Resource": "*", "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-123example" }, "ForAnyValue:StringLike": { "aws:PrincipalOrgPaths": [ "o-123example/r-ab12/ou-ab12-33333333/*", "o-123example/r-ab12/ou-ab12-22222222/*" ] } } }

共享 AMI

您可以使用 Amazon EC2 控制台或 AWS CLI 与企业或 OU 共享 AMI。

共享 AMI(控制台)

使用控制台与企业或 OU 共享 AMI
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

  3. 在列表中选择您的 AMI,然后选择 Actions然后选择 Edit AMI Permissions

  4. AMI availability(AMI 可用性)下,选择 Private(私有)。

  5. Shared organizations/OUs(共享企业/OU)旁,选择 Add organization/OU ARN(添加企业/OU ARN)。

  6. 对于 Organization/OU ARN(企业/OU ARN),输入要与之共享 AMI 的企业 ARN 或 OU ARN,然后选择 Share AMI(共享 AMI)。请注意,您必须指定完整 ARN,而不仅仅是 ID。

    要与多个企业或 OU 共享此 AMI,请重复此步骤,直至您添加完所需全部企业或 OU。

    注意

    您不需要为了共享 AMI 而共享 AMI 引用的 Amazon EBS 快照。只需共享 AMI 本身,系统自动为实例提供访问所引用 Amazon EBS 快照的权限以便启动。不过,您确实需要共享用于对 AMI 引用的快照加密的 KMS 密钥。有关更多信息,请参阅 允许企业和 OU 使用 KMS 密钥

  7. 完成后,选择 Save changes (保存更改)

  8. (可选)要查看您已共享 AMI 的企业或 OU,请在列表中选择此 AMI,然后选择 Permissions(权限)选项卡,然后向下滚动到 Shared organizations/OUs(共享企业/OU)。要查找与您共享的 AMI,请参阅查找共享 AMI

共享 AMI (Tools for Windows PowerShell)

使用 Edit-EC2ImageAttribute 命令(适用于 Windows PowerShell 的工具)共享 AMI,如以下示例所示。

与企业或 OU 共享 AMI

以下命令向指定企业授予指定 AMI 的启动许可。

PS C:\> Edit-EC2ImageAttribute -ImageId ami-0abcdef1234567890 -Attribute launchPermission -OperationType add -OrganizationArn "arn:aws:organizations::123456789012:organization/o-123example"
注意

您不需要为了共享 AMI 而共享 AMI 引用的 Amazon EBS 快照。只需共享 AMI 本身,系统自动为实例提供访问所引用 Amazon EBS 快照的权限以便启动。不过,您确实需要共享用于对 AMI 引用的快照加密的 KMS 密钥。有关更多信息,请参阅 允许企业和 OU 使用 KMS 密钥

停止与企业或 OU 共享 AMI

以下命令从指定企业中删除指定 AMI 的启动许可:

PS C:\> Edit-EC2ImageAttribute -ImageId ami-0abcdef1234567890 -Attribute launchPermission -OperationType remove -OrganizationArn "arn:aws:organizations::123456789012:organization/o-123example"

停止与所有组织、OU 和 AWS 账户 共享 AMI

以下命令从指定 AMI 中删除所有公用和显式启动许可。请注意,AMI 的拥有者始终具有启动许可,因此不受该命令影响。

PS C:\> Reset-EC2ImageAttribute -ImageId ami-0abcdef1234567890 -Attribute launchPermission

共享 AMI (AWS CLI)

使用 modify-image-attribute 命令(AWS CLI)共享 AMI。

使用 AWS CLI 与企业共享 AMI

modify-image-attribute 命令向指定组织授予指定 AMI 的启动权限。请注意,您必须指定完整 ARN,而不仅仅是 ID。

aws ec2 modify-image-attribute \ --image-id ami-0abcdef1234567890 \ --launch-permission "Add=[{OrganizationArn=arn:aws:organizations::123456789012:organization/o-123example}]"
使用 AWS CLI 与 OU 共享 AMI

modify-image-attribute 命令向指定 OU 授予指定 AMI 的启动许可。请注意,您必须指定完整 ARN,而不仅仅是 ID。

aws ec2 modify-image-attribute \ --image-id ami-0abcdef1234567890 \ --launch-permission "Add=[{OrganizationalUnitArn=arn:aws:organizations::123456789012:ou/o-123example/ou-1234-5example}]"
注意

您不需要为了共享 AMI 而共享 AMI 引用的 Amazon EBS 快照。只需共享 AMI 本身,系统自动为实例提供访问所引用 Amazon EBS 快照的权限以便启动。不过,您确实需要共享用于对 AMI 引用的快照加密的 KMS 密钥。有关更多信息,请参阅 允许企业和 OU 使用 KMS 密钥

停止共享 AMI

您可以使用 Amazon EC2 控制台或 AWS CLI 停止与企业或 OU 共享 AMI。

停止共享 AMI(控制台)

使用控制台停止与企业或 OU 共享 AMI
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

  3. 在列表中选择您的 AMI,然后选择 Actions然后选择 Edit AMI Permissions

  4. Shared organizations/OUs(共享企业/OU)下,选择要停止共享 AMI 的企业或 OU,然后选择 Remove selected(删除所选)。

  5. 完成后,选择 Save changes (保存更改)

  6. (可选)要确认您已停止与企业或 OU 共享 AMI,请在列表中选择此 AMI,然后选择 Permissions(权限)选项卡,然后向下滚动到 Shared organizations/OUs(共享企业/OU)。

停止共享 AMI (AWS CLI)

使用 modify-image-attributereset-image-attribute 命令 (AWS CLI) 停止共享 AMI。

使用 AWS CLI 停止与企业或 OU 共享 AMI

modify-image-attribute 命令从指定企业中删除指定 AMI 的启动许可。请注意,您必须指定 ARN。

aws ec2 modify-image-attribute \ --image-id ami-0abcdef1234567890 \ --launch-permission "Remove=[{OrganizationArn=arn:aws:organizations::123456789012:organization/o-123example}]"
使用 AWS CLI 停止与所有组织、OU 和 AWS 账户 共享 AMI

reset-image-attribute 命令从指定 AMI 中移除所有公共和显式启动权限。请注意,AMI 的拥有者始终具有启动许可,因此不受该命令影响。

aws ec2 reset-image-attribute \ --image-id ami-0abcdef1234567890 \ --attribute launchPermission
注意

如果某个特定账户位于您与之共享 AMI 的企业或 OU 中,则您无法停止与该账户共享 AMI 如果您尝试通过删除账户的启动许可来停止共享 AMI,Amazon EC2 将返回成功消息。但是,AMI 将继续与账户共享。

查看共享 AMI 的企业和 OU

您可以使用 Amazon EC2 控制台或 AWS CLI 以检查您与哪些企业和 OU 共享了 AMI。

查看共享 AMI 的企业和 OU(控制台)

要检查您使用控制台与哪些企业和 OU 共享了 AMI
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

  3. 在列表中选择您的 AMI,选择 Permissions(权限)选项卡,然后向下滚动到 Shared organizations/OUs(共享企业/OU)。

    要查找与您共享的 AMI,请参阅查找共享 AMI

查看共享 AMI 的企业和 OU (AWS CLI)

您可以使用 describe-image-attribute 命令(AWS CLI)和 launchPermission 属性,检查您已与哪些组织和 OU 共享了您的 AMI。

要检查您使用 AWS CLI 与哪些企业和 OU 共享了 AMI

describe-image-attribute 命令描述指定 AMI 的 launchPermission 属性,并返回与其共享该 AMI 的组织和 OU。

aws ec2 describe-image-attribute \ --image-id ami-0abcdef1234567890 \ --attribute launchPermission

响应示例

{ "ImageId": "ami-0abcdef1234567890", "LaunchPermissions": [ { "OrganizationalUnitArn": "arn:aws:organizations::111122223333:ou/o-123example/ou-1234-5example" } ] }

获取 ARN

企业和企业部门 ARN 包含 12 位数的管理账号。如果您不知道管理账号,您可以描述企业或企业部门以获取每个账号的 ARN。在以下示例中,123456789012 是管理账号。

在获得 ARN 之前,您必须拥有描述企业和企业部门的权限。以下示例策略提供了必要权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "organizations:Describe*" ], "Resource": "*" } ] }
获取企业的 ARN

使用 describe-organization 命令和设置为 'Organization.Arn'--query 参数以仅返回组织 ARN。

aws organizations describe-organization --query 'Organization.Arn'

响应示例

"arn:aws:organizations::123456789012:organization/o-123example"
获取企业部门的 ARN

使用 describe-organizational-unit 命令,指定 OU ID,然后将 --query 参数设置为 'OrganizationalUnit.Arn',以仅返回组织单位 ARN。

aws organizations describe-organizational-unit --organizational-unit-id ou-1234-5example --query 'OrganizationalUnit.Arn'

响应示例

"arn:aws:organizations::123456789012:ou/o-123example/ou-1234-5example"