Configuración del Acceso adaptado al contexto con Cloud Identity-Aware Proxy

En esta guía, se describe cómo extender las políticas de acceso de Cloud Identity-Aware Proxy (Cloud IAP) mediante niveles de acceso y el Marco de trabajo de condiciones de Cloud Identity and Access Management (Cloud IAM). Los niveles de acceso permiten configurar restricciones de acceso a los recursos basados en direcciones IP y a los atributos del dispositivo del usuario final. Las condiciones de Cloud IAM permiten hacer restricciones de acceso basadas en rutas, fecha, hora y hosts de las URL.

Si estás registrado en la versión Beta privada del Marco de trabajo de las condiciones de Cloud IAM, también puedes usar los niveles de acceso a los proyectos protegidos con Cloud IAP.

Por ejemplo, dependiendo del tipo de configuración de la política, tu aplicación sensible puede hacer lo siguiente:

  • Otorgar acceso a todos los empleados que utilicen un dispositivo empresarial de confianza de la red local
  • Otorgar acceso a los empleados que estén en el grupo Acceso remoto si utilizan un dispositivo empresarial de confianza con una contraseña segura y un parche actualizado desde cualquier red
  • Otorgar acceso solamente a los empleados que estén en el grupo Acceso privilegiado si la ruta de la URL comienza con /admin

Antes de comenzar

Antes de comenzar, necesitarás lo siguiente:

Configuración de niveles de acceso

Para limitar el acceso por dirección IP o por atributos del dispositivo del usuario final, deberás crear un nivel de acceso. Si deseas saber cómo crear un nivel de acceso, consulta la guía de Access Context Manager. Cloud IAP usa el nombre del nivel de acceso para asociarlo con una aplicación protegida por Cloud IAP.

Creación de una cuenta de servicio

Para usar los niveles de acceso y actualizar tu política de Cloud IAM mediante la API, necesitas una cuenta de servicio autenticada en tu proyecto.

  1. En el proyecto en donde está implementada tu aplicación, crea una nueva cuenta de servicio.
  2. Autentica tu nueva cuenta de servicio con gcloud auth activate-service-account.

Descarga del archivo de credenciales

Debes descargar el archivo de credenciales JSON de tu nueva cuenta de servicio para actualizar tu política de Cloud IAM con la API. Para descargar el archivo de credenciales JSON:

  1. Ve a la página Cuentas de servicio.
    Ir a la página Cuentas de servicio

  2. Haz clic en la dirección de correo electrónico de tu cuenta de servicio.

  3. Haz clic en Editar.

  4. Haz clic en Crear clave.

  5. Selecciona JSON como tu tipo de clave.

  6. Haz clic en Crear y cierra la ventana de confirmación que aparece para crear tu nueva clave.

Se descarga tu archivo de credenciales JSON.

Edición de la política de Cloud IAM

Una aplicación protegida por Cloud IAP tiene una política de Cloud IAM que vincula la función de Cloud IAP a la aplicación.

Cuando se agrega una vinculación condicional de Cloud IAM a la política de Cloud IAM, se agrega una restricción a tus recursos por atributos de la solicitud. Los atributos de la solicitud incluyen lo siguiente:

  • niveles de acceso
  • rutas o host de URL
  • fecha/hora

Ten en cuenta que los valores de la solicitud especificados en una vinculación condicional de Cloud IAM deben coincidir con los de request.host y request.path. Por ejemplo, si restringes el acceso a rutas que comiencen con /internal admin, podrás omitir la restricción yendo a /internal%20admin.

Agrega y edita vinculaciones condicionales en tu política de Cloud IAM mediante el proceso que se describe a continuación.

Console

Para agregar una vinculación condicional con GCP Console:

  1. Ve a la página de administración de Cloud IAP.

    Ir a la página de administración de Cloud IAP

  2. Selecciona la casilla de verificación junto a los recursos para los que deseas actualizar los permisos de Cloud IAM.

  3. En el panel de información a la derecha, haz clic en Agregar miembro.

  4. En el cuadro Nuevo miembro, ingresa los miembros a los que deseas asignarles una función.

  5. En la lista desplegable Seleccionar una función, selecciona la función Usuario de app web protegida con IAP y especifica las condiciones de nivel de acceso que deberán cumplir los miembros para acceder al recurso.

    • Para especificar los niveles de acceso existentes, selecciónalos en la lista desplegable Niveles de acceso. Debes seleccionar la función Usuario de app web protegida con IAP y tener permisos de nivel de organización para ver los niveles de acceso existentes. Se le deben otorgar algunas de las siguientes funciones:
      • Administrador de Access Context Manager
      • Editor de Access Context Manager
      • Lector de Access Context Manager
    • Para crear y administrar los niveles de acceso, usa Access Context Manager.
  6. Si deseas agregar más funciones para los miembros, haz clic en Agregar otra función.

  7. Cuando hayas agregado todas las funciones que necesitas, haz clic en Guardar.

    Acabas de agregar una vinculación condicional a tu recurso.

    Para quitar la vinculación condicional:

  8. Ve a la página de administración de Cloud IAP.

    Ir a la página de administración de Cloud IAP

  9. Selecciona la casilla de verificación que está junto al recurso para el que deseas quitar la función de Cloud IAM del miembro.

  10. En el panel de información de la derecha, en Función/Miembro haz clic en la función que deseas quitar al miembro.

  11. Haz clic en Quitar junto al miembro.

  12. En el cuadro de diálogo Quitar función del miembro que aparece, haz clic en Quitar. Para quitar todas las funciones no heredadas de un miembro en el recurso seleccionado, selecciona la casilla de verificación antes de hacer clic en Quitar.

gcloud

Para configurar las vinculaciones condicionales con la herramienta gcloud, debes ingresar en la versión Beta privada del Marco de trabajo de las condiciones de Cloud IAM. Por ahora, solo puedes usar la herramienta gcloud para establecer vinculaciones condicionales a nivel de proyecto.

Para configurar vinculaciones condicionales, edita el archivo policy.yaml de tu proyecto, mediante los siguientes pasos:

  1. Abre la política de Cloud IAM de la aplicación con el siguiente comando de gcloud:

    gcloud projects get-iam-policy PROJECT_ID > policy.yaml

  2. Edita el archivo policy.yaml para especificar lo siguiente:

    • Los usuarios y los grupos a los que deseas aplicar la condición de Cloud IAM.
    • La función iap.httpsResourceAccessor para permitirles acceder a los recursos.
    • La condición de Cloud IAM.

      El siguiente fragmento muestra una condición de Cloud IAM con un solo atributo especificado. Esta condición otorga acceso al usuario y al grupo si se cumple con los requisitos de nivel de acceso ACCESS_LEVEL_NAME y la ruta de la URL del recurso comienza con /.

      ...
      - members:
      - group:EXAMPLE_GROUP@GOOGLE.COM
      - user:EXAMPLE_USER@GOOGLE.COM
      role: roles/iap.httpsResourceAccessor
      condition:
          expression: "accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in
                       request.auth.access_levels && request.path.startsWith("/")
          title: CONDITION_TITLE
      ...

  3. Vincula la política a la aplicación con el comando set-iam-policy.

    gcloud projects set-iam-policy PROJECT_ID policy.yaml

Tu política de Cloud IAM ahora incluye una vinculación condicional.

API

A fin de editar el archivo policy.json de tu aplicación, sigue los pasos que aparecen a continuación para tu tipo de aplicación. Consulta Administración del acceso a los recursos protegidos por Cloud IAP para obtener más información sobre cómo usar la API de Cloud IAM y administrar las políticas de acceso.

Antes sigue los pasos específicos para la aplicación de API que aparecen a continuación:

  1. Descarga el archivo de credenciales de tu cuenta de servicio.
  2. Exporta las siguientes variables:

    export PROJECT_NUM=PROJECT_NUMBER
    export IAP_BASE_URL=https://iap.googleapis.com/v1beta1/projects/${PROJECT_NUMBER}/iap_web
    # Replace with the path to your local service account's downloaded JSON file
    export JSON_CREDS=EXAMPLE.IAM.GSERVICEACCOUNT.COM.JSON
    # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy
    export JSON_NEW_POLICY=POLICY_FILE.JSON
    

  3. Convierte el archivo JSON de las credenciales de tu cuenta de servicio en un token de acceso OAuth mediante Oauth2l a través de la ejecución del siguiente comando:

    oauth2l header --json ${JSON_CREDS} cloud-platform

  4. Si esta es la primera vez que ejecutas el comando anterior, haz lo siguiente cuando se te solicite:

    1. Obtén el código de verificación. Para ello, haz clic en el vínculo mostrado y copia el código.
    2. Pega el código de verificación en la solicitud de tu aplicación.
    3. Copia el token del portador que se muestra.
    4. Exporta una nueva variable que tenga asignado el token del portador que se muestra.
      export CLOUD_OAUTH_TOKEN=AUTHORIZATION_BEARER_TOKEN
  5. Si ya ejecutaste este comando anteriormente, exporta la siguiente variable.

    export CLOUD_OAUTH_TOKEN ="$(oauth2l header --json ${JSON_CREDS} cloud-platform)"

App Engine

  1. Exporta las siguientes variables de App Engine:

    # The APP_ID is usually the project ID
    export GAE_APP_ID=APP_ID
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}

  2. Obtén la política de Cloud IAM para la aplicación de App Engine con el método getIamPolicy. El bit de datos vacío al final convierte la solicitud curl en POST en lugar de GET.

    curl -i -H "${CLOUD_OAUTH_TOKEN}" ${GAE_BASE_URL}/:getIamPolicy \
         -d ''
    

  3. Agrega tu vinculación condicional de Cloud IAM al archivo JSON con las políticas de Cloud IAM. El siguiente ejemplo muestra un archivo policy.json editado que vincula la función iap.httpsResourceAccessor con dos usuarios y les otorga acceso a los recursos protegidos por Cloud IAP. Se agregó una condición de Cloud IAM para otorgarles acceso a los recursos solo si se cumple con el requisito de nivel de acceso ACCESS_LEVEL_NAME y la ruta de la URL del recurso comienza con /. Solo puede haber una condición por vinculación.

    Archivo policy.json de ejemplo

    {
    "policy": {
    "bindings": [
    {
      "role": "roles/iap.httpsResourceAccessor",
      "members": [
          "group:EXAMPLE_GROUP@GOOGLE.COM",
          "user:EXAMPLE_USER@GOOGLE.COM"
      ],
      "condition": {
        "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
        "title": "CONDITION_NAME"
      }
    }
    ]
    }
    }

  4. Configura tu nuevo archivo policy.json con el método setIamPolicy.

    curl -i -H "${CLOUD_OAUTH_TOKEN}" ${GAE_BASE_URL}:setIamPolicy \
         -d @${JSON_NEW_POLICY}

Servicios y versiones de App Engine

También puedes actualizar la política de Cloud IAM para un servicio de App Engine, todas las versiones o una versión específica de un servicio. Sigue estos pasos para hacerlo con una versión específica de un servicio:

  1. Exporta las siguientes variantes adicionales.
    export GAE_SERVICE=SERVICE_NAME
    export GAE_VERSION=VERSION_NAME
    
  2. Actualiza la variante GAE_BASE_URL exportada.
    export GAE_BASE_URL=${IAP_BASE_URL}/appengine-${GAE_APP_ID}/services/${GAE_SERVICE}/versions/${GAE_VERSION}
  3. Obtén y actualiza la política de Cloud IAM de la versión con los comandos getIamPolicy y setIamPolicy que se muestran antes.

GKE y Compute Engine

  1. Exporta el ID del proyecto de tu servicio de backend.

    export BACKEND_SERVICE_NAME=BACKEND_SERVICE_NAME

  2. Obtén la política de Cloud IAM para la aplicación de Compute Engine con el método getIamPolicy. El bit de datos vacío al final convierte la solicitud curl en POST en lugar de GET.

    curl -i -H "${CLOUD_OAUTH_TOKEN}" ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:getIamPolicy \
         -d ''

  3. Agrega tu vinculación condicional de Cloud IAM al archivo JSON con las políticas de Cloud IAM. El siguiente ejemplo muestra un archivo policy.json editado que vincula la función iap.httpsResourceAccessor con dos usuarios y les otorga acceso a los recursos protegidos por Cloud IAP. Se agregó una condición de Cloud IAM para otorgarles acceso a los recursos solo si se cumple con el requisito de nivel de acceso ACCESS_LEVEL_NAME y la ruta de la URL del recurso comienza con /. Solo puede haber una condición por vinculación.


    Archivo policy.json de ejemplo

    {
    "policy": {
    "bindings": [
    {
    "role": "roles/iap.httpsResourceAccessor",
    "members": [
      "group":EXAMPLE_GROUP@GOOGLE.COM,
      "user:EXAMPLE_USER@GOOGLE.COM"
    ],
    "condition": {
      "expression": ""accessPolicies/ORGANIZATION_NUMBER/accessLevels/ACCESS_LEVEL_NAME" in request.auth.access_levels && request.path.startsWith("/")",
      "title": "CONDITION_NAME"
    }
    }
    ]
    }
    }

  4. Configura tu nuevo archivo policy.json con el método setIamPolicy.

    curl -i -H "Content-Type:application/json" \
         -H "$(oauth2l header --json ${JSON_CREDS} cloud-platform)" \
         ${IAP_BASE_URL}/compute/services/${BACKEND_SERVICE_NAME}:setIamPolicy \
         -d @${JSON_NEW_POLICY}

Cloud Audit Logging y niveles de acceso

Habilitar Cloud Audit Logging para los proyectos protegidos con Cloud IAP te permite ver las solicitudes de acceso autorizadas y no autorizadas. Sigue los pasos que aparecen a continuación para ver las solicitudes y todos los niveles de acceso con que cumple un solicitante:

  1. Ve a la página de registros de tu proyecto en GCP Console.
    Ir a la página de registros
  2. En la lista desplegable del selector de recursos, selecciona un recurso. Los recursos protegidos por Cloud IAP incluyen la Aplicación GAE y el Servicio de backend de GCE.
  3. En la lista desplegable tipo de registros, selecciona data_access.
    1. El tipo de registro data_access solo aparece si se registró tráfico hacia tu recurso después de que habilitaras Cloud Audit Logging para Cloud IAP.
  4. Haz clic para ampliar la fecha y la hora del acceso que deseas revisar.
    1. El acceso autorizado tiene un ícono i de color azul.
    2. El acceso no autorizado tiene un ícono !! de color naranja.
  5. Ve los niveles de acceso con los que cumple el solicitante. Para ello, haz clic a fin de expandir las secciones hasta llegar a protoPayload > requestMetadata > requestAttributes > auth > accessLevels.

Ten en cuenta que todos los niveles de acceso con los que cumple un usuario son visibles cuando se ve una solicitud, incluidos los niveles de acceso que no se solicitaron para acceder a ella. Ver una solicitud no autorizada no indica cuáles son los niveles de acceso con que no se cumplió. Esto último se determina comparando las condiciones del recurso con los niveles de acceso visibles en la solicitud.

Consulta la guía de Cloud Audit Logging para obtener más información sobre accesos.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Identity-Aware Proxy