En esta guía, se describe cómo puedes configurar el Acceso adaptado al contexto para ayudar a proteger el acceso de las cuentas de servicio a las APIs de Google Cloud , según los niveles de acceso que definas.
Limitaciones
Las siguientes limitaciones se aplican a las políticas de acceso adaptado al contexto para las cuentas de servicio:
No puedes usar atributos basados en la red o en la dirección IP para las vinculaciones de cuentas de servicio si la cuenta de servicio se usa 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 Google Kubernetes Engine (GKE) con
kubectlni a Cloud SQL con el proxy de autenticación.Si un nivel de acceso que vinculas a una cuenta de servicio contiene atributos no admitidos, como los atributos
Device, el Acceso adaptado al contexto deniega el acceso a la API.Los niveles de acceso con alcance no son compatibles con las cuentas de servicio.
Si usas Cloud Build y Cloud Run, te recomendamos que uses las siguientes funciones integradas de la nube privada virtual (VPC):
Para Cloud Run, usa el Acceso a VPC sin servidores.
Para Cloud Build, usa grupos privados.
Antes de comenzar
- Asegúrate de tener una organización deGoogle Cloud y, al menos, un proyecto deGoogle Cloud .
- 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 proyecto de Google Cloud .
Roles necesarios para seleccionar o crear un proyecto
- Seleccionar 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.
-
Crea 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 de Google Cloud que estás creando. -
Selecciona el proyecto de 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 .
Habilita las APIs de IAM, Access Context Manager y Resource Manager, si aún no están habilitadas:
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtenerlo a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.gcloud services enable accesscontextmanager.googleapis.com
cloudresourcemanager.googleapis.com iam.googleapis.com -
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 proyecto de Google Cloud .
Roles necesarios para seleccionar o crear un proyecto
- Seleccionar 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.
-
Crea 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 de Google Cloud que estás creando. -
Selecciona el proyecto de 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 .
Habilita las APIs de IAM, Access Context Manager y Resource Manager, si aún no están habilitadas:
Roles necesarios para habilitar las APIs
Para habilitar las APIs, necesitas el permiso
serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtenerlo a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén más información para otorgar roles.gcloud services enable accesscontextmanager.googleapis.com
cloudresourcemanager.googleapis.com iam.googleapis.com - 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 adaptado al contexto.
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 de 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 cuentas de servicio (roles/iam.serviceAccountAdmin) en la cuenta de usuario o 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 de servicio:
- Administrador de vinculaciones de acceso a la nube (
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 para
a nivel de la organización.
También puedes obtener este permiso con roles personalizados o con otros roles predefinidos.
Vincula las políticas de acceso adaptado al contexto a diferentes niveles de recursos
Puedes vincular políticas de acceso adaptado al contexto con el mismo modo de aplicación forzosa 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 modo de aplicación forzosa directamente a una cuenta de servicio y una política de modo de aplicación forzosa diferente 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 vinculadas, el Acceso adaptado al contexto evalúa la política de modo de aplicación forzosa que está vinculada al proyecto. Lo mismo ocurre si el modo de aplicación forzosa se establece en ejecución de prueba para la política a nivel de proyecto y la política a nivel de cuenta de servicio.
Puedes usar varias políticas para implementar políticas de forma incremental y selectiva. Por ejemplo, puedes hacer lo siguiente:
- Vincula una política 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 en modo de aplicación forzosa solo a cuentas de servicio específicas.
- Vincula la política en modo de aplicación forzosa a nivel del proyecto y, si es necesario, vincula una política menos restrictiva en modo de aplicación forzosa a cuentas de servicio específicas.
Atributos de nivel de acceso para cuentas de servicio
En esta sección, se enumeran los atributos de nivel de acceso que se admiten para 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 una 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, el Acceso adaptado al contexto permite la llamada a la API. Si las direcciones IP no coinciden, el Acceso adaptado al contexto rechaza la llamada a la API.
-
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 de CEL es útil para restringir el acceso de las 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, ['projects/PROJECT_NUMBER'])"originatesFromProjectsverifica si la solicitud proviene de una red asociada con el proyecto especificado y si la solicitud proviene de una dirección IP privada. -
La 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 Configura las condiciones de acceso de 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.
Toma nota del nombre completo del nivel 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: Es el ID de organización de Google Cloud.SERVICE_ACCOUNT_NAME: Es el ID de la cuenta de servicio de destino (la parte de la dirección de correo electrónico antes del símbolo@).SERVICE_ACCOUNT_PROJECT_ID: Es el ID del proyecto que contiene la cuenta de servicio de destino.POLICY_ID: Es el ID de la política de acceso de Access Context Manager.ACCESS_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 inhabilitar el acceso, puedes vincular el nivel de acceso en el modo de ejecución 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 ID de la cuenta de servicio de destino (la parte de la dirección de correo electrónico antes del símbolo@).SERVICE_ACCOUNT_PROJECT_ID: Es el ID del proyecto que contiene la cuenta de servicio de destino.POLICY_ID: Es el ID de la política de acceso de Access Context Manager.ACCESS_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: Es el ID de organización de 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 la 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: Es el ID de organización de Google Cloud.PROJECT_NUMBER: Es el número del proyecto que contiene todas las cuentas de servicio a las que deseas vincular el acceso.POLICY_ID: Es el ID de la política de acceso de Access Context Manager.ACCESS_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: Es el ID de la política de acceso de Access Context Manager.ACCESS_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: Es el ID de organización de Google Cloud.
Para usar el Acceso adaptado al contexto sin aplicar el nivel de acceso y denegar el acceso, puedes vincular el nivel de acceso en el modo de ejecución 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 de vinculación único.
Usa el modo de ejecución de prueba
Puedes vincular el nivel de acceso en el 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 apliquen medidas por incumplimiento. Sin embargo, si tus cuentas de servicio intentan acceder de una manera que incumple el nivel de acceso, el Acceso adaptado al contexto registra el incumplimiento en los Registros de auditoría de Cloud.
Vincula el nivel de acceso en el modo de ejecución de prueba
gcloud
Para vincular el nivel 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 el nivel 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: Es el ID de la política de acceso de Access Context Manager.ACCESS_LEVEL_NAME: Es el nombre del nivel de acceso.
Verifica 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 las denegaciones de acceso en el modo de prueba de validación de 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 en el modo de ejecución de prueba de los 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 período, elige un tiempo relativo predefinido, como Últimos 30 minutos, Última hora o Últimas 24 horas, o especifica un período 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 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: Es el ID de la organización.SERVICE_ACCOUNT_NAME: Es el ID de la cuenta de servicio (la parte de la dirección de correo electrónico antes del símbolo@).
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 ejecución de prueba de
las últimas 3 horas.
¿Qué sigue?
- Administra las vinculaciones de acceso
- Soluciona problemas del Acceso adaptado al contexto para cuentas de servicio