Administra el acceso a las cuentas de servicio

En esta página, se describe cómo otorgar, cambiar y revocar el acceso de una principal a una sola cuenta de servicio. Para administrar el acceso de una principal a todas las cuentas de servicio en un proyecto, organización o carpeta, administra su acceso a nivel de proyecto, organización o carpeta.

En Identity and Access Management (IAM), el acceso se administra a través de políticas de permisos, también conocidas como políticas de IAM. Una política de permisos se adjunta a un recurso de Google Cloud. Cada política de permisos contiene una colección de vinculaciones de roles que asocian una o más principales, como usuarios o cuentas de servicio, a un rol de IAM. Estas vinculaciones de roles otorgan los roles especificados a las principales, tanto en el recurso al que se adjunta la política de permisos como en todos los elementos subordinados de ese recurso. Para obtener más información sobre las políticas de permisos, consulta Comprende las políticas de permisos.

Las cuentas de servicio son recursos a los que otras cuentas principales pueden tener acceso y principales a las que se les puede otorgar acceso a otros recursos. En esta página, las cuentas de servicio se tratan como recursos y se describe cómo otorgar a otras cuentas principales acceso a ellas. Para obtener información sobre cómo otorgar a una cuenta de servicio acceso a otros recursos, consulta las siguientes guías:

En esta página, se describe cómo administrar el acceso a las cuentas de servicio con la consola de Google Cloud, Google Cloud CLI y la API de REST. También puedes administrar el acceso mediante las bibliotecas cliente de IAM.

Antes de comenzar

Funciones requeridas

Si deseas obtener los permisos que necesitas para administrar el acceso a una cuenta de servicio, pídele a tu administrador que te otorgue el rol de IAM de Administrador de cuenta de servicio (roles/iam.serviceAccountAdmin) en esta cuenta o el proyecto que posee la cuenta de servicio. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Esta función predefinida contiene los permisos necesarios para administrar el acceso a una cuenta de servicio. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Visualiza el acceso actual

En la siguiente sección, se muestra cómo usar la consola de Cloud, la CLI de gcloud y la API de REST para ver quién tiene acceso a una cuenta de servicio. También puedes ver el acceso mediante las bibliotecas cliente de IAM para obtener la política de permisos de la cuenta de servicio.

Console

  1. En la consola de Cloud, 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.

  4. Ve a la pestaña Permisos. En la sección Principales con acceso a esta cuenta de servicio, se enumeran todas las principales a las que se les otorgó una función en la cuenta de servicio.

    En esta lista, se incluyen las principales cuyo acceso proviene de las funciones que se otorgan en los recursos superiores. Para obtener más información sobre la herencia de políticas, consulta La herencia de políticas y la jerarquía de recursos.

  5. Opcional: Para ver las asignaciones de funciones de las cuentas de servicio administradas por Google, selecciona la casilla de verificación Incluir asignaciones de funciones proporcionadas por Google.

gcloud

A fin de ver quién tiene acceso a tu cuenta de servicio, obtén la política de permisos para la cuenta de servicio. Para obtener información sobre cómo interpretar las políticas de permisos, consulta Comprende las políticas de permisos.

A fin de obtener la política de permisos para la cuenta de servicio, ejecuta el comando get-iam-policy de la cuenta de servicio:

gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH

Ingresa 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 en el formulario.
  • FORMAT: El formato deseado para la política. Usa json o yaml.
  • PATH: Es la ruta a un nuevo archivo de salida de la política.

Por ejemplo, con el siguiente comando, se obtiene la política para la cuenta de servicio my-service-account y se guarda en tu directorio principal en formato JSON:

gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json

REST

A fin de ver quién tiene acceso a tu cuenta de servicio, obtén la política de permisos para la cuenta de servicio. Para obtener información sobre cómo interpretar las políticas de permisos, consulta Comprende las políticas de permisos.

El método serviceAccounts.getIamPolicy obtiene la política de permisos 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 permisos de la cuenta de servicio. Por ejemplo:

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

Otorga o revoca una sola función

Puedes usar la consola de Cloud y la CLI de gcloud a fin de otorgar o revocar con rapidez un solo rol para una sola principal, sin editar directamente la política de permisos de la cuenta de servicio. Los tipos comunes de principales incluyen Cuentas de Google, cuentas de servicio, Grupos de Google y dominios. Para obtener una lista de todos los tipos de principales, consulta Conceptos relacionados con la identidad.

Si necesitas ayuda para identificar la función predefinida más adecuada, consulta Elige funciones predefinidas.

Otorga una sola función

Para otorgar una sola función a una principal, sigue estos pasos:

Console

  1. En la consola de Cloud, 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.

  4. Ve a la pestaña Permisos y busca la sección Principales con acceso a esta cuenta de servicio.

  5. Selecciona una principal para otorgarle una función:

    • Para otorgar una función a una principal que ya tenga otras funciones en la cuenta de servicio, busca la fila que contiene la dirección de correo electrónico de la principal y haz clic en Editar principal. En esa fila, haz clic en Agregar otra función.

      Si deseas otorgar una función a una cuenta de servicio administrada por Google, debes seleccionar la casilla de verificación Incluir asignaciones de funciones proporcionadas por Google para ver su correo electrónico.

    • Para otorgar acceso a una principal que aún no tiene otras funciones en la cuenta de servicio, haz clic en Otorgar acceso a y, luego, ingresa la dirección de correo electrónico de la principal.

  6. Selecciona una función para otorgar de la lista desplegable. Para una mejor seguridad, elige una función que incluya solo los permisos que necesita tu principal.

  7. Opcional: Agrega una condición a la función.

  8. Haz clic en Guardar. La función se otorgó a la principal en la cuenta de servicio.

gcloud

Para otorgarle una función a una principal con rapidez, ejecuta el comando add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding SA_ID \
    --member=PRINCIPAL --role=ROLE_ID \
    --condition=CONDITION

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

  • PRINCIPAL: Un identificador para la principal o el miembro, que suele tener el siguiente formato: PRINCIPAL-TYPE:ID. Por ejemplo, user:my-user@example.com. Si deseas obtener una lista completa de los valores que PRINCIPAL puede tener, consulta la referencia sobre la vinculación de políticas.

    Para el tipo de principal user, el nombre de dominio en el identificador debe ser un dominio de Google Workspace o de Cloud Identity. Para obtener información sobre cómo configurar un dominio de Cloud Identity, consulta la descripción general de Cloud Identity.

  • ROLE_ID: El nombre de la función que deseas otorgar. Por ejemplo, roles/iam.serviceAccountUser Para obtener una lista de funciones, consulta Información sobre las funciones.

  • CONDITION: Opcional La condición que se agregará a la vinculación de función. Para obtener más información sobre las condiciones, consulta la descripción general de las condiciones.

Por ejemplo, a fin de otorgar la función de usuario de cuenta de servicio al usuario my-user@example.com para la cuenta de servicio my-service-account@my-project.iam.gserviceaccount.com, ejecuta el siguiente comando:

gcloud iam service-accounts add-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \
    --member=user:my-user@example.com --role=roles/iam.serviceAccountUser

Revoca una sola función

Para revocar una sola función de una principal, haz lo siguiente:

Console

  1. En la consola de Cloud, 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.

  4. Ve a la pestaña Permisos y busca la sección Principales con acceso a esta cuenta de servicio.

  5. Busca la fila con la dirección de correo electrónico de la principal cuyo acceso deseas revocar. Luego, haz clic en Editar principal en esa fila.

  6. Haz clic en el botón Borrar para cada función que desees revocar y, luego, haz clic en Guardar.

gcloud

Para revocar una función de un usuario, ejecuta el comando remove-iam-policy-binding:

gcloud iam service-accounts remove-iam-policy-binding SA_ID \
    --member=PRINCIPAL --role=ROLE_ID

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

  • PRINCIPAL: Un identificador para la principal o el miembro, que suele tener el siguiente formato: PRINCIPAL-TYPE:ID. Por ejemplo, user:my-user@example.com. Si deseas obtener una lista completa de los valores que PRINCIPAL puede tener, consulta la referencia sobre la vinculación de políticas.

    Para el tipo de principal user, el nombre de dominio en el identificador debe ser un dominio de Google Workspace o de Cloud Identity. Para obtener información sobre cómo configurar un dominio de Cloud Identity, consulta la descripción general de Cloud Identity.

  • ROLE_ID: El nombre de la función que deseas revocar. Por ejemplo, roles/iam.serviceAccountUser Para obtener una lista de funciones, consulta Información sobre las funciones.

Por ejemplo, para revocar la función de usuario de cuenta de servicio del usuario my-user@example.com en la cuenta de servicio my-service-account@my-project.iam.gserviceaccount.com, ejecuta este comando:

gcloud iam service-accounts remove-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \
    --member=user:my-user@example.com --role=roles/iam.serviceAccountUser

Otorga o revoca varias funciones

Para realizar cambios de acceso a gran escala que implican otorgar y revocar varios roles, usa el patrón lectura-modificación-escritura a fin de actualizar la política de permisos de la cuenta de servicio:

  1. Para leer la política de permisos actual, llama a getIamPolicy().
  2. Edita de la política de permisos, ya sea mediante el uso de un editor de texto o de manera programática, para agregar o quitar vinculaciones de roles o principales.
  3. Para escribir la política de permisos actualizada, llama a setIamPolicy().

En esta sección, se muestra cómo usar la CLI de gcloud y la API de REST para actualizar la política de permisos. También puedes actualizar la política mediante las bibliotecas cliente de IAM.

Obtén la política de permisos actual

gcloud

A fin de obtener la política de permisos para la cuenta de servicio, ejecuta el comando get-iam-policy de la cuenta de servicio:

gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH

Ingresa 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 en el formulario.
  • FORMAT: El formato deseado para la política permisos. Usa json o yaml.
  • PATH: Es la ruta a un nuevo archivo de salida de la política de permisos.

Por ejemplo, con el siguiente comando, se obtiene la política de permisos para la cuenta de servicio my-service-account y se guarda en tu directorio principal en formato JSON:

gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json

REST

El método serviceAccounts.getIamPolicy obtiene la política de permisos 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 permisos de la cuenta de servicio. Por ejemplo:

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

Guarda la respuesta en un archivo del tipo adecuado (json o yaml).

Modifica la política de permisos

De manera programática o mediante un editor de texto, modifica la copia local de la política de permisos de tu cuenta de servicio para que refleje los roles que deseas otorgar o revocar para ciertos usuarios.

Para asegurarte de no reemplazar otros cambios, no edites ni quites el campo etag de la política de permisos. El campo etag identifica el estado actual de la política de permisos. Cuando configuras la política de permisos actualizada, IAM compara el valor de etag en la solicitud con el etag existente y solo escribe la política de permisos si los valores coinciden.

Otorga una función

Para otorgar roles a las principales, modifica las vinculaciones de roles en la política de permisos. Para obtener información sobre qué roles puedes otorgar, consulta Comprende los roles o consulta los roles asignables para la cuenta de servicio. Si necesitas ayuda para identificar el rol predefinido más adecuado, consulta Elige roles predefinidos.

De forma opcional, puedes usar condiciones para otorgar funciones solo cuando se cumplan ciertos requisitos.

Para otorgar un rol que ya está incluido en la política de permisos, agrega la principal a una vinculación de rol existente:

gcloud

Edita la política de permisos y agrega la principal a una vinculación de rol existente. Ten en cuenta que este cambio no se hará efectivo hasta que configures la política de permisos actualizada.

Por ejemplo, imagina que la política de permisos contiene la siguiente vinculación de rol, que otorga el rol Service Account User (roles/iam.serviceAccountUser) a kai@example.com:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com"
  ]
}

Para otorgar esa misma función a raha@example.com, agrega raha@example.com a la vinculación de función existente:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

REST

Edita la política de permisos y agrega la principal a una vinculación de rol existente. Ten en cuenta que este cambio no se hará efectivo hasta que configures la política de permisos actualizada.

Por ejemplo, imagina que la política de permisos contiene la siguiente vinculación de rol, que otorga el rol Service Account User (roles/iam.serviceAccountUser) a kai@example.com:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com"
  ]
}

Para otorgar esa misma función a raha@example.com, agrega raha@example.com a la vinculación de función existente:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Para otorgar un rol que aún no está incluido en la política de permisos, agrega una nueva vinculación de rol:

gcloud

Edita la política de permisos y agrega una nueva vinculación de rol que otorgue el rol a la principal. Este cambio no se hará efectivo hasta que establezcas la política de permisos actualizada.

Por ejemplo, para otorgar el rol Service Account Token Creator (roles/iam.serviceAccountTokenCreator) a raha@example.com, agrega la siguiente vinculación de rol al array bindings de la política de permisos:

{
  "role": "roles/iam.serviceAccountTokenCreator",
  "members": [
    "user:raha@example.com"
  ]
}

REST

Edita la política de permisos y agrega una nueva vinculación de rol que otorgue el rol a la principal. Este cambio no se hará efectivo hasta que establezcas la política de permisos actualizada.

Por ejemplo, para otorgar el rol Service Account Token Creator (roles/iam.serviceAccountTokenCreator) a raha@example.com, agrega la siguiente vinculación de rol al array bindings de la política de permisos:

{
  "role": "roles/iam.serviceAccountTokenCreator",
  "members": [
    "user:raha@example.com"
  ]
}

Revoca una función

Para revocar una función, quita la principal de la vinculación de función. Si no hay otras principales en la vinculación de rol, quita toda la vinculación de rol de la política de permisos.

gcloud

Edita la política de permisos y quita la principal o toda la vinculación de rol. Este cambio no se hará efectivo hasta que configures la política de permisos actualizada.

Por ejemplo, imagina que la política de permisos contiene la siguiente vinculación de rol, que otorga a kai@example.com y raha@example.com el rol Service Account User (roles/iam.serviceAccountUser):

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Para revocar la función de kai@example.com, quita kai@example.com de la vinculación de la función:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:raha@example.com"
  ]
}

Para revocar el rol de kai@example.com y raha@example.com, quita la vinculación de rol de la política de permisos.

REST

Edita la política de permisos y quita la principal o toda la vinculación de rol. Este cambio no se hará efectivo hasta que configures la política de permisos actualizada.

Por ejemplo, imagina que la política de permisos contiene la siguiente vinculación de rol, que otorga a kai@example.com y raha@example.com el rol Service Account User (roles/iam.serviceAccountUser):

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Para revocar la función de kai@example.com, quita kai@example.com de la vinculación de la función:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:raha@example.com"
  ]
}

Para revocar el rol de kai@example.com y raha@example.com, quita la vinculación de rol de la política de permisos.

Establece la política de permisos

Después de modificar la política de permisos para otorgar y revocar los roles deseados, llama a setIamPolicy() con el fin de realizar las actualizaciones.

gcloud

A fin de configurar la política de permisos del recurso, ejecuta el comando set-iam-policy en la cuenta de servicio:

gcloud iam service-accounts set-iam-policy SA_ID PATH

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

  • PATH: Es la ruta a un archivo que contiene la política de permisos nueva.

La respuesta contiene la política de permisos actualizada:

Por ejemplo, con el siguiente comando, se establece la política de permisos almacenada en policy.json como la política de permiso de la cuenta de servicio my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts set-iam-policy my-service-account@my-project.iam.gserviceaccount.com \
    ~/policy.json

REST

Mediante el método serviceAccounts.setIamPolicy, se configura una política de permisos 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 de permisos 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 de permisos actualizada:

¿Qué sigue?

Pruébalo tú mismo

Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.

Comenzar gratis