¿Cómo proporcionar acceso a una sola instancia a los usuarios de Google Compute Engine?

¿Cómo proporcionar acceso a una sola instancia a los usuarios de Google Compute Engine?

Estoy tratando de encontrar una solución para proporcionar acceso a un trabajador externo a una instancia de nuestro proyecto, pero no a todos los recursos.

Investigué un poco y encontré dos métodos sobre cómo hacer esto.

Lo primero sería proporcionar al contratista una clave privada para acceder a la instancia seleccionada.

Pero me gustaría intentar utilizar el otro método, que consiste en asignar la función de usuario de cuenta de servicio al contratista.

Por lo que entiendo con las cuentas de servicio. Se declaran como recurso y como identidad. Tendría que crear una nueva instancia en una cuenta de servicio recién creada con permisos definidos limitados.

[cuenta de servicio] >>> permisos >>> [instancias]

[usuario] >>> rol de usuario de cuenta de servicio >>> [cuenta de servicio]

entonces creo que la función de usuario de la cuenta de servicio es como un proxy para la cuenta de servicio. Intenté asignar permisos a la cuenta de servicio y asigné un usuario con la función de usuario de la cuenta de servicio. Pensaría que una vez hecho esto, el usuario tendría los permisos asignados a la cuenta de servicio. Pero lamentablemente ese no es el caso y me gustaría recibir ayuda.

Respuesta1

Usar una clave privada como la que sugirió sería la solución ideal aquí, ya que es la única manera de asegurarse de que su contratista no tenga acceso a otras instancias o información sobre el estado de su proyecto. No obstante, lo que usted describió (SSH en una máquina usando una cuenta de servicio)puede hacerse, y de hecho,Las cuentas de servicio son a la vez una identidad y un recurso..

Si le otorga a un usuario el Service Account Userrol de una cuenta de servicio con los permisos necesarios para SSH en una máquina, eso le permitirá al usuario hacer precisamente eso. Sin embargo, tenga en cuenta que el conjunto mínimo de permisos que esta cuenta de servicio requeriría para que esto funcione permitiría a la cuenta de servicio (y, en consecuencia, también al usuario) conectarse por SSH a cualquier instancia informática. Esto por sí solo es un indicador de que hacer esto no le dará la granularidad que parece desear.

Para que el escenario que has conjurado sea posible, deberás hacer lo siguiente:

  1. Cree una cuenta de servicio y asígnele la Service Account Userfunción y 4 permisos granulares, compute.instances.get, compute.instances.setMetadata, compute.projects.gety compute.zoneOperations.get(probablemente debería crear una función personalizada para estos permisos). Esto se puede hacer en la sección IAM y administración de laConsola;
  2. Otorgue al usuario algún tipo de permiso sobre el proyecto a través delConsola o gcloud. Sugeriría darle el Compute Viewerpapel;
  3. Indique al usuario queinstalar el SDK de Google Cloude inicialícelo con sus credenciales;
  4. Haga que el usuario acceda mediante SSH a la instancia adecuada mediante gcloud compute ssh SERVICE_ACCOUNT_USERNAME@INSTANCE_IP_OR_HOSTNAME --zone ZONE_OF_INSTANCE.

Sugeriría que el usuario ingrese SSH a la máquina de destino a través de Cloud Shell, ya que evitaría tener que realizar el paso 3 por completo. No se olvide también de las reglas del firewall, ya que las IP públicas asignadas a Cloud Shell no parecen caer dentro de los rangos de IP públicas comunes de Google.

No se sorprenda si ve un mensaje como Updating project ssh metadata...failed. Esto es de esperarse, ya que la cuenta de servicio solo tiene permisos para agregar claves SSH a los metadatos de las instancias.

información relacionada