Sube claves de cuentas de servicio

En esta página, se explica cómo subir una clave pública para 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 comenzar

Roles obligatorios

Para obtener los permisos que necesitas a fin de subir las claves de cuentas de servicio, pídele a tu administrador que te otorgue el rol de IAM de administrador de claves de cuentas de servicio (roles/iam.serviceAccountKeyAdmin) en el proyecto o en la cuenta de servicio cuyas claves deseas administrar. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Para obtener más información, consulta Roles de cuentas de servicio.

Según la configuración de la política de tu organización, es posible que también debas permitir que se suban claves de cuentas de servicio en tu proyecto antes de subir una clave.

Para obtener los permisos que necesitas para permitir que se suban claves de cuentas de servicio en un proyecto, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu organización:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Estos roles predefinidos contienen los permisos necesarios para permitir que se suban claves de cuentas de servicio en un proyecto. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para permitir que se suban claves de cuenta de servicio en un proyecto:

  • 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 o con otros roles predefinidos.

Permite la carga de claves de cuentas de servicio

Antes de crear una clave de cuenta de servicio, asegúrate de que la restricción de la política de la organización iam.disableServiceAccountKeyUpload no se aplique a tu proyecto. Si se aplica esta restricción a tu proyecto, no podrás subir claves de cuenta de servicio en él.

Recomendamos aplicar esta restricción para la mayoría de los proyectos y solo eximir a los proyectos que realmente requieran claves de cuenta de servicio. Para obtener más información sobre los métodos de autenticación alternativos, consulta Elige el método de autenticación adecuado para tu caso de uso.

Para eximir un proyecto de la restricción de la política de la organización iam.disableServiceAccountKeyUpload, pídele a un administrador de políticas de la organización que haga lo siguiente:

  1. A nivel de la organización, crea una clave y un valor de etiqueta que usarás para definir si un proyecto o carpeta debe estar exento de la política de la organización. Recomendamos crear una etiqueta con la clave disableServiceAccountKeyUpload y los valores enforced y not_enforced.

    Para aprender a crear claves y valores de etiqueta, consulta Crea y define una etiqueta nueva.

  2. Adjunta la etiqueta disableServiceAccountKeyUpload a la organización y configúrala con el valor enforced. Todos los proyectos o carpetas de la organización heredan este valor de etiqueta, a menos que se reemplace por un valor de etiqueta diferente.

    Para obtener información sobre cómo adjuntar etiquetas a los recursos, consulta Adjunta etiquetas a los recursos.

  3. Para cada proyecto o carpeta que desees eximir de la política de la organización, adjunta la etiqueta disableServiceAccountKeyUpload y establece su valor en not_enforced. Configurar un valor de etiqueta para un proyecto o carpeta de esta manera anula el valor de la etiqueta heredado de la organización.
  4. Crea o actualiza la política de la organización que impide subir claves de cuentas de servicio para que no aplique la restricción para los recursos exentos. Esta política debe tener las siguientes reglas:

    • Configura la restricción iam.disableServiceAccountKeyUpload para que no se aplique en ningún recurso con la etiqueta disableServiceAccountKeyUpload: not_enforced. La condición en esta regla debería verse de la siguiente manera:

      resource.matchTag(\"ORGANIZATION_ID/disableServiceAccountKeyUpload\", \"not_enforced\")
      
    • Configura la restricción iam.disableServiceAccountKeyUpload para que se aplique en todos los demás recursos.

    Para aprender a crear políticas de la organización con condiciones de etiquetas, consulta Configura una política de la organización con etiquetas.

Sube una clave pública para una cuenta de servicio

Puedes subir la parte de clave pública de un par de claves administradas por el usuario para asociarlo con una cuenta de servicio. Después de subir la clave pública, puedes usar la clave privada del par de claves como una clave de cuenta de servicio.

La clave que subas debe ser una clave pública RSA que esté unida 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.

Importante: No incluyas información privada en el certificado X.509. Específicamente, usa un asunto genérico y no agregues ningún atributo opcional. Los certificados son visibles de forma pública. Cualquier información privada en el certificado es visible para cualquier persona que lo recupere. Para obtener más información, consulta Evita revelar información confidencial en los certificados X.509 subidos.

Por ejemplo, mediante el siguiente comando, se genera un par de claves RSA de 2,048 bits y se une 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"

Luego, puedes subir el archivo public_key.pem como la clave pública de una cuenta de servicio.

Console

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

    Ir a Cuentas de servicio

    Los pasos restantes aparecen en la consola de Google Cloud.

  2. Selecciona un proyecto
  3. En la página Cuentas de servicio, haz clic en la dirección de correo electrónico de la cuenta de servicio para la que deseas subir una clave.
  4. Haz clic en la pestaña Claves.
  5. Haz clic en el menú desplegable Agregar clave y, luego, selecciona Subir clave existente.
  6. Haz clic en Explorar y, luego, busca y selecciona tu archivo de clave pública. De manera alternativa, puedes copiar y pegar el contenido de tu archivo de clave pública en el cuadro Pegar clave existente.
  7. Haz clic en Subir.

gcloud

Ejecuta el comando gcloud iam service-accounts keys upload para subir una clave pública con el fin de firmar claves de cuenta de servicio.

Reemplaza los siguientes valores:

  • KEY_FILE: La ruta de acceso al archivo que contiene los datos clave que se subirán, por ejemplo, ./public_key.pem.
  • SA_NAME: El nombre de la cuenta de servicio para subir una clave.
  • PROJECT_ID: El ID del proyecto de Google Cloud.
gcloud iam service-accounts keys upload KEY_FILE \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

El siguiente resultado contiene un identificador único para la clave subida:

Name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0

Para determinar si el resultado del comando fue correcto, ejecuta el comando gcloud iam service-accounts keys list:

gcloud iam service-accounts keys list \
    --iam-account=SA_NAME@PROJECT_ID.iam.gserviceaccount.com

El resultado contendrá el mismo identificador único que se mostró 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

Mediante el método projects.serviceAccounts.keys.upload, se sube la clave pública desde un par de claves administradas por el usuario y se agrega esta clave a 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_NAME: Es el nombre de la cuenta de servicio con la que se asociará la clave.
  • PUBLIC_KEY_DATA: Son los datos de la clave pública para el par de claves. Debe ser una clave pública RSA que esté unida en un certificado X.509 v3. Codifica los datos de clave pública en base64, incluidas la primera, -----BEGIN CERTIFICATE-----, y la última línea, -----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, expande una de estas opciones:

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

{
  "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"
}

Inhabilita las cargas de claves públicas

Si quieres inhabilitar la capacidad de subir claves para el proyecto, consulta Restringe la carga de claves de cuentas de servicio.

¿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