共享映像和快照

您可以与项目或组织外部的用户共享映像和快照。对这些资源具有读取权限的用户可以使用它们完成其他项目和组织中的操作。 举例来说,如果您向用户授予了对您项目中映像或快照的读取权限,那么他们可以在其自己的项目中使用这些资源创建永久性磁盘。 您可以使用 IAM 角色共享映像和快照的读取权限

在某些情况下,您可能会希望限制这些授权用户,只能在您的组织或特定项目中访问并使用这些资源。若要限制用户只能在特定项目中使用您的映像和快照创建资源,请设置存储资源使用限制作为组织政策。

如需详细了解 IAM 角色,请参阅 IAM 文档

如需了解资源级层的 IAM 政策(该政策允许您授予对映像等特定资源的访问权限,而不是整个项目的访问权限),请参阅授予对 Compute Engine 资源的访问权限

准备工作

限制

共享存储资源具有以下限制:

  • 无法向 allAuthenticatedUsersallUsers 授予允许访问映像或快照的角色。

  • 您只能在组织级层设置 constraints/compute.storageResourceUseRestrictions 限制。

  • 您必须使用 Compute Engine API 从项目外部的资源创建映像或快照。 例如,在运行要求您指定映像或快照路径的方法时,您可以引用远程项目中的映像和快照。下面是此类方法的一些示例:

跨项目和组织共享存储资源

您可以在资源、项目、文件夹或组织级层向其他用户授予以下 IAM 角色或权限,与他们共享映像和快照的访问权限。

  • 映像:roles/compute.imageUser 角色或 compute.images.useReadOnly 权限。
  • 快照:roles/compute.storageAdmin 角色或 compute.snapshots.useReadOnly 权限。

这些角色和权限可让您与拥有映像和快照的项目外的其他团队成员共享这些映像和快照。举例来说,您的公司可能有一个特定项目,其中包含公司其他人可以使用的符合条件的映像。您可以将项目级层的 roles/compute.imageUser 角色授予您的团队成员,以使这些团队成员能够在其自己的项目中使用这些映像。

要授予映像共享角色,请使用 GCP Console、gcloud 命令行工具或 API。如需了解如何使用 IAM,请参阅 IAM 文档

控制台

  1. 转到 GCP Console 中的 IAM 页面。

    转到 IAM 页面

  2. 如果出现提示,请选择您的项目。
  3. 要添加新用户,请执行以下操作:
    1. 点击页面顶部的添加
    2. 提供您要授予访问权限的帐号的一个或多个电子邮件地址。
    3. 将一个或多个角色授予该成员。
      • 映像:从角色选择器中选择 Compute Engine > Compute Image User
      • 快照:从角色选择器中选择 Compute Engine > Compute Storage Admin
  4. 保存更改。

gcloud

使用 gcloud 命令行工具,为映像或映像项目的 Cloud IAM 政策添加绑定。以下示例将向项目添加绑定。

gcloud projects add-iam-policy-binding [PROJECT_ID] \
    --member [MEMBER_TYPE]:[ACCOUNT] --role [ROLE]

其中:

  • [PROJECT_ID] 是您要共享的映像所属项目的 ID。
  • [MEMBER_TYPE] 是您要授予访问权限的帐号类型。 例如,对个人用户使用 user,对服务帐号使用 serviceAccount,对 Google 群组使用 group
  • [ACCOUNT] 是要授予此角色的帐号的电子邮件地址。例如,对于服务帐号,此值可能为 my-sa@my-project-123.iam.gserviceaccount.com
  • [ROLE] 是您要授予用户的角色。对于映像,请指定 roles/compute.imageUser;对于快照,请指定 roles/compute.storageAdmin

举例来说,以下命令会将 roles/compute.imageUser 角色授予 john@example.com,以便该用户可以访问名为 database-images 的项目中的映像:

gcloud projects add-iam-policy-binding database-images \
    --member user:john@example.com --role roles/compute.imageUser

API

在 API 中,向以下网址发出 POST 请求,其中 [PROJECT_ID] 是您要共享的映像所属项目的 ID。

POST https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT_ID]:setIamPolicy

请求正文应该包含您要应用于该项目的绑定列表。该角色应该是绑定的一部分。例如:

{
   "policy": {
       "version": "0",
       "bindings": [
       {
           "role": "roles/compute.admin",
           "members": [
               "user:example@gmail.com"
           ]
       },
       {
           "role": "roles/compute.imageUser",
           "members": [
               "user:john@gmail.com"
           ]
       }
       ]
   }

}

向托管实例组授予对映像的访问权限

通过 Compute Engine,您可以创建托管非托管实例组。如果您创建托管实例组,Compute Engine 将使用 Google API 服务帐号调用 Compute Engine API,并执行与该实例组相关的操作,例如重新创建运行状况不佳的实例及更新实例。如果您要使用其他项目中的映像创建托管实例组,可以将 compute.imageUser 角色授予 API 服务帐号(该帐号属于创建托管实例组的项目)。

举例来说,假设项目 A 想要使用项目 B 拥有的映像来创建托管实例组。项目 B 的所有者必须向项目 A 的 Google API 服务帐号授予项目 B 的 compute.imageUser 角色。 此角色会授权该帐号使用项目 B 中的映像在项目 A 中创建托管实例组。

授予 compute.imageUser 角色后,您可以在为该实例组创建实例模板时提供特定映像的网址。

请按照以下步骤获取服务帐号电子邮件地址并向该帐号授予访问权限:

  1. 在 GCP Console 中,转到要创建托管实例组的项目的 IAM 页面。

    转到 IAM 页面

  2. 如果出现提示,请从列表中选择您的项目。
  3. 查找 Google API 服务帐号,其电子邮件地址格式如下:

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. 记下上述电子邮件地址。接下来,向该帐号授予对拥有这些映像的项目的访问权限。

    控制台

    1. 在 Google Cloud Platform Console 中,转到您要访问的映像所属项目的 IAM 页面。

      转到 IAM 页面

    2. 从项目列表中选择项目。
    3. 点击添加按钮添加新成员。
    4. 成员框中,输入该服务帐号的电子邮件地址。
    5. 展开角色下拉列表,然后选择 Compute Engine > Compute Image User(测试版)。
    6. 点击添加以添加该帐号。

    gcloud

    使用 gcloud 命令行工具,为映像或映像项目的 Cloud IAM 政策添加绑定。以下示例会在项目级层添加绑定。

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
        --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/compute.imageUser

    其中:

    • [PROJECT_ID] 是您要共享的映像所属项目的 ID。
    • [SERVICE_ACCOUNT_EMAIL] 是该服务帐号的电子邮件地址。

    例如:

    gcloud projects add-iam-policy-binding database-images \
        --member serviceAccount:123456789012@cloudservices.gserviceaccount.com  \
        --role roles/compute.imageUser

    API

    在 API 中,向以下网址发出 POST 请求,其中 [PROJECT_ID] 是您要共享的映像所属项目的 ID。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/$[PROJECT_ID]:setIamPolicy
    

    请求正文应该包含您要应用于该项目的绑定列表。roles/compute.imageUser 角色应该是绑定的一部分。例如:

    {
       "policy": {
           "version": "0",
           "bindings": [
           {
               "role": "roles/owner",
               "members": [
                   "user:example@gmail.com"
               ]
           },
           {
               "role": "roles/compute.imageUser",
               "members": [
                   "serviceAccount:123456789012@cloudservices.gservbiceaccount.com"
               ]
           }
           ]
       }
    }
    

限制共享映像和快照的使用

与其他用户共享映像和快照后,您可以控制这些用户使用这些资源的位置。设置 constraints/compute.storageResourceUseRestrictions 限制可以定义用户可以在其中使用您的存储资源的项目。

您必须具有修改组织政策的权限才能设置这些限制。例如,resourcemanager.organizationAdmin 角色拥有设置这些限制的权限。

  1. 查找您的组织 ID。

    gcloud organizations list
    
  2. 获取您组织现有的政策设置。

    gcloud beta resource-manager org-policies describe \
        compute.storageResourceUseRestrictions \
        --organization [ORGANIZATION_ID] > org-policy.yaml
    

    其中,[ORGANIZATION_ID] 是您的组织 ID。

  3. 在文本编辑器中打开 org-policy.yaml 文件并修改 compute.storageResourceUseRestrictions 限制。添加所需的限制或移除不再需要的限制。 修改完此文件后,请保存更改。例如,您可以在政策文件中设置以下限制条目:

    constraint: compute.storageResourceUseRestrictions
    listPolicy:
      allowedValues:
        - under:organization/[ORGANIZATION_ID]
    
  4. policy.yaml 文件应用于您的组织。

    gcloud beta resource-manager org-policies set-policy
    --organization [ORGANIZATION_ID] org-policy.yaml
    

    其中,[ORGANIZATION_ID] 是您的组织 ID。

在配置完组织政策中的限制条件后,请进行测试以确保这些条件会创建您所需要的限制。

使用其他项目中的映像

如果某人向您授予了 compute.imageUser 角色,那么在您的请求中指定映像项目便可访问该项目中的映像。例如,如需获取可供您使用的映像列表,可以执行以下命令:

gcloud compute images list --project [IMAGE_PROJECT]

如需了解如何使用映像创建新资源(例如创建实例),请参阅创建和启动实例

例如,以下命令会使用项目 database-images 中名为 database-image-a 的映像创建一个实例:

gcloud compute instances create test-instance --image database-image-a --image-project database-images

同样,您可以使用该映像来创建永久性磁盘。如需了解如何使用映像创建磁盘,请参阅创建独立的根永久性磁盘

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档