Administra el robo de identidad de cuentas de servicio

En esta página, se describe cómo permitir que las principales y los recursos actúen en nombre de una cuenta de servicio de Identity and Access Management (IAM). También se explica cómo ver qué principales pueden actuar en nombre de una cuenta de servicio de IAM determinada.

Antes de comenzar

Permite que las principales actúen en nombre de cuentas de servicio

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

  • Usuario de cuenta de servicio (roles/iam.serviceAccountUser): Permite que las principales accedan de forma indirecta a todos los recursos a los que puede acceder la cuenta de servicio. Por ejemplo, si una principal 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, la principal puede actuar en nombre de una cuenta de servicio para crear una instancia de Cloud SQL.

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

    Esta función no permite que los principales creen credenciales de corta duración para cuentas de servicio ni usen la marca --impersonate-service-account para la herramienta de línea de comandos de gcloud. Para completar estas tareas, también necesitas la función de creador de tokens de cuentas de servicio.

  • Creador de tokens de cuenta de servicio (roles/iam.serviceAccountTokenCreator): Permite que las principales actúen en nombre de cuentas de servicio a fin de crear tokens de acceso OAuth 2.0, que puedes usar para autenticar con las API de Google. También permite que los principales firmen tokens web JSON (JWT) y BLOB binarios, de modo que se puedan usar para 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 las principales actúen en nombre de cuentas de servicio desde cargas de trabajo de GKE.

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 una principal actúe en nombre de varias cuentas de servicio

Para permitir que una principal 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. Haga clic en Agregar.

  4. Ingresa la dirección de correo electrónico de tu principal.

  5. Selecciona una función que permita que la principal 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.

gcloud

A fin de otorgar a una principal 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 las principales. 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 la principal a la que deseas otorgarla.
    • Si ya existe una vinculación para la función, agrega la principal nueva a la lista de principales 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 la principal.

    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.

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 la política de IAM de un proyecto, una carpeta o una 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. Los ID de proyecto son strings alfanuméricas, como my-project. Los ID de carpeta y organización son numéricos, como 123456789012.
  • POLICY_VERSION: Es 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:

La respuesta contiene la política de IAM del proyecto. Por ejemplo:

{
  "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 las principales.

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 la principal a la que deseas otorgarla.
  • Si ya existe una vinculación para la función, agrega la principal nuevo a la lista de principales 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. Los ID de proyecto son strings alfanuméricas, como my-project. Los ID de carpeta y organización son numéricos, como 123456789012.
  • 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 una principal actúe en nombre de una sola cuenta de servicio

Para permitir que una principal 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. Selecciona un proyecto.

  3. Haz clic en la dirección de correo electrónico de la cuenta de servicio que deseas que la principal pueda representar o actuar en su nombre.

  4. Haz clic en la pestaña Permisos.

  5. En Principales con acceso a esta cuenta de servicio, haz clic en Otorgar acceso.

  6. Ingresa la dirección de correo electrónico de tu principal.

  7. Selecciona una función que otorgue permiso a la principal para actuar en nombre de las cuentas de servicio. Consulta la lista de funciones para actuar en nombre de cuentas de servicio.

  8. Haz clic en Guardar para aplicar la función a la principal.

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

gcloud

A fin de otorgar a una principal 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 las principales. 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 la principal a la que deseas otorgarla.
    • Si ya existe una vinculación para la función, agrega la principal nueva a la lista de principales 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 la principal.

    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.

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 Los ID de proyecto son strings alfanuméricas, como my-project.
  • 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: Es 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:

La respuesta contiene la política de IAM de la cuenta de servicio. Por ejemplo:

{
  "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 las principales.

En un editor de texto, modifica el arreglo de vinculaciones del cuerpo de la respuesta para otorgar las funciones adecuadas a las principales. 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 la principal a la que deseas otorgarla.
  • Si ya existe una vinculación para la función, agrega la principal nuevo a la lista de principales 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.

Mediante el método serviceAccounts.setIamPolicy, se configura una política de IAM actualizada 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 Los ID de proyecto son strings alfanuméricas, como my-project.
  • 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: Es 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:setIamPolicy

Cuerpo JSON de la solicitud:

{
  "policy": POLICY
}

Para enviar tu solicitud, expande una de estas opciones:

La respuesta contiene la política actualizada.

Enumera las principales que pueden acceder a una cuenta de servicio

Usa Cloud Console para ver todos las principales 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 Cuentas de servicio

  2. Selecciona un proyecto.

  3. Haz clic en la dirección de correo electrónico de la cuenta de servicio que deseas que la principal pueda representar o actuar en su nombre.

  4. Haz clic en la pestaña Permisos. En la sección Principales con acceso a esta cuenta de servicio, se enumeran las principales que pueden acceder a 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 un recurso necesita acceder a otros servicios y recursos de Google Cloud, actúa en nombre de la cuenta de servicio a la que está conectado. Por ejemplo, si conectas una cuenta de servicio a una instancia de Compute Engine, y las aplicaciones en la instancia usan una biblioteca cliente para llamar a las API de Google Cloud, esas aplicaciones automáticamente actúan en nombre de la cuenta de servicio conectada.

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.

Antes de conectar una cuenta de servicio a un recurso, debes configurar la cuenta de servicio. Este proceso difiere según si la cuenta de servicio y el recurso se encuentran en el mismo proyecto o en proyectos distintos. Después de configurar la cuenta de servicio, puedes crear el recurso y conectar la cuenta de servicio a ese recurso.

Configura un recurso en el mismo proyecto

Antes de conectar una cuenta de servicio a otro recurso en el mismo proyecto, otorga funciones a la cuenta de servicio para que pueda acceder a los recursos adecuados, tal como le otorgarías funciones a cualquier otra principal.

Configura un recurso en un proyecto diferente

En algunos casos, es posible que debas conectar una cuenta de servicio a un recurso que se encuentre en un proyecto diferente. Por ejemplo, si creas todas tus cuentas de servicio en un solo proyecto, es posible que debas conectar una de ellas a un recurso nuevo en un proyecto diferente.

Antes de conectar una cuenta de servicio a un recurso en otro proyecto, haz lo siguiente:

  1. En el proyecto en el que se encuentra la cuenta de servicio, sigue los pasos que se indican en esta página para habilitar el uso de la identidad de la cuenta de servicio en todos los proyectos.
  2. Identifica el proyecto en el que crearás el recurso.
  3. Identifica el tipo de recurso al que conectarás la cuenta de servicio y el servicio que posee ese tipo de recurso.

    Por ejemplo, si creas una suscripción de Pub/Sub, entonces, este es el servicio que posee el recurso.

  4. Busca la dirección de correo electrónico del agente de servicio correspondiente.

    Los distintos servicios usan diferentes agentes de servicio. Para obtener más información, consulta Agentes de servicio.

  5. Otorga la función de creador de tokens de la cuenta de servicio (roles/iam.serviceAccountTokenCreator) a los agentes de servicio:

    Console

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

      Ir a Cuentas de servicio

    2. Selecciona el proyecto que posee la cuenta de servicio que conectarás a un recurso.

    3. Busca la cuenta de servicio que conectarás a un recurso y selecciona su casilla de verificación.

    4. En el panel Permisos, haz clic en Agregar principal.

    5. En el campo Principales nuevas, ingresa la dirección de correo electrónico del agente de servicio.

    6. En la lista desplegable Selecciona una función, escribe Service Account Token Creator y, luego, haz clic en la función.

    7. Haz clic en Guardar para guardar los cambios.

    8. Si necesitas otorgar la función a otro agente de servicio, repite los pasos anteriores (opcional).

    gcloud

    Usa el comando de gcloud iam service-accounts add-iam-policy-binding:

    gcloud iam service-accounts add-iam-policy-binding \
        user-sa-name@project-id.iam.gserviceaccount.com \
        --member=serviceAccount:service-agent-email \
        --role=roles/iam.serviceAccountTokenCreator
    

    Reemplaza los siguientes valores:

    • user-sa-name: Es el nombre de la cuenta de servicio administrada por el usuario que estás conectando a un recurso.
    • project-id: Es el ID del proyecto en el que se encuentra la cuenta de servicio administrada por el usuario.
    • service-agent-email: es la dirección de correo electrónico del agente de servicio.

    El comando imprime la política de IAM actualizada para la cuenta de servicio administrada por el usuario.

    Si necesitas otorgar la función a otro agente de servicio, vuelve a ejecutar el comando (opcional).

    REST

    A fin de otorgar esta función, usa el patrón de lectura, modificación y escritura para actualizar la política de IAM de tu cuenta de servicio administrada por el usuario.

    En primer lugar, lee la política de IAM para la cuenta de servicio administrada por el usuario:

    El método projects.serviceAccounts.getIamPolicy muestra la política de IAM 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 Los ID de proyecto son strings alfanuméricas, como my-project.
    • USER_SA_NAME: El nombre de la cuenta de servicio administrada por el usuario que estás vinculando a un recurso.

    Método HTTP y URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy

    Cuerpo JSON de la solicitud:

    {
      "requestedPolicyVersion": 3
    }
    

    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": "BwWl3KCTUMY=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

    A continuación, modifica la política para otorgar la función de creador de tokens de la cuenta de servicio al agente de servicio. Reemplaza SERVICE_AGENT_EMAIL por la dirección de correo electrónico del agente de servicio.

    {
      "version": 1,
      "etag": "BwWl3KCTUMY=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SERVICE_AGENT_EMAIL"
          ]
        },
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

    Por último, escribe la política actualizada:

    El método projects.serviceAccounts.setIamPolicy actualiza la política de IAM para tu 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 Los ID de proyecto son strings alfanuméricas, como my-project.
    • USER_SA_NAME: El nombre de la cuenta de servicio administrada por el usuario que estás vinculando a un recurso.
    • SERVICE_AGENT_EMAIL: es la dirección de correo electrónico del agente de servicio que creará los tokens de acceso para la cuenta de servicio administrada por el usuario.

    Método HTTP y URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy

    Cuerpo JSON de la solicitud:

    {
      "policy": {
        "version": 1,
        "etag": "BwWl3KCTUMY=",
        "bindings": [
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:SERVICE_AGENT_EMAIL"
            ]
          },
          {
            "role": "roles/iam.serviceAccountUser",
            "members": [
              "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
            ]
          }
        ]
      }
    }
    

    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": "BwWo331TkHE=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SERVICE_AGENT_EMAIL"
          ]
        },
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

Conecta la cuenta de servicio al recurso nuevo

Después de configurar la cuenta de servicio administrada por el usuario, puedes crear un recurso nuevo y conectar la cuenta de servicio a ese recurso. Asegúrate de crear el recurso nuevo en el proyecto correspondiente.

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

Conecta una cuenta de servicio cuando creas un recurso
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
Notebooks Instancias de notebook
Pub/Sub Suscripciones
Vertex AI

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 otra principal.

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

Interpreta los registros de auditoría

Los Registros de auditoría de Cloud te ayudan a responder las preguntas “¿Quién hizo qué, dónde y cuándo?” para tus recursos de Google Cloud.

Cuando usas credenciales de corta duración para actuar en nombre de una cuenta de servicio, la mayoría de los servicios de Google Cloud crean entradas de registro que muestran las siguientes identidades:

  • La cuenta de servicio que suplantan las credenciales de corta duración
  • La identidad que creó las credenciales de corta duración

Puedes usar estas entradas de registro para identificar a la principal que creó las credenciales de corta duración, así como la cuenta de servicio cuya identidad usó la principal.

Para ver ejemplos de entradas de registro de auditoría que muestran el uso de la identidad de cuentas de servicio, consulta Actúa como una cuenta de servicio para acceder a Google Cloud.

Habilita el uso de la identidad de cuentas de servicio en todos los proyectos

De forma predeterminada, no puedes crear una cuenta de servicio en un proyecto y conectarla a un recurso en otro proyecto. Si deseas conservar todas tus cuentas de servicio en un proyecto, debes actualizar la política de la organización para ese proyecto.

En la política de la organización correspondiente al proyecto en el que se encuentran tus cuentas de servicio, verifica las siguientes restricciones booleanas:

  • Asegúrate de que la restricción booleana iam.disableCrossProjectServiceAccountUsage no se aplique para el proyecto.

    Esta restricción booleana controla si puedes conectar una cuenta de servicio a un recurso en otro proyecto. La restricción se aplica de forma predeterminada.

    Cuando no se aplica esta restricción, IAM agrega una retención de proyecto que impide que el proyecto se borre. Esta retención tiene el origen iam.googleapis.com/cross-project-service-accounts. No recomendamos que borres esta retención.

  • Recomendado: Asegúrate de que la restricción booleana iam.restrictCrossProjectServiceAccountLienRemoval se aplique al proyecto.

    Esta restricción booleana garantiza que las principales puedan quitar la retención del proyecto solo si tienen el permiso resourcemanager.projects.updateLiens a nivel de la organización. Si no se aplica esta restricción, las principales pueden quitar la retención del proyecto si tienen este permiso a nivel de proyecto.

Para obtener más información sobre cómo ver o cambiar una restricción booleana en una política de la organización, consulta Establece una restricción booleana.

Inhabilita el uso de la identidad de cuentas de servicio entre proyectos

Si ya habilitaste el uso de la identidad de cuentas de servicio en todos los proyectos, no te recomendamos inhabilitar esta función, en especial, en entornos de producción.

Específicamente, en el proyecto en el que se encuentran tus cuentas de servicio, no debes realizar ninguno de estos cambios:

  • No actualices la política de la organización del proyecto para aplicar la restricción booleana iam.disableCrossProjectServiceAccountUsage.
  • No actualices la política de la organización del proyecto para no aplicar la restricción booleana iam.restrictCrossProjectServiceAccountLienRemoval.
  • No quites la retención de proyecto con el origen iam.googleapis.com/cross-project-service-accounts, lo que evita que borres el proyecto.
  • No borres el proyecto.

Si estás dispuesto a aceptar el riesgo de inhabilitar esta característica, puedes inhabilitar las cuentas de servicio que usas entre proyectos y, luego, supervisar tu entorno de Google Cloud para ver si existen problemas a fin de reducir el riesgo. Si observas algún problema, puedes volver a habilitar las cuentas de servicio. Si no observas ningún problema, es posible que no tengas ningún recurso de Google Cloud que dependa de una cuenta de servicio en otro proyecto.

¿Qué sigue?