En esta guía, se describe cómo puedes configurar el acceso adaptado al contexto para proteger el acceso de las cuentas de servicio a las APIs de Google Cloud , según los niveles de acceso que definas.
Limitaciones
Se aplican las siguientes limitaciones a las políticas de acceso adaptado al contexto para las cuentas de servicio:
Los atributos basados en la red o en la dirección IP no se pueden usar para las vinculaciones de cuentas de servicio si la cuenta de servicio se usará para las ejecuciones de flujos de trabajo y Cloud Scheduler.
Las políticas de acceso adaptado al contexto no pueden bloquear las conexiones a clústeres privados de GKE con
kubectlni a Cloud SQL con el proxy de autenticación.Si un nivel de acceso vinculado a una cuenta de servicio contiene atributos no admitidos, como atributos
Device, se deniega el acceso a la API.No se admiten los niveles de acceso con alcance para las cuentas de servicio.
Si usas Cloud Build y Cloud Run, te recomendamos que utilices las siguientes funciones integradas de la VPC:
En el caso de Cloud Run, usa el acceso a VPC sin servidores.
En el caso de Cloud Build, usa grupos privados.
Antes de comenzar
- Asegúrate de tener una Google Cloud organización y, al menos, un Google Cloud proyecto.
- Accede a tu cuenta de Google Cloud . 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.
-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
Crea o selecciona un Google Cloud proyecto.
Roles necesarios para seleccionar o crear un proyecto
- Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
-
Crear un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (
roles/resourcemanager.projectCreator), que contiene el permisoresourcemanager.projects.create. Obtén más información para otorgar roles.
-
Crea un proyecto de Google Cloud :
gcloud projects create PROJECT_ID
Reemplaza
PROJECT_IDpor un nombre para el proyecto Google Cloud que estás creando. -
Selecciona el proyecto Google Cloud que creaste:
gcloud config set project PROJECT_ID
Reemplaza
PROJECT_IDpor el nombre de tu proyecto de Google Cloud .
-
Verifica que la facturación esté habilitada para tu proyecto de Google Cloud .
-
Instala Google Cloud CLI.
-
Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init -
Crea o selecciona un Google Cloud proyecto.
Roles necesarios para seleccionar o crear un proyecto
- Selecciona un proyecto: Para seleccionar un proyecto, no se requiere un rol de IAM específico. Puedes seleccionar cualquier proyecto en el que se te haya otorgado un rol.
-
Crear un proyecto: Para crear un proyecto, necesitas el rol de Creador de proyectos (
roles/resourcemanager.projectCreator), que contiene el permisoresourcemanager.projects.create. Obtén más información para otorgar roles.
-
Crea un proyecto de Google Cloud :
gcloud projects create PROJECT_ID
Reemplaza
PROJECT_IDpor un nombre para el proyecto Google Cloud que estás creando. -
Selecciona el proyecto Google Cloud que creaste:
gcloud config set project PROJECT_ID
Reemplaza
PROJECT_IDpor el nombre de tu proyecto de Google Cloud .
-
Verifica que la facturación esté habilitada para tu proyecto de Google Cloud .
- Actualiza los componentes de Google Cloud CLI:
gcloud components update --quiet
- Crea una cuenta de servicio en tu proyecto si aún no tienes una. Esta cuenta de servicio es el destino de la política de acceso.
Roles obligatorios
En esta sección, se describen los roles de Identity and Access Management (IAM) que se requieren para usar el acceso adaptado al contexto.
Roles a nivel del proyecto
Para obtener el permiso que necesitas a nivel del proyecto, pídele a tu administrador que te otorgue el rol de IAM de Administrador de cuenta de servicio (roles/iam.serviceAccountAdmin) en la cuenta de usuario o la cuenta de servicio.
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene el permiso the required permissions, que se requiere a nivel del proyecto.
También puedes obtener este permiso con roles personalizados o con otros roles predefinidos.
Roles a nivel de organización
Para obtener el permiso que necesitas a nivel de la organización, pídele a tu administrador que te otorgue los siguientes roles de IAM en la cuenta de usuario o la cuenta de servicio:
- Administrador de vinculaciones de acceso a Cloud (
roles/accesscontextmanager.gcpAccessAdmin) - Administrador de Access Context Manager (
roles/accesscontextmanager.policyAdmin)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
Este rol predefinido contiene el permiso the required permissions, que se requiere a nivel de la organización.
También puedes obtener este permiso con roles personalizados o con otros roles predefinidos.
Vincula políticas de acceso a diferentes niveles de recursos
Puedes vincular políticas de acceso con el mismo modo de aplicación a recursos que se encuentran en diferentes niveles de la jerarquía de recursos. Cuando un recurso intenta acceder, el Acceso adaptado al contexto usa la política vinculada a ese recurso antes de intentar usar una política vinculada a un recurso de nivel superior.
Por ejemplo, puedes vincular una política de acceso en modo de aplicación directamente a una cuenta de servicio y una política diferente en modo de aplicación al proyecto que contiene la cuenta de servicio. Cuando la cuenta de servicio intenta acceder a los recursos, el Acceso adaptado al contexto evalúa la política vinculada a la cuenta de servicio. Para otras cuentas de servicio del proyecto que no tienen políticas de acceso vinculadas, el acceso adaptado al contexto evalúa la política de modo de aplicación vinculada al proyecto. Lo mismo sucede si el modo de aplicación se establece en ejecución de prueba tanto para la política a nivel del proyecto como para la política a nivel de la cuenta de servicio.
Puedes usar varias políticas de acceso para implementar políticas de acceso de forma incremental y selectiva. Por ejemplo, puedes hacer lo siguiente:
- Vincula una política de acceso en modo de ejecución de prueba a nivel del proyecto y asegúrate de que funcione como esperas. Para ello, verifica si hay eventos de acceso denegado en los registros de auditoría de Cloud.
- Vincula la política de acceso en modo de aplicación solo a cuentas de servicio específicas.
- Vincula la política de acceso en modo de aplicación a nivel del proyecto y, luego, vincula una política de acceso menos restrictiva y en modo de aplicación a cuentas de servicio específicas según sea necesario.
Atributos de nivel de acceso para cuentas de servicio
En esta sección, se enumeran los niveles de acceso compatibles con las cuentas de servicio.
Se admiten los siguientes atributos para las cuentas de servicio:
- Subredes de IP, que se basan en la dirección IP pública
- Redes de VPC, que se basan en la dirección IP privada
-
La ubicación geográfica, que se basa en la dirección IP pública
Cuando la cuenta de servicio realiza cualquier solicitud a las APIs de Google Cloud, el acceso adaptado al contexto evalúa la solicitud y compara la dirección IP de la solicitud con las direcciones IP especificadas en la política de acceso adaptado al contexto. Si las direcciones IP coinciden, se permite la llamada a la API. Si la dirección IP no coincide, se deniega la llamada a la API.
-
Es un nivel de acceso personalizado con una expresión de Common Expression Language (CEL). La expresión debe evaluarse como
truepara permitir el acceso y comofalsepara denegarlo.La siguiente expresión CEL es útil para restringir el acceso por cuentas de servicio.
La expresión se evalúa como
truesi la solicitud se originó en uno o más números de proyecto especificados:expression: "originatesFromProjects(origin, [PROJECT_NUMBER, ...])"originatesFromProjectsverifica si la solicitud proviene de una red asociada al proyecto especificado y si proviene de una dirección IP privada. -
Hora del día, que se basa en la hora y la fecha de la solicitud en una zona horaria especificada.
Para obtener más información, consulta Cómo configurar condiciones de acceso por hora y día.
Crea un nivel de acceso
En esta sección, se describe cómo crear un nivel de acceso dentro de tu organización. Los niveles de acceso definen las condiciones en las que se permite el acceso.
Sigue las instrucciones para crear un nivel de acceso básico o crear un nivel de acceso personalizado.
Ten en cuenta el nombre completo de la política de acceso, que tiene el siguiente formato:
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
Crea una vinculación de acceso
Vincula el nivel de acceso a la cuenta de servicio seleccionada. De esta manera, se aplican las condiciones definidas en el nivel de acceso. Puedes vincular el nivel de acceso a una sola cuenta de servicio o a todas las cuentas de servicio de un proyecto.
Vincula el nivel de acceso a una cuenta de servicio específica
En esta sección, se describe cómo vincular el nivel de acceso a una cuenta de servicio específica.
gcloud
Vincula el nivel de acceso a una cuenta de servicio con gcloud CLI.
gcloud access-context-manager cloud-bindings create \
--organization=ORGANIZATION_ID \
--service-account=SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
--level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
Reemplaza lo siguiente:
ORGANIZATION_ID: El ID de tu organización Google CloudSERVICE_ACCOUNT_NAME: Es el nombre, no el correo electrónico, de la cuenta de servicio de destino.SERVICE_ACCOUNT_PROJECT_ID: Es el ID del proyecto que contiene la cuenta de servicio de destino.POLICY_ID: El ID de la política de accesoACCESS_LEVEL_NAME: Es el nombre del nivel de acceso que creaste.Para usar el acceso adaptado al contexto sin aplicar el nivel de acceso ni rechazar el acceso, puedes vincular el nivel de acceso en el modo de prueba.
API de REST
Para vincular el nivel de acceso a una cuenta de servicio específica con la API de REST, ejecuta el siguiente comando:
Crea un archivo
request.jsoncon el siguiente contenido:{ "principal": { "serviceAccount": "SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com" }, "accessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"] }Reemplaza lo siguiente:
SERVICE_ACCOUNT_NAME: Es el nombre, no el correo electrónico, de la cuenta de servicio de destino.SERVICE_ACCOUNT_PROJECT_ID: Es el ID del proyecto que contiene la cuenta de servicio de destino.POLICY_ID: El ID de la política de accesoACCESS_LEVEL_NAME: El nombre del nivel de acceso que creaste
Ejecuta el comando siguiente:
curl -H "X-Goog-User-Project: PROJECT_ID" -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://accesscontextmanager.googleapis.com/v1/organizations/ORGANIZATION_ID/gcpUserAccessBindings"
Reemplaza lo siguiente:
PROJECT_ID: ID del proyecto que usas para realizar las llamadas a la APIORGANIZATION_ID: Es el ID de tu organización Google Cloud.
Vincula el nivel de acceso a todas las cuentas de servicio de un proyecto
En esta sección, se describe cómo vincular el nivel de acceso a todas las cuentas de servicio de un proyecto.
gcloud
Para vincular el nivel de acceso a todas las cuentas de servicio de un proyecto con gcloud CLI, ejecuta el siguiente comando:
gcloud access-context-manager cloud-bindings create \ --organization=ORGANIZATION_ID \ --service-account-project-number=PROJECT_NUMBER \ --level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
Reemplaza lo siguiente:
ORGANIZATION_ID: El ID de tu organización Google CloudPROJECT_NUMBER: Es el número del proyecto que contiene todas las cuentas de servicio a las que deseas vincular el acceso.POLICY_ID: El ID de la política de accesoACCESS_LEVEL_NAME: Es el nombre del nivel de acceso que creaste.
API de REST
Para vincular el nivel de acceso a todas las cuentas de servicio de un proyecto con la API de REST, haz lo siguiente:
Crea un archivo
request.jsoncon el siguiente contenido:{ "principal": { "serviceAccountProjectNumber": "PROJECT_NUMBER" }, "accessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"] }Reemplaza lo siguiente:
PROJECT_NUMBER: Es el número del proyecto que contiene todas las cuentas de servicio a las que deseas vincular el acceso.POLICY_ID: El ID de la política de accesoACCESS_LEVEL_NAME: Es el nombre del nivel de acceso que creaste.
Ejecuta el comando siguiente:
curl -H "X-Goog-User-Project: PROJECT_ID" -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://accesscontextmanager.googleapis.com/v1/organizations/ORGANIZATION_ID/gcpUserAccessBindings"
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto que usas para realizar las llamadas a la API.ORGANIZATION_ID: El ID de tu organización Google Cloud
Para usar el Acceso adaptado al contexto sin aplicar el nivel de acceso ni denegar el acceso, puedes vincular la política de acceso en el modo de prueba.
La respuesta de la API para la operación de creación de vinculación incluye el nombre de la vinculación, que contiene el ID único de vinculación.
Cómo usar el modo de ejecución de prueba
Puedes vincular la política de acceso en modo de ejecución de prueba. Cuando usas el modo de ejecución de prueba, tus cuentas de servicio pueden seguir accediendo a los recursos sin que se aplique la política. Sin embargo, si tus cuentas de servicio intentan acceder de forma que se incumplan las políticas de acceso, los incumplimientos se registrarán en los Registros de auditoría de Cloud.
Vincula políticas de acceso en modo de ejecución de prueba
gcloud
Para vincular políticas de acceso en el modo de ejecución de prueba, reemplaza el parámetro --level por --dry-run-level, con el siguiente formato:
--dry-run-level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
API de REST
Para vincular políticas de acceso en el modo de ejecución de prueba, crea el archivo request.json con el siguiente contenido:
{
"principal": {
"serviceAccountProjectNumber": "TARGET_PROJECT_NUMBER"
},
"dryRunAccessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"]
}
Reemplaza lo siguiente:
TARGET_PROJECT_NUMBER: Es el número del proyecto de destino.POLICY_ID: El ID de la política de accesoACCESS_LEVEL_NAME: El nombre del nivel de acceso
Revisa los registros de auditoría de Cloud
En esta sección, se describe cómo puedes verificar los Registros de auditoría de Cloud para ver si se denegó el acceso en modo de prueba de validación a tu cuenta de servicio. Para obtener más información sobre cómo buscar entradas del modo de ejecución de prueba en los Registros de auditoría de Cloud, consulta Visualiza los registros del modo de ejecución de prueba.
Console
Para ver los rechazos de acceso a la cuenta de servicio del modo de ejecución de prueba de Registros de auditoría de Cloud con la consola de Google Cloud , haz lo siguiente:
En la consola de Google Cloud , ve a la página Explorador de registros del :
Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Logging.
En la consola de Google Cloud , selecciona tu proyecto u organización.
En el campo Consulta de registro, ingresa la siguiente consulta:
protoPayload.serviceName="contextawareaccess.googleapis.com" protoPayload.metadata.dryRunEvaluationResult:DENIED SEARCH("`SERVICE_ACCOUNT_NAME`")En el selector de rango de tiempo, elige un tiempo relativo predefinido, como Últimos 30 minutos, Última hora o Últimas 24 horas, o bien especifica un rango personalizado.
gcloud
Para ver los rechazos de acceso a la cuenta de servicio en el modo de ejecución de prueba de los Registros de auditoría de Cloud con la gcloud CLI, haz lo siguiente:
gcloud logging read \
'protoPayload.serviceName="contextawareaccess.googleapis.com" AND
protoPayload.metadata.dryRunEvaluationResult:DENIED AND
SEARCH("`SERVICE_ACCOUNT_NAME`")' \
--organization=ORGANIZATION_ID
Reemplaza lo siguiente:
ORGANIZATION_ID: El ID de la organizaciónSERVICE_ACCOUNT_NAME: el nombre de la cuenta de servicio
El comando gcloud logging read admite la marca --freshness para ver la información de registro en períodos relativos. Por ejemplo, si agregas --freshness=3h al comando, puedes ver las entradas de registro del modo de prueba en los últimos 3 horas.
Soluciona problemas
En esta sección, se describe cómo solucionar problemas relacionados con el acceso adaptado al contexto para cuentas de servicio.
Solución de problemas generales
Revisa los Registros de auditoría de Cloud.
Usa la siguiente consulta de registro y revisa las entradas de registro para obtener más información.
protoPayload.serviceName="contextawareaccess.googleapis.com"
Revisa el nombre del recurso del nivel de acceso que informa el acceso adaptado al contexto cuando registra eventos de aplicación.
Asegúrate de que el nivel de acceso sea un recurso a nivel de la organización.
Asegúrate de que el nivel de acceso en tus políticas de acceso se base en atributos que se admitan para las cuentas de servicio.
Verifica que la política de acceso esté vinculada a la cuenta de servicio prevista.
Asegúrate de que tu identidad de usuario no esté restringida por una política de acceso. Esto puede ocurrir cuando la identidad de un usuario es miembro de un grupo de Google que tiene una política de acceso vinculada. Esa política podría restringir el acceso del usuario y, a su vez, impedir el flujo de llamadas a la cuenta de servicio.
Comunícate con tu administrador de seguridad.
Acceso denegado
Se denegó el acceso por los siguientes motivos:
Vinculaste la política de acceso en modo de aplicación, en lugar de en modo de ejecución de prueba.
En lugar de aplicar la política, puedes usar el modo de ejecución de prueba para permitir que las cuentas de servicio accedan a los recursos y registren eventos de aplicación de la política sin denegar el acceso a los recursos. Además, puedes seguir las instrucciones generales para solucionar problemas.
Se debe actualizar el nivel de acceso para incluir más fuentes. Por ejemplo, se está usando una dirección IP que no se incluyó en el nivel de acceso cuando se creó.
¿Qué sigue?
- Obtén más información para administrar las vinculaciones de acceso.