Requisitos previos para importar y exportar imágenes de VM


En este documento, se describen los requisitos para importar y exportar imágenes en Compute Engine.

Puedes compartir instancias de máquinas virtuales (VM), archivos de discos virtuales e imágenes de máquinas desde otros entornos de nube o desde tu entorno local mediante la importación y exportación de imágenes desde Cloud Storage. En la siguiente lista de tareas, se resumen los requisitos que debes cumplir antes de importar y exportar imágenes:

  1. Configura el acceso a un bucket de Cloud Storage
  2. Otorga las funciones necesarias a tu cuenta de usuario
  3. Otorga funciones de IAM a la cuenta de servicio de Cloud Build
  4. Otorga funciones necesarias a la cuenta de servicio de Compute Engine

Antes de comenzar

  • Si aún no lo hiciste, configura la autenticación. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    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

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Para usar las muestras de la API de REST en esta página en un entorno de desarrollo local, debes usar las credenciales que proporcionas a la CLI de gcloud.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.

Configura el acceso a un bucket de Cloud Storage

Debes tener acceso a un bucket de Cloud Storage que la herramienta de importación o exportación pueda usar. Si no tienes un bucket de Cloud Storage, consulta Crea un bucket de Cloud Storage.

Para configurar el acceso al bucket de Cloud Storage, consulta Otorga funciones necesarias a tu cuenta y Cuenta de servicio de Compute Engine.

  • Si exportas una imagen, la herramienta de exportación sube la imagen al bucket de Cloud Storage.

  • Si importas una imagen, primero debes subirla al bucket de Cloud Storage. La herramienta de importación descarga el archivo del bucket de Cloud Storage a Compute Engine y, luego, crea una imagen en Compute Engine desde ese archivo de disco.

Otorga funciones de IAM necesarias

La herramienta de importación y exportación de imágenes de VM requiere las siguientes cuentas para realizar la operación en su nombre:

  • Cuenta de usuario. La cuenta desde la que ejecutas los comandos de importación y exportación.
  • Cuenta de servicio de Cloud Build. Una cuenta de servicio predeterminada de Cloud Build que se crea cuando la herramienta de importación o exportación habilita la API de Cloud Build.
  • Cuenta de servicio de Compute Engine. Una cuenta de servicio de Compute Engine predeterminada o personalizada que se requiere para el flujo de trabajo de importación y exportación.

Otorga las funciones necesarias a tu cuenta de usuario

Para importar o exportar imágenes, tu cuenta de usuario requiere las siguientes funciones:

  • Función de administrador de almacenamiento (roles/storage.admin)
  • Función de visualizador (roles/viewer)
  • Función de administrador de IAM del proyecto (roles/resourcemanager.projectIamAdmin)
  • Función de editor de Cloud Build (roles/cloudbuild.builds.editor)

Console

  1. Ve a la página IAM y administración de la organización o el proyecto.

    Ir a IAM y administración

  2. Busca tu cuenta y haz clic en Editar.

  3. En la lista Seleccionar una función, selecciona los siguientes roles:

    • Cloud Storage > Administrador de almacenamiento
    • Proyecto > Visualizador
    • Administrador de recursos > Administrador de IAM del proyecto
    • Cloud Build > Editor de Cloud Build
  4. Guarda los cambios.

gcloud

En los pasos siguientes, usarás el comando gcloud projects add-iam-policy-binding para otorgar las funciones obligatorias a nivel de proyecto.

  1. Otorga la función roles/storage.admin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/storage.admin'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • MEMBER: La cuenta que ejecuta los comandos de importación y exportación, por ejemplo, user:export-user@gmail.com.
  2. Otorga la función roles/viewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/viewer'
    
  3. Otorga la función roles/resourcemanager.projectIamAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/resourcemanager.projectIamAdmin'
    
  4. Otorga la función roles/cloudbuild.builds.editor:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/cloudbuild.builds.editor'
    

REST

  1. Lee la política existente con el método getIamPolicy correspondiente del recurso. Para los proyectos, usa el método projects.getIamPolicy.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    Reemplaza PROJECT_ID por el ID del proyecto para my-project-1.

  2. Para otorgar las funciones necesarias a tu cuenta, edita la política con un editor de texto.

    Por ejemplo, para otorgar la función necesaria a tu cuenta user:export-user@gmail.com, agrega la siguiente vinculación a la política:

    {
       {
         "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"
         ]
       }
    }
    
  3. Para escribir la política actualizada, usa el método setIamPolicy.

    Por ejemplo, para establecer una política a nivel de proyecto, usa el método project.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

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

Otorga funciones requeridas a la cuenta de servicio de Cloud Build

Cuando usas la consola de Google Cloud o la CLI de gcloud para importar o exportar imágenes por primera vez, la herramienta intenta habilitar la API de Cloud Build y otorgar los roles necesarios a la cuenta de servicio de Cloud Build.

  • Función de creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator)
  • Función de usuario de cuenta de servicio (roles/iam.serviceAccountUser)
  • Función de administrador de Compute (roles/compute.admin)

    Para evitar otorgar la función de administrador de Compute, puedes crear una función personalizada con los siguientes permisos de IAM de Compute Engine y otórgala a la cuenta de servicio de Cloud Build:

  • Rol Compute Network User (roles/compute.networkUser)

    Este rol solo es necesario cuando importas o exportas imágenes que usan VPC compartida.

    En el proyecto de VPC compartida, otorga el rol Compute Network User a la cuenta de servicio de Cloud Build que se encuentra en el proyecto en el que importas o exportas imágenes.

Sin embargo, puedes otorgarlos de forma manual para asegurarte de que los permisos obligatorios estén en vigor.

Console

  1. Después de habilitar la API de Cloud Build, ve a la página IAM y administración de la organización o el proyecto.

    Ir a IAM y administración

  2. Ubica la cuenta de servicio de Cloud Build y haz clic en Editar.

  3. Si los roles requeridos no se enumeran, haz lo siguiente:

    1. Haz clic en Agregar otra función.
    2. En la lista Seleccionar una función, selecciona los roles necesarios que deseas agregar:

      • Cuenta de servicio > Creador de token de cuenta de servicio
      • Cuenta de servicio > Usuario de cuenta de servicio
      • Compute Engine > Administrador de Compute.

        Como alternativa, puedes seleccionar lel rol Personalizado. Consulta la sección Permisos necesarios para el personalizado de este documento.

    3. Haz clic en Guardar para guardar los cambios.

  4. Opcional: Si importas o exportas imágenes que usan VPC compartida, selecciona el rol Compute Network User en el proyecto de VPC compartida:

    1. En el selector de proyectos en la parte superior de la consola, selecciona el proyecto host de VPC compartida.
    2. En la página IAM y administración, haz clic en Otorgar acceso.
    3. En el campo Principales nuevas, ingresa la dirección de correo electrónico de la cuenta de servicio de Cloud Build:
       PROJECT_NUMBER@cloudbuild.gserviceaccount.com'
       
      Reemplaza PROJECT_NUMBER por el número único del proyecto en el que importas o exportas imágenes.
    4. En la lista Seleccionar un rol, selecciona Compute Engine > rol Compute Network User.
    5. Haz clic en Guardar para guardar los cambios.

gcloud

En los pasos siguientes, usarás el comando gcloud projects add-iam-policy-binding para otorgar las funciones obligatorias a nivel de proyecto.

  1. Otorga la función roles/compute.admin a la cuenta de servicio de Cloud Build. Para evitar otorgar la función roles/compute.admin, puedes crear una función personalizada con los permisos necesarios y, luego, otorgar esa función a la cuenta de servicio de Cloud Build. Consulta Permisos necesarios para la función personalizada antes en este documento.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/compute.admin'
    

    Reemplaza lo siguiente:

  2. Otorga la función roles/iam.serviceAccountUser:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountUser'
    
  3. Otorga la función roles/iam.serviceAccountTokenCreator:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountTokenCreator'
    
  4. Opcional: Si exportas o importas imágenes que usan VPC compartidas, otorga el rol roles/compute.networkUser:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com' \
       --role='roles/compute.networkUser'
    

    Reemplaza lo siguiente:

    • HOST_PROJECT_ID: El ID del proyecto host en el que se encuentra la VPC compartida
    • PROJECT_NUMBER: El número único del proyecto en el que importas o exportas imágenes

REST

  1. Lee la política existente con el método getIamPolicy correspondiente del recurso. Para los proyectos, usa el método projects.getIamPolicy.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    Reemplaza PROJECT_ID por el ID del proyecto para my-project-1.

  2. Para otorgar las funciones necesarias a tu cuenta, edita la política con un editor de texto.

    Por ejemplo, para otorgar las funciones necesarias a serviceAccount:12345@cloudbuild.gserviceaccount.com, agrega la siguiente vinculación a la política:

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

    Para evitar otorgar la función roles/compute.admin, puedes crear una función personalizada con los permisos requeridos y, luego, otorgarla a la cuenta de servicio de Cloud Build. Consulta la sección Permisos necesarios para la función personalizada de este documento.

  3. Opcional: Si exportas o importas imágenes que usan una VPC compartida, otorga el rol roles/compute.networkUser en el proyecto de VPC compartida.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:getIamPolicy
    

    Reemplaza HOST_PROJECT_ID por el ID del proyecto de VPC compartida.

    Agrega la siguiente vinculación de IAM a la cuenta de servicio de Cloud Build:

    {
       {
         "roles":"roles/compute.networkUser",
         "member":[
           "serviceAccount:12345@cloudbuild.gserviceaccount.com"
         ]
       }
    }
    
  4. Para escribir la política actualizada, usa el método setIamPolicy.

    Por ejemplo, para establecer una política a nivel de proyecto, usa el método project.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

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

Si deseas obtener más información para administrar el acceso a los recursos, consulta Otorga, cambia y revoca el acceso a los recursos.

Otorga funciones necesarias a la cuenta de servicio de Compute Engine

Cuando usas la consola de Google Cloud o la CLI de gcloud para importar o exportar imágenes por primera vez, la herramienta intenta otorgar los roles necesarios a la cuenta de servicio predeterminada de Compute Engine.

Según la configuración de la política de la organización, es posible que a la cuenta de servicio predeterminada se le otorgue automáticamente el rol de editor en tu proyecto. Te recomendamos inhabilitar la concesión automática de roles; para ello, aplica la restricción de la política de la organización iam.automaticIamGrantsForDefaultServiceAccounts. Si creaste tu organización después del 3 de mayo de 2024, esta restricción se aplica de forma predeterminada.

Si inhabilitas la concesión automática de roles, debes decidir qué roles se deben otorgar a las cuentas de servicio predeterminadas y, luego, otorgar estos roles a ti mismo.

Si la cuenta de servicio predeterminada ya tiene el rol de editor, te recomendamos que reemplaces el rol de editor por roles menos permisivos. Para modificar de forma segura los roles de la cuenta de servicio, usa Policy Simulator para ver el impacto del cambio y, luego, otorga y revoca los roles adecuados.

La cuenta de servicio de Compute Engine debe tener los siguientes roles:

  • Función de administrador de almacenamiento de Compute (roles/compute.storageAdmin): Es necesaria para importar y exportar imágenes de VM.
  • Función de visualizador de objetos de almacenamiento (roles/storage.objectViewer): Es necesaria para importar imágenes de VM.
  • Función de administrador de objetos de almacenamiento (roles/storage.objectAdmin): Es necesaria para exportar imágenes de VM.

Console

  1. Ve a la página IAM y administración de la organización o el proyecto.

    Ir a IAM y administración

  2. Ubica la cuenta de servicio de Compute Engine y haz clic en Editar.

  3. En la lista Seleccionar una función, selecciona los siguientes roles:

    • Compute Engine > Administrador de almacenamiento de Compute
    • Cloud Storage > Visualizador de objetos de almacenamiento
    • Cloud Storage > Administrador de objetos de almacenamiento
  4. Guarda los cambios.

gcloud

En los pasos siguientes, usarás el comando gcloud projects add-iam-policy-binding para otorgar las funciones obligatorias a nivel de proyecto.

  1. Otorga la función roles/compute.storageAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/compute.storageAdmin'
    
  2. Si importas una imagen, otorga la función roles/storage.objectViewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectViewer'
    
  3. Si exportas una imagen, otorga la función roles/storage.objectAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectAdmin'
    

REST

  1. Lee la política existente con el método getIamPolicy correspondiente del recurso. Para los proyectos, usa el método projects.getIamPolicy.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    Reemplaza PROJECT_ID por el ID del proyecto para my-project-1.

  2. Para otorgar las funciones necesarias a tu cuenta, edita la política con un editor de texto.

    Por ejemplo, si deseas otorgar las funciones necesarias a serviceAccount:12345-compute@developer.gserviceaccount.com para importar una imagen, agrega la siguiente vinculación a la política:

    {
       {
         "role":"roles/compute.storageAdmin",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/storage.objectViewer",
         "member":[
           "serviceAccount:12345-compute@developer.gserviceaccount.com"
         ]
       }
    }
    
  3. Para escribir la política actualizada, usa el método setIamPolicy.

    Por ejemplo, para establecer una política a nivel de proyecto, usa el método project.setIamPolicy. En el cuerpo de la solicitud, proporciona la política de IAM actualizada del paso anterior.

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

Si no deseas usar la cuenta de servicio predeterminada de Compute Engine, puedes especificar una cuenta de servicio administrada por el usuario con la marca --compute-service-account en el comando de importar y exportar de gcloud. Para obtener más información sobre el uso de la cuenta de servicio personalizada de Compute Engine, consulta los siguientes recursos:

¿Qué sigue?