Las cuentas de servicio son las cuentas que usan las cargas de trabajo o los servicios para consumir recursos y acceder a microservicios de forma segura mediante programación. Son un tipo especial de identidad que usan las aplicaciones o las cargas de trabajo en lugar de las personas. Al igual que las cuentas de usuario, las cuentas de servicio pueden tener permisos y roles, pero no pueden iniciar sesión como un usuario humano.
Las cuentas de servicio son útiles para gestionar la infraestructura del dispositivo air-gapped de Google Distributed Cloud (GDC), como la siguiente:
- Servicios y cargas de trabajo de dispositivos con air gap de GDC internos para acceder de forma segura a la interfaz de programación de aplicaciones (API) del plano de control de dispositivos con air gap de GDC.
- Cargas de trabajo del cliente en el dispositivo GDC con air gap para acceder a los servicios del dispositivo GDC con air gap y hacer llamadas autorizadas a la interfaz de programación de aplicaciones (API).
- Cargas de trabajo externas para federar con el dispositivo GDC con air gap.
- Servicios de dispositivos aislados de GDC o controladores de sistemas para acceder de forma segura a los recursos de los clientes. Por ejemplo, las cuentas de servicio pueden gestionar flujos de trabajo de autenticación y autorización en los que los controladores de servicio que se ejecutan en el clúster de Kubernetes de hardware desnudo deben ejecutar cargas de trabajo gestionadas por los clientes.
Puedes gestionar las cuentas mediante la consola de GDC, la CLI de gdcloud o la API. Con la CLI de gdcloud, la función de identidad de servicio se basa en la API ProjectServiceAccount
.
Antes de empezar
Solo puedes crear cuentas de servicio en un proyecto. Para obtener más información, consulta el artículo Crear un proyecto.
Crear una identidad de servicio
Para obtener los permisos necesarios para crear cuentas de servicio, pide al administrador de gestión de identidades y accesos del proyecto que te conceda el rol Administrador de gestión de identidades y accesos del proyecto (project-iam-admin
).
Los usuarios con acceso a cuentas de servicio pueden acceder a todas las cuentas de servicio de un proyecto.
Para crear identidades de servicio en un proyecto, usa la consola de GDC, la CLI de gdcloud o la API.
Consola
- Inicia sesión en la consola de GDC.
- En el menú de navegación, selecciona Identidad y acceso > Identidades de servicio.
- Haz clic en Crear identidad de servicio. Se abrirá la página Detalles de la identidad de servicio.
- En el campo Nombre de identidad de servicio, escribe un nombre para tu identidad de servicio. Por ejemplo:
Test service identity
. - Haz clic en Crear.
gdcloud
Crea una identidad de servicio:
gdcloud iam service-accounts create NAME \
--project=PROJECT
Sustituye los siguientes valores:
- NAME: el nombre de la
ProjectServiceAccount
. El nombre debe ser único en el espacio de nombres del proyecto. - PROJECT: el proyecto en el que se va a crear la identidad de servicio. Si
gdcloud init
ya está definido, omite la marca--project
.
Este comando crea un ProjectServiceAccount
en el espacio de nombres del proyecto.
API
Crea un archivo YAML de recursos personalizados
ProjectServiceAccount
, como el siguiente:my-project-sa.yaml
apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectServiceAccount metadata: name: NAME namespace: PROJECT spec: keys: - algorithm: ALGORITHM id: KEY_ID key: BASE64_ENCODED_KEY validAfter: "START_TIME" validBefore: "EXPIRATION_TIME"
Sustituye las siguientes variables:
NAME
: el nombre delProjectServiceAccount
recurso. El nombre debe ser único en el espacio de nombres del proyecto.PROJECT
: el proyecto en el que se va a crear la identidad de servicio.ALGORITHM
: el algoritmo de la clave. Solo se admiten claves ES256.KEY_ID
: identificador único de la clave. El ID se usa para determinar con qué clave se debe verificar.BASE64_ENCODED_KEY
: la clave pública codificada en base64 en formato PEM con la que se verificará. La clave privada utilizada para generar esta clave pública debe tener el formato PEM de ECDSA P256.START_TIME
: la hora de inicio en la que la clave pasa a ser válida, como2025-02-07T00:59:34Z
.EXPIRATION_TIME
: la hora de vencimiento de la clave, como2026-02-07T00:59:34Z
.
Aplica el recurso personalizado
ProjectServiceAccount
al servidor de la API de gestión:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
Sustituye la variable
MANAGEMENT_API_SERVER_KUBECONFIG
por la ruta al archivo kubeconfig del servidor de la API de gestión.
Ver identidades de servicio
Para ver una lista de las cuentas de servicio de un proyecto, usa la consola de GDC o la CLI de gdcloud.
Consola
- Inicia sesión en la consola de GDC.
- Selecciona un proyecto.
- En el menú de navegación, haz clic en Identidad y acceso > Identidades de servicio para ver la lista de cuentas de servicio del proyecto.
gdcloud
Lista de cuentas de servicio de un proyecto:
gdcloud iam service-accounts list \
--project=PROJECT
Asignar una vinculación de rol a la identidad del servicio
Para asignar una vinculación de rol, debes tener los permisos adecuados. Para obtener los permisos necesarios para asignar roles, pide al administrador de gestión de identidades y accesos de tu proyecto que te conceda el rol Administrador de gestión de identidades y accesos de proyectos (project-iam-admin
).
Usa la consola de GDC o la CLI de gdcloud para asignar un enlace de rol.
Consola
- Inicia sesión en la consola de GDC.
- Selecciona un proyecto.
- En el menú de navegación, selecciona Identidad y acceso > Acceso.
- En la lista Miembro, haz clic en Añadir miembro. Verás la página Usuarios y roles.
- Selecciona Identidad de servicio en la lista Tipo de miembro.
- En la lista Identidad de servicio, selecciona la identidad de servicio a la que quieras asignar una vinculación de rol.
- En la lista Rol, selecciona el rol que quieras asignar a la identidad de servicio, como Creador de copias de seguridad.
- Opcional: Para añadir otro rol, haz clic en Añadir otro rol. Selecciona el rol adicional.
- Haz clic en Añadir.
gdcloud
Este comando crea y asigna un nombre al enlace del rol de proyecto para vincular el rol especificado con ProjectServiceAccount
:
gdcloud iam service-accounts add-iam-policy-binding \
--project=PROJECT \
--role=ROLE \
--iam-account=NAME
Sustituye los siguientes valores:
- PROJECT: el proyecto en el que se va a crear el enlace de rol.
Si
gdcloud init
ya está configurado, puedes omitir la marca--project
. - ROLE: el rol predefinido que se asignará al
ProjectServiceAccount
. Especifica los roles en el formatoRole/name
, donde Rol es el tipo de Kubernetes, comoRole
oProjectRole
, y nombre es el nombre del rol predefinido. Por ejemplo, para asignar el rol Lector de proyecto, define el rol comoRole/project-viewer
. - NAME: el nombre de la identidad de servicio que se va a usar.
Eliminar una identidad de servicio
Para eliminar cuentas de servicio de un proyecto, usa la consola de GDC o la CLI de gdcloud.
Después de eliminar una identidad de servicio, las aplicaciones no tienen acceso a los recursos del proyecto a través de esa identidad de servicio.
Consola
- Inicia sesión en la consola de GDC.
- En el menú de navegación, selecciona Identidad y acceso > Identidades de servicio.
- Marca la casilla de la identidad de servicio que quieras eliminar.
- Haz clic en Eliminar.
- Aparecerá el cuadro de diálogo de confirmación. En el campo Para confirmar la operación, escribe lo que se indica a continuación, introduce
remove
. - Haz clic en Eliminar.
gdcloud
Ejecuta el siguiente comando para eliminar una identidad de servicio:
gdcloud iam service-accounts delete NAME \
--project=PROJECT
Crear y añadir pares de claves
Para crear y añadir pares de claves en un proyecto, usa la consola de GDC, la CLI de gdcloud o la API.
Consola
- Inicia sesión en la consola de GDC.
- En el menú de navegación, selecciona Identidad y acceso > Identidades de servicio.
- Haga clic en el nombre de la identidad de servicio que quiera añadir a la clave.
- Haz clic en Crear clave.
- La nueva clave aparece en la lista Claves y un cuadro de diálogo confirma que la has creado correctamente.
gdcloud
El comando gdcloud
crea el archivo JSON de las credenciales predeterminadas de la aplicación
y los pares de claves pública y privada:
gdcloud iam service-accounts keys create APPLICATION_DEFAULT_CREDENTIALS_FILENAME \
--project=PROJECT \
--iam-account=NAME \
--ca-cert-path=CA_CERTIFICATE_PATH
Sustituye los siguientes valores:
- APPLICATION_DEFAULT_CREDENTIALS_FILENAME: el nombre del archivo JSON.
- PROJECT : selecciona el proyecto para el que se va a crear la clave.
Si
gdcloud init
ya está configurado, puedes omitir la marca--project
. - NAME: el nombre de la identidad de servicio a la que se va a añadir la clave.
- CA_CERTIFICATE_PATH: opcional: la ruta del certificado de la autoridad de certificación (CA) para verificar el endpoint de autenticación. Si no especifica esta ruta, se usarán los certificados de CA del sistema. Debes instalar la CA en los certificados de CA del sistema.
El dispositivo aislado de GDC añade la clave pública a las ProjectServiceAccount
claves que usas para verificar los tokens web JSON (JWT) que firma la clave privada. La clave privada se escribe en el archivo JSON de las credenciales predeterminadas de la aplicación.
En el siguiente ejemplo se muestra el archivo JSON de las credenciales predeterminadas de la aplicación:
{
"type": "gdch_service_account",
"format_version": "1",
"project": "project_name",
"private_key_id": "abcdef1234567890",
"private_key": "-----BEGIN PRIVATE KEY-----\nETC\n-----END PRIVATE KEY-----\n",
"name": "service_identity_name",
"ca_cert_path": "service_identity_name",
"token_uri": "https://service-identity.<Domain>/authenticate"
}
En este ejemplo se usan los siguientes valores:
project
: el espacio de nombres del proyecto en la organización.private_key_id
: el ID asignado a la clave.private_key
: la clave privada ECDSA P256 en formato PEM que genera la CLI.name
: el nombre de la identidad de servicio.token_uri
: la dirección del endpoint de autenticación.
API
Genera el par de claves pública y privada. En los siguientes comandos se usa
openssl
como ejemplo, que es una herramienta habitual para este fin.openssl ecparam -name prime256v1 -genkey -noout -out "key.pem" openssl ec -in "key.pem" -pubout > "pub.pem"
Codifica en base64 la clave pública y obtén su ID de clave:
KEY_ID=$(openssl pkey -in key.pem -pubout -outform der | openssl dgst -sha256 | sed 's/^.* //') BASE64_ENCODED_KEY=$(cat pub.pem | base64)
Crea o actualiza el archivo YAML de
ProjectServiceAccount
recurso personalizado, incluida la información de la clave generada en el paso anterior:apiVersion: resourcemanager.gdc.goog/v1 kind: ProjectServiceAccount metadata: name: NAME namespace: PROJECT spec: keys: - algorithm: ALGORITHM id: KEY_ID key: BASE64_ENCODED_KEY validAfter: "START_TIME" validBefore: "EXPIRATION_TIME"
Sustituye las siguientes variables:
NAME
: el nombre delProjectServiceAccount
recurso. El nombre debe ser único en el espacio de nombres del proyecto.PROJECT
: el proyecto en el que vas a crear la clave.ALGORITHM
: el algoritmo de la clave. Solo se admiten claves ES256.KEY_ID
: identificador único de la clave. El ID se usa para determinar con qué clave se debe verificar.BASE64_ENCODED_KEY
: la clave pública codificada en base64 en formato PEM con la que se verificará. La clave privada utilizada para generar esta clave pública debe tener el formato PEM de ECDSA P256.START_TIME
: la hora de inicio en la que la clave pasa a ser válida, como2025-02-07T00:59:34Z
.EXPIRATION_TIME
: la hora de vencimiento de la clave, como2026-02-07T00:59:34Z
.
Aplica el recurso personalizado
ProjectServiceAccount
al servidor de la API de gestión:kubectl --kubeconfig MANAGEMENT_API_SERVER_KUBECONFIG apply -f my-project-sa.yaml
Sustituye la variable
MANAGEMENT_API_SERVER_KUBECONFIG
por la ruta al archivo kubeconfig del servidor de la API de gestión.Crea el archivo JSON de credenciales predeterminadas de la aplicación que contiene la clave privada. Asegúrate de que la variable
KEY_ID
del archivo JSON tenga el mismo valor que la variableKEY_ID
que has usado en la especificaciónProjectServiceAccount
.cat <<EOF > "key_file.json" { "format_version": "1", "name": "NAME", "private_key": "$(tr '\n' '\t' < "key.pem" | sed 's/\t/\\n/g')", "private_key_id": "KEY_ID", "project": "PROJECT", "token_uri": "AUTH_URL", "type": "gdch_service_account" } EOF
Sustituye las siguientes variables:
NAME
: el nombre de la identidad de servicio.KEY_ID
: identificador único de la clave. El ID se usa para determinar con qué clave se debe verificar y debe coincidir con el valorKEY_ID
usado en la especificaciónProjectServiceAccount
.PROJECT
: el espacio de nombres del proyecto en la organización.AUTH_URL
: la dirección del endpoint de autenticación.
Añade el par de claves a tu proyecto activando la cuenta de servicio:
gdcloud auth activate-service-account –-key-file=key_file.json
Mostrar las credenciales de las cuentas de servicio
Lista las claves públicas de un ProjectServiceAccount
específico del proyecto:
gdcloud iam service-accounts keys list \
--project=PROJECT \
--iam-account=NAME
Eliminar credenciales
Para eliminar la clave pública, usa la consola de GDC o la CLI de gdcloud.
Consola
- Inicia sesión en la consola de GDC.
- En el menú de navegación, selecciona Identidad y acceso > Identidades de servicio.
- Haga clic en el nombre de la identidad de servicio que tenga la clave que quiera eliminar.
- Haz clic en Eliminar.
- En el cuadro de diálogo de confirmación, haz clic en Eliminar.
gdcloud
Elimina la clave pública con el ID de clave del ProjectServiceAccount
específico del proyecto:
gdcloud iam service-accounts keys delete KEY_ID \
--project=PROJECT \
--iam-account=NAME
Autorizar una cuenta de servicio mediante una clave de cuenta de servicio
Puedes usar el comando gdcloud
para activar una cuenta de servicio con una clave de cuenta de servicio:
Crea un archivo de claves de cuenta de servicio si aún no tienes uno.
Activa la cuenta de servicio ejecutando el siguiente comando:
gdcloud auth activate-service-account --key-file=KEY_FILE
Sustituye KEY_FILE por la ruta al archivo de clave de la cuenta de servicio.
Después de activar la cuenta de servicio,
gdcloud
usa las credenciales de la cuenta de servicio para los comandos posteriores, en lugar de tus credenciales de usuario.