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), imágenes de máquinas y archivos de discos virtuales de otros entornos de nube o de tu entorno local si importas y exportas 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

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 las siguientes funciones:

    • 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'
    

API

  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 Cloud Console o la herramienta de gcloud para importar o exportar imágenes por primera vez, la herramienta intenta habilitar la API de Cloud Build y otorgar las funciones necesarias a 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:

  • Opcional: Función de usuario de la red de Compute (roles/compute.networkUser)

    Para exportar o importar imágenes que usen VPC compartidas, debes otorgar esta función a la cuenta de servicio de Cloud Build.

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 las funciones necesarias no se enumeran, haz lo siguiente:

    1. Haz clic en Agregar otra función.
    2. En la lista Seleccionar una función, selecciona las funciones obligatorias que deseas agregar:

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

        Como alternativa, puedes seleccionar la función Personalizada. Consulta la sección Permisos necesarios para la función personalizada de este documento.

      • Opcional: Compute Engine > Usuario de la red de Compute

  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.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_NUM@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_NUM@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_NUM@cloudbuild.gserviceaccount.com' \
       --role='roles/iam.serviceAccountTokenCreator'
    
  4. Si exportas o importas imágenes que usan VPC compartidas, otorga la función roles/compute.networkUser (opcional):

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

    Reemplaza HOST_PROJECT_ID por el ID del proyecto en el que se encuentra la VPC compartida.

API

  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"
         ]
       }
       {
         "roles":"roles/compute.networkUser",
         "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. 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
    

Para obtener más información sobre cómo 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 Cloud Console o la herramienta de gcloud para importar o exportar imágenes por primera vez, la herramienta intenta otorgar las funciones necesarias a la cuenta de servicio predeterminada de Compute Engine. Según la configuración predeterminada, esta cuenta tiene la función de editor de IAM (roles/editor) en el proyecto, que es suficiente para el proceso. La cuenta de servicio de Compute Engine debe tener las siguientes funciones:

  • 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.

Sin embargo, si modificaste las funciones y los permisos predeterminados de la cuenta de servicio de Compute Engine, asegúrate de que la cuenta de servicio aún tenga las funciones necesarias.

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 las siguientes funciones:

    • 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_NUM-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_NUM-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_NUM-compute@developer.gserviceaccount.com' \
      --role='roles/storage.objectAdmin'
    

API

  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?