En esta página se explica cómo subir una clave pública de una cuenta de servicio. Después de subir la clave pública, puedes usar la clave privada del par de claves para autenticarte como la cuenta de servicio.
Antes de empezar
Enable the IAM API.
Consulta información sobre las credenciales de cuentas de servicio.
Roles obligatorios
Para obtener los permisos que necesitas para subir claves de cuentas de servicio, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Administrador de claves de cuenta de servicio (roles/iam.serviceAccountKeyAdmin
) en el proyecto o en la cuenta de servicio cuyas claves quieras gestionar.
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
También puedes conseguir los permisos necesarios a través de roles personalizados u otros roles predefinidos.
Para obtener más información, consulta Roles de cuentas de servicio.
En función de la configuración de la política de tu organización, es posible que también tengas que permitir que se suban claves de cuentas de servicio a tu proyecto antes de subir una clave.
Para obtener los permisos que necesitas para permitir que se suban claves de cuentas de servicio a un proyecto, pide a tu administrador que te conceda los siguientes roles de gestión de identidades y accesos en tu organización:
-
Administrador de políticas de organización (
roles/orgpolicy.policyAdmin
) -
Lector de organización (
roles/resourcemanager.organizationViewer
) -
Administrador de etiquetas (
roles/resourcemanager.tagAdmin
)
Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.
Estos roles predefinidos contienen los permisos necesarios para permitir que se suban claves de cuentas de servicio a un proyecto. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para poder subir claves de cuentas de servicio a un proyecto, se necesitan los siguientes permisos:
-
orgpolicy.constraints.list
-
orgpolicy.customConstraints.create
-
orgpolicy.customConstraints.delete
-
orgpolicy.customConstraints.get
-
orgpolicy.customConstraints.list
-
orgpolicy.customConstraints.update
-
orgpolicy.policies.create
-
orgpolicy.policies.delete
-
orgpolicy.policies.list
-
orgpolicy.policies.update
-
orgpolicy.policy.get
-
orgpolicy.policy.set
-
resourcemanager.organizations.get
-
resourcemanager.projects.listTagBindings
-
resourcemanager.projects.listEffectiveTags
-
resourcemanager.tagKeys.get
-
resourcemanager.tagKeys.list
-
resourcemanager.tagValues.list
-
resourcemanager.tagValues.get
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Permitir la subida de claves de cuentas de servicio
Antes de crear una clave de cuenta de servicio, comprueba que la restricción de la política de organización iam.disableServiceAccountKeyUpload
no se aplique a tu proyecto. Si esta restricción se aplica a tu proyecto, no podrás subir claves de cuenta de servicio en él.
Recomendamos aplicar esta restricción en la mayoría de los proyectos y solo eximir a los proyectos que realmente necesiten claves de cuentas de servicio. Para obtener más información sobre los métodos de autenticación alternativos, consulta el artículo Elegir el método de autenticación adecuado para tu caso práctico.
Para eximir un proyecto de la restricción de la política de organización iam.disableServiceAccountKeyUpload
, pide a un administrador de la política de organización que haga lo siguiente:
-
A nivel de organización, cree una clave y un valor de etiqueta que utilizará para definir si un recurso debe estar exento de la política de organización. Te recomendamos que crees una etiqueta con la clave
disableServiceAccountKeyUpload
y los valoresenforced
ynot_enforced
.Para saber cómo crear claves y valores de etiquetas, consulta el artículo Crear y definir una etiqueta.
-
Asigne la etiqueta
disableServiceAccountKeyUpload
a la organización y defina su valor comoenforced
. Todos los recursos de la organización heredan este valor de etiqueta, a menos que se sobrescriba con otro valor.Para saber cómo adjuntar etiquetas a los recursos, consulta Adjuntar etiquetas a recursos.
-
En cada proyecto o carpeta que quieras excluir de la política de la organización, añade la etiqueta
disableServiceAccountKeyUpload
y asigna el valornot_enforced
. Si asignas un valor de etiqueta a un proyecto o una carpeta de esta forma, se anula el valor de etiqueta heredado de la organización. -
Crea o actualiza la política de organización que impide subir claves de cuentas de servicio para que no se aplique la restricción a los recursos exentos. Esta política debe incluir las siguientes reglas:
-
Configura la restricción
iam.disableServiceAccountKeyUpload
para que no se aplique a ningún recurso con la etiquetadisableServiceAccountKeyUpload: not_enforced
. La condición de esta regla debería tener el siguiente aspecto:"resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyUpload', 'not_enforced')"
-
Configura la restricción
iam.disableServiceAccountKeyUpload
para que se aplique a todos los demás recursos.
-
Subir una clave pública para una cuenta de servicio
Puedes subir la parte de clave pública de un par de claves gestionado por el usuario para asociarlo a una cuenta de servicio. Después de subir la clave pública, puedes usar la clave privada del par de claves como clave de cuenta de servicio.
La clave que subas debe ser una clave pública RSA encapsulada en un certificado X.509 v3 y codificada en base64. Puedes usar herramientas como OpenSSL para generar una clave y un certificado con este formato.
No incluyas información privada en el certificado X.509. En concreto, utilice un asunto genérico y no añada ningún atributo opcional. Los certificados son visibles públicamente. Cualquier información privada que contengan será visible para cualquier persona que los obtenga. Para obtener más información, consulta Evitar revelar información confidencial en los certificados X.509 subidos.
Si se aplica la restricción de la política de organización iam.serviceAccountKeyExpiryHours
a tu proyecto, la clave que subas debe caducar en el periodo especificado en la restricción.
Para definir la fecha de vencimiento de la clave, usa el valor -days
en el comando que utilices para generar el certificado X.509. Si el valor de -days
es mayor que el periodo especificado en la restricción, el comando fallará.
Por ejemplo, el siguiente comando genera un par de claves RSA de 2048 bits y envuelve la clave pública en un certificado autofirmado que es válido durante 365 días:
openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
-keyout /path/to/private_key.pem \
-out /path/to/public_key.pem \
-subj "/CN=unused"
A continuación, puedes subir el archivo public_key.pem
como clave pública de una cuenta de servicio.
Consola
- En la Google Cloud consola, ve a la página Cuentas de servicio.
Los pasos restantes aparecen en la Google Cloud consola.
- Selecciona un proyecto.
- En la página Cuentas de servicio, haz clic en la dirección de correo de la cuenta de servicio para la que quieras subir una clave.
- Haga clic en la pestaña Claves.
- Haz clic en el menú desplegable Añadir clave y, a continuación, selecciona Subir clave actual.
- Haz clic en Examinar, busca y selecciona el archivo de clave pública. También puedes copiar y pegar el contenido de tu archivo de clave pública en el cuadro Pegar clave existente.
- Haz clic en Subir.
gcloud
Ejecuta el comando
gcloud iam service-accounts keys upload
para subir una clave pública para firmar claves de cuenta de servicio.
Sustituye los siguientes valores:
KEY_FILE
: la ruta al archivo que contiene los datos clave que se van a subir. Por ejemplo,./public_key.pem
.SA_NAME
: nombre de la cuenta de servicio a la que se va a subir una clave.PROJECT_ID
: tu ID de proyecto Google Cloud .
gcloud iam service-accounts keys upload KEY_FILE \ --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com
El resultado contiene un identificador único de la clave subida:
Name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0
Para determinar si el comando se ha ejecutado correctamente, ejecuta el comando
gcloud iam service-accounts keys list
:
gcloud iam service-accounts keys list \ --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com
La salida contendrá el mismo identificador único que se devolvió después de crear la clave:
KEY_ID | CREATED_AT | EXPIRES_AT | INHABILITADO |
c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0 | 2019-06-26T21:01:42Z | 9999-12-31T23:59:59Z |
REST
El método
projects.serviceAccounts.keys.upload
sube la clave pública de un par de claves gestionado por el usuario y añade esta clave a la cuenta de servicio.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
PROJECT_ID
: tu ID de proyecto. Google Cloud Los IDs de proyecto son cadenas alfanuméricas, comomy-project
.SA_NAME
: nombre de la cuenta de servicio a la que se asociará la clave.PUBLIC_KEY_DATA
: los datos de la clave pública del par de claves. Debe ser una clave pública RSA encapsulada en un certificado X.509 v3. Codifica los datos de la clave pública en base64, incluida la primera línea,-----BEGIN CERTIFICATE-----
, y la última,-----END CERTIFICATE-----
.
Método HTTP y URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys:upload
Cuerpo JSON de la solicitud:
{ "publicKeyData": "PUBLIC_KEY_DATA" }
Para enviar tu solicitud, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
{ "name": "projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0", "validAfterTime": "2020-05-17T19:31:19Z", "validBeforeTime": "2021-05-17T19:31:19Z", "keyAlgorithm": "KEY_ALG_RSA_2048", "keyOrigin": "USER_PROVIDED", "keyType": "USER_MANAGED" }
Inhabilitar las subidas de claves públicas
Para inhabilitar la posibilidad de subir claves de tu proyecto, consulta el artículo sobre cómo restringir la subida de claves de cuentas de servicio.
Siguientes pasos
- Consulta cómo crear y eliminar claves de cuentas de servicio.
- Consulta cómo listar y obtener claves de cuentas de servicio.
- Consulta las alternativas a las claves de cuentas de servicio para la autenticación.
- Consulta cómo usar claves de cuentas de servicio para autenticarte como cuenta de servicio.
- Consulta las prácticas recomendadas para gestionar las claves de cuentas de servicio.
Pruébalo
Si es la primera vez que utilizas Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los nuevos clientes también reciben 300 USD en crédito gratuito para ejecutar, probar y desplegar cargas de trabajo.
Empezar gratis