本文档介绍了在 Compute Engine 上导入和导出映像的前提条件。
您可以通过从其他 Cloud Storage 导入和导出映像来共享其他云环境或本地环境中的虚拟机 (VM) 实例、虚拟磁盘文件和机器映像。以下核对清单总结了在导入和导出映像之前需要满足的要求:
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以选择以下任一选项向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
如果您要导出映像,导出工具会将映像上传到 Cloud Storage 存储桶。
如果您要导入映像,则必须先将映像上传到 Cloud Storage 存储桶。导入工具将文件从 Cloud Storage 存储桶下载到 Compute Engine,然后该工具通过磁盘文件在 Compute Engine 中创建映像。
- 用户账号。运行导入和导出命令使用的账号。
- Cloud Build 服务账号。导入或导出工具启用 Cloud Build API 时创建的默认 Cloud Build 服务账号。
- Compute Engine 服务账号。导入和导出工作流所需的默认或自定义 Compute Engine 服务账号。
- Storage Admin 角色 (
roles/storage.admin
) - Viewer 角色 (
roles/viewer
) - Project IAM Admin 角色 (
roles/resourcemanager.projectIamAdmin
) - Cloud Build Editor 角色 (
roles/cloudbuild.builds.editor
) 转到项目或组织对应的 IAM 和管理页面。
找到您的账号,然后点击
修改。在选择角色列表中,选择以下角色:
- Cloud Storage > Storage Admin
- 项目 > Viewer
- Resource Manager > Project IAM Admin
- Cloud Build > Cloud Build Editor
保存更改。
授予
roles/storage.admin
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/storage.admin'
替换以下内容:
PROJECT_ID
:您的项目的 Google Cloud 项目 IDMEMBER
:运行导入和导出命令的账号,例如user:export-user@gmail.com
授予
roles/viewer
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/viewer'
授予
roles/resourcemanager.projectIamAdmin
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/resourcemanager.projectIamAdmin'
授予
roles/cloudbuild.builds.editor
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='MEMBER' \ --role='roles/cloudbuild.builds.editor'
使用资源的
getIamPolicy
方法来读取现有政策。对于项目,请使用projects.getIamPolicy
方法。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
将
PROJECT_ID
替换为项目 ID,例如my-project-1
。如需为您的账号授予所需的角色,请使用文本编辑器修改政策。
例如,如需为您的账号
user:export-user@gmail.com
授予所需的角色,请将以下绑定添加到政策中:{ { "role":"roles/storage.admin", "member":[ "user:export-user@gmail.com" ] } { "roles":"roles/viewer", "member":[ "user:export-user@gmail.com" ] } { "roles":"roles/resourcemanager.projectIamAdmin", "member":[ "user:export-user@gmail.com" ] } { "roles":"roles/cloudbuild.builds.editor", "member":[ "user:export-user@gmail.com" ] } }
如需写入更新后的政策,请使用
setIamPolicy
方法。例如,要在项目级设置政策,请使用
project.setIamPolicy
方法。在请求正文中,提供上一步中更新的 IAM 政策。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
- Service Account Token Creator 角色 (
roles/iam.serviceAccountTokenCreator
) - Service Account User 角色 (
roles/iam.serviceAccountUser
) - Compute Admin 角色 (
roles/compute.admin
)为避免授予 Compute Admin 角色,您可以创建具有以下 Compute Engine IAM 权限的自定义角色,并为 Cloud Build 服务账号授予此角色:
- Compute Network User 角色 (
roles/compute.networkUser
)只有在导入或导出使用共享 VPC 的映像时,才需要此角色。
在共享 VPC 项目中,将 Compute Network User 角色授予您为其导入或导出映像的项目内的 Cloud Build 服务账号。
启用 Cloud Build API 后,转到项目或组织对应的 IAM 和管理页面。
找到 Cloud Build 服务账号,然后点击
修改。如果未列出所需的角色,请执行以下操作:
- 点击 添加其他角色。
在选择角色列表中,选择要添加的所需角色:
- 服务账号 > Service Account Token Creator
- 服务账号 > Service Account User
Compute Engine > Compute Admin
或者,您也可以选择自定义角色。请参阅本文档前面的自定义角色所需的权限。
点击保存以保存所做更改。
可选:如果您要导入或导出使用共享 VPC 的映像,请在共享 VPC 项目中选择 Compute Network User 角色:
- 从控制台顶部的项目选择器中,选择共享 VPC 宿主项目。
- 在 IAM 和管理页面上,点击 授予访问权限。
- 在新的主账号中,输入 Cloud Build 服务账号的电子邮件地址。
将PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
PROJECT_NUMBER
替换为要为其导入或导出映像的项目的唯一编号。 - 在选择角色列表中,选择 Compute Engine > Compute Network User 角色。
- 点击保存以保存所做更改。
将
roles/compute.admin
角色授予 Cloud Build 服务账号:为避免授予roles/compute.admin
角色,您可以创建具有所需权限的自定义角色,然后将该角色授予 Cloud Build 服务账号。请参阅本文档前面的自定义角色所需的权限。gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \ --role='roles/compute.admin'
替换以下内容:
PROJECT_ID
:您的项目的 Google Cloud 项目 IDPROJECT_NUMBER
:您的项目的 Google Cloud 项目编号
授予
roles/iam.serviceAccountUser
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \ --role='roles/iam.serviceAccountUser'
授予
roles/iam.serviceAccountTokenCreator
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \ --role='roles/iam.serviceAccountTokenCreator'
可选:如果您要导出或导入使用共享 VPC 的映像,请授予
roles/compute.networkUser
角色:gcloud projects add-iam-policy-binding HOST_PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \ --role='roles/compute.networkUser'
替换以下内容:
HOST_PROJECT_ID
:共享 VPC 所在宿主项目的 IDPROJECT_NUMBER
:您为其导入或导出映像的项目的唯一编号
使用资源的
getIamPolicy
方法来读取现有政策。对于项目,请使用projects.getIamPolicy
方法。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
将
PROJECT_ID
替换为项目 ID,例如my-project-1
。如需为您的账号授予所需的角色,请使用文本编辑器修改政策。
例如,如需为
serviceAccount:12345@cloudbuild.gserviceaccount.com
授予所需的角色,请将以下绑定添加到政策中:{ { "role":"roles/compute.admin", "member":[ "serviceAccount:12345@cloudbuild.gserviceaccount.com" ] } { "roles":"roles/iam.serviceAccountUser", "member":[ "serviceAccount:12345@cloudbuild.gserviceaccount.com" ] } { "roles":"roles/iam.serviceAccountTokenCreator", "member":[ "serviceAccount:12345@cloudbuild.gserviceaccount.com" ] } }
为避免授予
roles/compute.admin
角色,您可以创建具有所需权限的自定义角色,然后将该角色授予 Cloud Build 服务账号。请参阅本文档前面的自定义角色所需的权限。可选:如果您要导出或导入使用共享 VPC 的映像,请在共享 VPC 项目中授予
roles/compute.networkUser
角色。POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:getIamPolicy
将
HOST_PROJECT_ID
替换为共享 VPC 宿主项目的 ID。将以下 IAM 绑定添加到 Cloud Build 服务账号:
{ { "roles":"roles/compute.networkUser", "member":[ "serviceAccount:12345@cloudbuild.gserviceaccount.com" ] } }
如需写入更新后的政策,请使用
setIamPolicy
方法。例如,要在项目级设置政策,请使用
project.setIamPolicy
方法。在请求正文中,提供上一步中更新的 IAM 政策。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
- Compute Storage Admin 角色 (
roles/compute.storageAdmin
):导出和导入虚拟机映像所需的角色 - Storage Object Viewer 角色 (
roles/storage.objectViewer
):导入虚拟机映像所需的角色 - Storage Object Admin 角色 (
roles/storage.objectAdmin
):导出虚拟机映像所需的角色 转到项目或组织对应的 IAM 和管理页面。
找到 Compute Engine 服务账号,然后点击
修改。在选择角色列表中,选择以下角色:
- Compute Engine > Compute Storage Admin
- Cloud Storage > Storage Object Viewer
- Cloud Storage > Storage Object Admin
保存更改。
授予
roles/compute.storageAdmin
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \ --role='roles/compute.storageAdmin'
如果您要导入映像,请授予
roles/storage.objectViewer
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \ --role='roles/storage.objectViewer'
如果您要导出映像,请授予
roles/storage.objectAdmin
角色:gcloud projects add-iam-policy-binding PROJECT_ID \ --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \ --role='roles/storage.objectAdmin'
使用资源的
getIamPolicy
方法来读取现有政策。对于项目,请使用projects.getIamPolicy
方法。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
将
PROJECT_ID
替换为项目 ID,例如my-project-1
。如需为您的账号授予所需的角色,请使用文本编辑器修改政策。
例如,如需为
serviceAccount:12345-compute@developer.gserviceaccount.com
授予导入映像所需的角色,请将以下绑定添加到政策中:{ { "role":"roles/compute.storageAdmin", "member":[ "serviceAccount:12345-compute@developer.gserviceaccount.com" ] } { "roles":"roles/storage.objectViewer", "member":[ "serviceAccount:12345-compute@developer.gserviceaccount.com" ] } }
如需写入更新后的政策,请使用
setIamPolicy
方法。例如,要在项目级设置政策,请使用
project.setIamPolicy
方法。在请求正文中,提供上一步中更新的 IAM 政策。POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
设置对 Cloud Storage 存储桶的访问权限
您必须有权访问导入或导出工具可以使用的 Cloud Storage 存储桶。如果您没有 Cloud Storage 存储桶,请参阅创建 Cloud Storage 存储桶。
如需设置对 Cloud Storage 存储桶的访问权限,请参阅为您的账号授予所需的权限和为 Compute Engine 服务账号授予所需的权限。
授予所需的 IAM 角色
虚拟机映像导入和导出工具需要以下账号才能代表您执行操作:
为您的用户账号授予所需的角色
如需导入或导出映像,您的用户账号需要以下角色:
控制台
gcloud
在以下步骤中,您将使用
gcloud projects add-iam-policy-binding
命令在项目级层授予所需的角色。REST
为 Cloud Build 服务账号授予所需的角色
首次使用 Google Cloud 控制台或 gcloud CLI 导入或导出映像时,该工具会尝试启用 Cloud Build API 并为 Cloud Build 服务账号授予所需的角色。
不过,您可以手动授予这些角色,以确保所需权限已生效:
控制台
gcloud
在以下步骤中,您将使用
gcloud projects add-iam-policy-binding
命令在项目级层授予所需的角色。REST
如需详细了解如何管理对资源的访问权限,请参阅授予、更改和撤消对资源的访问权限。
为 Compute Engine 服务账号授予所需的角色
首次使用 Google Cloud 控制台或 gcloud CLI 导入或导出映像时,该工具会尝试将所需角色授予默认 Compute Engine 服务账号。
根据您的组织政策配置,默认服务账号可能会自动被授予项目的 Editor 角色。我们强烈建议您通过强制执行
iam.automaticIamGrantsForDefaultServiceAccounts
组织政策限制条件来停用自动角色授予功能。如果您的组织是在 2024 年 5 月 3 日之后创建的,则默认情况下会强制执行此限制条件。如果您停用自动角色授予功能,则必须决定向默认服务账号授予哪些角色,然后自行授予这些角色。
如果默认服务账号已具有 Editor 角色,我们建议您将 Editor 角色替换为权限较少的角色。如需安全地修改服务账号的角色,请使用 Policy Simulator 查看更改的影响,然后授予和撤消相应的角色。
您的 Compute Engine 服务账号必须具有以下角色:
控制台
gcloud
在以下步骤中,您将使用
gcloud projects add-iam-policy-binding
命令在项目级层授予所需的角色。REST
如果您不想使用默认的 Compute Engine 服务账号,则可以使用
gcloud
中的--compute-service-account
标志来指定用户管理的服务账号导入和导出命令。如需详细了解如何使用自定义 Compute Engine 服务账号,请参阅以下资源:后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-12-22。
-