Administra la suplantación de identidad de cuentas de servicio

En esta página, se describe cómo permitir que los miembros y los recursos actúen en nombre de una cuenta de servicio de la administración de identidades y accesos (IAM). También se explica cómo ver qué miembros pueden actuar en nombre de una cuenta de servicio de IAM determinada.

Antes de comenzar

Asegúrate de comprender cómo funcionan las cuentas de servicio en IAM.

Permite a los miembros actuar en nombre de una cuenta de servicio

Hay varias funciones predefinidas que permiten que un miembro actúe en nombre de una cuenta de servicio:

  • Usuario de cuenta de servicio (roles/iam.serviceAccountUser): Permite que los miembros accedan de forma indirecta a todos los recursos a los que puede acceder la cuenta de servicio. Por ejemplo, si un miembro tiene la función de usuario de cuenta de servicio en una cuenta de servicio y la cuenta de servicio tiene la función de administrador de Cloud SQL (roles/cloudsql.admin) en el proyecto, el miembro puede actuar en nombre de una cuenta de servicio para crear una instancia de Cloud SQL.

    Además, los miembros con esta función pueden vincular una cuenta de servicio a un recurso, como se explica en esta página.

  • Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator): Permite que los miembros actúen en nombre de cuentas de servicio a fin de crear tokens de acceso OAuth 2.0 y firmar tokens web JSON (JWT) y BLOB binarios para poder usarlos en la autenticación. Consulta Crea credenciales para cuentas de servicio de corta duración si deseas obtener más detalles.

  • Usuario de Workload Identity (roles/iam.workloadIdentityUser): Permite que los miembros actúen en nombre de cuentas de servicio desde cargas de trabajo de GKE. Esta función no se puede otorgar en cuentas de servicio individuales, pero se puede otorgar en un proyecto, organización o carpeta.

Como alternativa, puedes otorgar una función predefinida o una función personalizada diferente que incluya los mismos permisos que estas funciones.

En las siguientes secciones, se describe cómo otorgar estas funciones en proyectos, carpetas y organizaciones, y en cuentas de servicio individuales. Elige el nivel en función el acceso que deseas otorgar:

Permite que un miembro actúe en nombre de varias cuentas de servicio

Para permitir que un miembro actúe en nombre de todas las cuentas de servicio creadas en un proyecto, organización o carpeta, otorga una función en el proyecto, la carpeta o la organización:

Console

  1. En Cloud Console, ve a la página IAM.

    Ir a la página IAM

  2. En el selector de proyectos en la parte superior de la página, elige el proyecto, la carpeta o la organización en los que deseas otorgar la función.

  3. Haz clic en Agregar.

  4. Ingresa la dirección de correo electrónico del miembro.

  5. Selecciona una función que permita que el miembro actúe en nombre de las cuentas de servicio. Consulta la lista de funciones para actuar en nombre de cuentas de servicio.

  6. Haz clic en Guardar.

Comando de gcloud

A fin de otorgar a un miembro una función que le permita actuar en nombre de una cuenta de servicio, modifica la política de IAM para el proyecto, la carpeta o la organización.

  1. Lee la política de IAM para el recurso:

    gcloud resource get-iam-policy resource-id \
        --format=json > policy.json
    

    Reemplaza los siguientes valores:

    • resource: El tipo de recurso en el que quieres establecer la política. Este valor debe ser uno de los siguientes: projects, resource-manager folders o organizations.
    • resource-id: El ID del recurso en el que deseas establecer la política.

    El comando almacena la política del recurso en un archivo policy.json.

    Si ya se estableció una política en el recurso, el archivo policy.json es similar al siguiente:

    {
      "bindings": [
        {
          "members": [
            "user:hollis@example.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    

    Si no hay una política en el recurso, el archivo policy.json solo contiene la etag predeterminada.

    Cuando no hay una política existente, créala de forma manual. Para ello, usa el JSON en los siguientes pasos como una plantilla.

  2. Modifica la política para otorgar las funciones adecuadas a los miembros. Para otorgar una función, realiza una de las siguientes acciones:

    • Si no hay una vinculación existente para la función, agrega un objeto al arreglo bindings que indique la función que deseas otorgar y el miembro al que deseas otorgarla.
    • Si ya existe una vinculación para la función, agrega el miembro nuevo a la lista de miembros existentes. Si tu política incluye vinculaciones de funciones condicionales, también asegúrate de que la vinculación tenga las condiciones adecuadas antes de agregar el miembro.

    Si aún no existe el arreglo bindings, puedes crearlo.

    Ejemplo

    Para otorgar la función de usuario de cuenta de servicio (roles/iam.serviceAccountUser) a robin@example.com, cambia el ejemplo que se muestra en el paso anterior de la siguiente manera:

    {
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/owner",
          "members": [
            "user:hollis@example.com"
          ]
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    
  3. Escribe la política actualizada:

    gcloud resource set-iam-policy resource-id \
        policy-file
    

    Reemplaza los siguientes valores:

    • resource: El tipo de recurso en el que quieres establecer la política. Este valor debe ser uno de los siguientes: projects, resource-manager folders o organizations.
    • resource-id: El ID del recurso en el que deseas establecer la política.
    • policy-file: La ruta al archivo que contiene la política actualizada.

    El comando imprime la política actualizada con un valor etag actualizado.

API de REST

Si deseas otorgar una función mediante la API de REST de Resource Manager, debes leer la política de IAM actual para el proyecto, la carpeta o la organización, modificar la política a fin de otorgar las funciones deseadas y, luego, escribir la política actualizada.

Lee la política de IAM para el recurso.

El método getIamPolicy de la API de Resource Manager obtiene un proyecto, carpeta o política de IAM de la organización.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • api-version: La versión de la API que se usará. Para los proyectos y las organizaciones, usa v1. Para las carpetas, usa v2.
  • resource-type: El tipo de recurso cuya política deseas administrar. Usa el valor projects, folders o organizations.
  • resource-id: El proyecto ID de la carpeta, la organización o el proyecto de Google Cloud.
  • policy-version: La versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

Método HTTP y URL:

POST https://cloudresourcemanager.googleapis.com/api-version/resource-type/resource-id:getIamPolicy

Cuerpo JSON de la solicitud:

{
  "options": {
    "requestedPolicyVersion": policy-version
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:owner@example.com"
      ]
    }
  ]
}

Cuando no hay una política existente, la respuesta solo contiene la etag predeterminada. Si obtienes esta respuesta, agrega un campo version, configurado como 3, y un campo bindings, configurado como un arreglo vacío.

Modifica la política para otorgar las funciones adecuadas a los miembros.

Para otorgar una función, realiza una de las siguientes acciones:

  • Si no hay una vinculación existente para la función, agrega un objeto al arreglo bindings que indique la función que deseas otorgar y el miembro al que deseas otorgarla.
  • Si ya existe una vinculación para la función, agrega el miembro nuevo a la lista de miembros existentes.

Ejemplo:

Para otorgar la función de usuario de cuenta de servicio (roles/iam.serviceAccountUser) a robin@example.com, cambia el ejemplo que se muestra en el paso anterior de la siguiente manera:

{
  "version": 1,
  "etag": "BwUqLaVeua8=",
  "bindings": [
    {
      "role": "roles/iam.serviceAccountUser",
      "members": [
        "user:robin@example.com"
      ]
    },
    {
      "role": "roles/owner",
      "members": [
        "user:owner@example.com"
      ]
    }
  ]
}

Escribe la política actualizada.

El método setIamPolicy de la API de Resource Manager establece la política en la solicitud como la política de IAM nueva para el proyecto, la carpeta o la organización.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • api-version: La versión de la API que se usará. Para los proyectos y las organizaciones, usa v1. Para las carpetas, usa v2.
  • resource-type: El tipo de recurso cuya política deseas administrar. Usa el valor projects, folders o organizations.
  • resource-id: El proyecto ID de la carpeta, la organización o el proyecto de Google Cloud.
  • policy: Una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta Referencia de políticas.

    Por ejemplo, para establecer la política que se muestra en el paso anterior, reemplaza policy por lo siguiente:

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/owner",
          "members": [
            "user:owner@example.com"
          ]
        }
      ]
    }
    

Método HTTP y URL:

POST https://iam.googleapis.com/api-version/resource-type/resource-id:setIamPolicy

Cuerpo JSON de la solicitud:

{
  "policy": policy
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la política actualizada.

Permite que un miembro actúe en nombre de una sola cuenta de servicio

Para permitir que un miembro actúe en nombre de una sola cuenta de servicio, otorga una función en ella:

Console

  1. En Cloud Console, ve a la página Cuentas de servicio.

    Ir a la página Cuentas de servicio

  2. Haz clic en Seleccionar un proyecto, elige un proyecto y haz clic en Abrir.

  3. Selecciona una cuenta de servicio. Si el panel de información no está visible, haz clic en Mostrar panel de información. El panel muestra una lista de funciones que se otorgaron en la cuenta de servicio.

  4. Haz clic en Agregar miembro.

  5. Ingresa la dirección de correo electrónico del miembro.

  6. Selecciona una función que otorgue permiso al miembro para actuar en nombre de las cuentas de servicio. Consulta la lista de funciones para actuar en nombre de cuentas de servicio.

  7. Haz clic en Agregar para aplicar la función al miembro del proyecto.

A fin de otorgar funciones en varias cuentas de servicio, repite estos pasos para cada cuenta de servicio.

Comando de gcloud

A fin de otorgar a un miembro una función que le permita actuar en nombre de una cuenta de servicio, modifica la política de IAM para la cuenta de servicio.

  1. Usa el comando service-accounts get-iam-policy para leer la política actual:

    gcloud iam service-accounts get-iam-policy sa-id \
        --format=json > policy.json
    

    Reemplaza los siguientes valores:

    • sa-id: El ID de la cuenta de servicio. Puede ser la dirección de correo electrónico de la cuenta de servicio con el formato sa-name@project-id.iam.gserviceaccount.com o el ID numérico único de la cuenta de servicio.

    El comando almacena la política de la cuenta de servicio en un archivo policy.json.

    Si ya se estableció una política en la cuenta de servicio, el archivo policy.json es similar a lo siguiente:

    {
      "bindings": [
        {
          "members": [
            "user:hollis@example.com"
          ],
          "role": "roles/iam.serviceAccountAdmin"
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    

    Si no hay una política establecida en la cuenta de servicio, el archivo policy.json solo contiene la etag predeterminada.

    Cuando no hay una política existente, créala de forma manual. Para ello, usa el JSON en los siguientes pasos como una plantilla.

  2. En un editor de texto, modifica el arreglo de vinculaciones en el archivo policy.json para otorgar las funciones adecuadas a los miembros. Para otorgar una función, realiza una de las siguientes acciones:

    • Si no hay una vinculación existente para la función, agrega un objeto nuevo al arreglo bindings que defina la función que deseas otorgar y el miembro al que deseas otorgarla.
    • Si ya existe una vinculación para la función, agrega el miembro nuevo a la lista de miembros existentes. Si tu política incluye vinculaciones de funciones condicionales, también asegúrate de que la vinculación tenga las condiciones adecuadas antes de agregar el miembro.

    Si aún no existe el arreglo bindings, puedes crearlo.

    Ejemplo

    Para otorgar la función de usuario de cuenta de servicio (roles/iam.serviceAccountUser) a robin@example.com, cambia el ejemplo que se muestra en el paso anterior de la siguiente manera:

    {
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountAdmin",
          "members": [
            "user:hollis@example.com"
          ]
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    
  3. Usa el comando service-accounts set-iam-policy para escribir la política actualizada:

    gcloud iam service-accounts set-iam-policy sa-id \
        policy-file
    

    Reemplaza los siguientes valores:

    • sa-id: El ID de la cuenta de servicio. Puede ser la dirección de correo electrónico de la cuenta de servicio con el formato sa-name@project-id.iam.gserviceaccount.com o el ID numérico único de la cuenta de servicio.
    • policy-file: La ruta al archivo que contiene la política actualizada.

    El comando imprime la política actualizada con un valor etag actualizado.

API de REST

A fin de otorgar una función mediante la API de REST de IAM, debes leer la política de IAM actual de la cuenta de servicio, modificarla para otorgar las funciones deseadas y, luego, escribir la política actualizada.

Lee la política de IAM de la cuenta de servicio.

El método serviceAccounts.getIamPolicy obtiene la política de IAM de una cuenta de servicio.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto de Google Cloud.
  • sa-id: El ID de la cuenta de servicio. Puede ser la dirección de correo electrónico de la cuenta de servicio con el formato sa-name@project-id.iam.gserviceaccount.com o el ID numérico único de la cuenta de servicio.
  • policy-version: La versión de la política que se mostrará. Las solicitudes deben especificar la versión de política más reciente, que es la versión de política 3. Consulta Especifica una versión de política cuando obtienes una política para obtener más detalles.

Método HTTP y URL:

POST https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-id:getIamPolicy

Cuerpo JSON de la solicitud:

{
  "options": {
    "requestedPolicyVersion": policy-version
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    }
  ]
}

Cuando no hay una política existente, la respuesta solo contiene la etag predeterminada. Si obtienes esta respuesta, agrega un campo version, configurado como 3, y un campo bindings, configurado como un arreglo vacío.

Modifica la política para otorgar las funciones adecuadas a los miembros.

En un editor de texto, modifica el arreglo de vinculaciones del cuerpo de la respuesta para otorgar las funciones adecuadas a los miembros. Para otorgar una función, realiza una de las siguientes acciones:

  • Si no hay una vinculación existente para la función, agrega un objeto nuevo al arreglo bindings que defina la función que deseas otorgar y el miembro al que deseas otorgarla.
  • Si ya existe una vinculación para la función, agrega el miembro nuevo a la lista de miembros existentes.

Ejemplo:

Para otorgar la función de usuario de cuenta de servicio (roles/iam.serviceAccountUser) a robin@example.com, cambia el ejemplo que se muestra en el paso anterior de la siguiente manera:

{
  "version": 1,
  "etag": "BwUqLaVeua8=",
  "bindings": [
    {
      "role": "roles/iam.serviceAccountUser",
      "members": [
        "user:robin@example.com"
      ]
    },
    {
      "role": "roles/iam.serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    }
  ]
}

Escribe la política actualizada.

El método serviceAccounts.setIamPolicy configura la política en la solicitud como la política de IAM nueva para la cuenta de servicio.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • project-id: El ID del proyecto de Google Cloud.
  • sa-id: El ID de la cuenta de servicio. Puede ser la dirección de correo electrónico de la cuenta de servicio con el formato sa-name@project-id.iam.gserviceaccount.com o el ID numérico único de la cuenta de servicio.
  • policy: Una representación JSON de la política que deseas establecer. Para obtener más información sobre el formato de una política, consulta Referencia de políticas.

    Por ejemplo, para establecer la política que se muestra en el paso anterior, reemplaza policy por lo siguiente:

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

Método HTTP y URL:

POST https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-id:getIamPolicy

Cuerpo JSON de la solicitud:

{
  "policy": policy
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la política actualizada.

Enumera los miembros que pueden acceder a una cuenta de servicio

Usa Cloud Console para ver todos los miembros que tienen acceso a una cuenta de servicio, ya sea por las funciones otorgadas en la cuenta de servicio, el proyecto, la carpeta o la organización:

  1. En Cloud Console, ve a la página Cuentas de servicio.

    Ir a la página Cuentas de servicio

  2. Haz clic en Seleccionar un proyecto, elige un proyecto y haz clic en Abrir.

  3. Selecciona la casilla de verificación junto a la cuenta de servicio deseada.

  4. Si el panel de información no está visible, haz clic en Mostrar panel de información. Se muestra una lista de las funciones que se otorgaron en la cuenta de servicio.

  5. Expande cada función para ver los miembros a los que se les otorgó esa función en la cuenta de servicio.

Conecta una cuenta de servicio a un recurso

Para algunos recursos de Google Cloud, puedes especificar una cuenta de servicio administrada por el usuario que el recurso use como su identidad predeterminada. Este proceso se conoce como conectar la cuenta de servicio al recurso o asociar la cuenta de servicio al recurso.

Cuando el recurso necesita acceder a otros servicios y recursos de Google Cloud, actúa en nombre de la cuenta de servicio conectada al recurso. Por ejemplo, si conectas una cuenta de servicio a una instancia de Compute Engine, las aplicaciones en la instancia usarán de forma automática esa cuenta de servicio cuando llamen a las API de Google Cloud.

En la mayoría de los casos, debes conectar una cuenta de servicio a un recurso cuando lo creas. Después de crear el recurso, no puedes cambiar qué cuenta de servicio está conectada al recurso. Las instancias de Compute Engine son una excepción a esta regla. Puedes cambiar la cuenta de servicio conectada a una instancia según sea necesario.

Consulta las instrucciones correspondientes al tipo de recurso que quieres crear:

Conecta una cuenta de servicio cuando creas un recurso
AI Platform Notebooks Instancias de Notebook
AI Platform Prediction Versiones de modelos
AI Platform Training Trabajos
Cloud Composer Entornos
Cloud Functions Función de Cloud Functions
Cloud Life Sciences Canalizaciones
Cloud Run Servicios
Cloud Scheduler Trabajos
Cloud Source Repositories
Compute Engine
Dataflow Trabajos
Datalab Instancias
Dataproc Clústeres
Google Kubernetes Engine
Pub/Sub Suscripciones

Después de crear el recurso y de conectar la cuenta de servicio a ese recurso, puedes otorgar funciones a la cuenta de servicio para que pueda acceder a los recursos adecuados. Este proceso equivale a otorgar una función a cualquier otro miembro.

Para obtener información sobre cómo otorgar funciones, consulta Otorga, cambia y revoca el acceso a los recursos.

Próximos pasos