En este instructivo, se muestra cómo mejorar la posición de seguridad de tu clúster y app. Imagina que eres un administrador de plataforma cuya organización administra las apps para la tienda en línea con Anthos Service Mesh, un conjunto de herramientas que te ayuda a supervisar y administrar una malla de servicios confiable. Eres responsable de garantizar que la malla y las apps sean seguras.
Puedes evitar una configuración incorrecta y validar de forma automática las políticas de Anthos Service Mesh mediante el controlador de políticas y el Sincronizador de configuración de Anthos Config Management. El controlador de políticas permite la aplicación de políticas completamente programables para tus clústeres. El controlador de políticas también viene con una biblioteca predeterminada de plantillas de restricciones que puedes usar con el paquete de seguridad de Anthos Service Mesh para auditar el cumplimiento de las vulnerabilidades de seguridad de tu malla y las prácticas recomendadas. El Sincronizador de configuración concilia de forma continua el estado de los clústeres con un conjunto central de archivos de configuración declarativos de Kubernetes. Si usas el controlador de políticas y el Sincronizador de configuración juntos, puedes aplicar restricciones de forma continua en las opciones de configuración de la política de Anthos Service Mesh.
En el siguiente diagrama, se muestra una descripción general de cómo funcionan Anthos Service Mesh, el controlador de políticas y el Sincronizador de configuración en conjunto en este instructivo para administrar y proteger las apps de ejemplo Online Boutique que utilizas en este instructivo:
Objetivos
- Crear un clúster de Google Kubernetes Engine (GKE) y registrarlo en una flota.
- Instalar el controlador de políticas, el Sincronizador de configuración y Anthos Service Mesh en un clúster.
- Implementar las apps de ejemplo Online Boutique y una puerta de enlace de entrada.
- Aprovechar el paquete de políticas de Anthos Service Mesh para aplicar las siguientes prácticas recomendadas:
- Garantizar que todas las cargas de trabajo en la malla tengan una inserción automática de archivo adicional.
- Encripta todo el tráfico en la malla.
- Garantiza que todas las cargas de trabajo en la malla tengan control de acceso detallado.
Costos
En este instructivo, se usan los siguientes componentes facturables de Google Cloud:
- GKE.
- Anthos. En la facturación de Anthos, se incluye la facturación de Anthos Service Mesh y los componentes de Anthos Config Management.
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Obtén información sobre cómo verificar si la facturación está habilitada en un proyecto.
Prepare el entorno
En esta sección, prepararás el entorno para poder instalar Anthos Service Mesh, el controlador de políticas y el Sincronizador de configuración:
- Abre una sesión de Cloud Shell. Para abrir esta sesión, en la esquina superior derecha de esta página, haz clic en terminal Activar Cloud Shell y, luego, en Confirmar. Se abrirá una sesión de Cloud Shell dentro de un marco en la parte inferior de la página. Completa los siguientes comandos en esa sesión de Cloud Shell.
Actualiza a la versión más reciente de Google Cloud CLI:
gcloud components update
Para almacenar los archivos que crearás en este instructivo, crea un directorio con una variable de entorno:
WORK_DIR=~/asm-acm-tutorial-dir mkdir $WORK_DIR
Para simplificar el resto del instructivo, crea las siguientes variables de entorno:
PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID CLUSTER=asm-acm-tutorial CLUSTER_ZONE=us-east4-a PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')
Reemplaza
PROJECT_ID
por el ID del proyecto que deseas usar para este instructivo.Si se te solicita que autorices a Cloud Shell, haz clic en Autorizar para completar la operación.
Habilita las API que necesitarás para este instructivo:
gcloud services enable \ container.googleapis.com \ gkehub.googleapis.com \ mesh.googleapis.com \ anthos.googleapis.com
Esta operación puede tardar más de un minuto en completarse.
Configura un clúster de GKE
En esta sección, crearás un clúster de GKE y, luego, lo registrarás en una flota. Las flotas son un concepto de Google Cloud que organiza de manera lógica los clústeres y otros recursos, lo que te permite usar y administrar capacidades de varios clústeres y aplicar políticas coherentes en tus sistemas.
El clúster que creas en esta sección es el clúster en el que instalarás Anthos Service Mesh, el controlador de políticas y el Sincronizador de configuración. También es el clúster en el que implementarás las apps de ejemplo Online Boutique.
Para configurar tu clúster, completa los siguientes pasos:
Crea un clúster de GKE:
gcloud container clusters create ${CLUSTER} \ --zone ${CLUSTER_ZONE} \ --machine-type=e2-standard-4 \ --num-nodes 4 \ --workload-pool ${PROJECT_ID}.svc.id.goog \ --labels mesh_id=proj-${PROJECT_NUMBER}
Esta operación puede tardar más de cinco minutos en completarse.
El resultado es similar a este:
kubeconfig entry generated for asm-acm-tutorial. NAME: asm-acm-tutorial LOCATION: us-east4-a MASTER_VERSION: 1.21.10-gke.2000 MASTER_IP: 34.85.159.120 MACHINE_TYPE: e2-standard-4 NODE_VERSION: 1.21.10-gke.2000 NUM_NODES: 4 STATUS: RUNNING
Registra tu clúster en una flota:
gcloud container fleet memberships register ${CLUSTER} \ --project=${PROJECT_ID} \ --gke-cluster=${CLUSTER_ZONE}/${CLUSTER} \ --enable-workload-identity
El resultado es similar a este:
kubeconfig entry generated for asm-acm-tutorial. Waiting for membership to be created...done. Created a new membership [projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial] for the cluster [asm-acm-tutorial] Generating the Connect Agent manifest... Deploying the Connect Agent on cluster [asm-acm-tutorial] in namespace [gke-connect]... Deployed the Connect Agent on cluster [asm-acm-tutorial] in namespace [gke-connect]. Finished registering the cluster [asm-acm-tutorial] with the Fleet.
Explora el repositorio
En la siguiente sección de instalación, aplicas un manifiesto de Anthos Config Management acm-config.yaml
. Este manifiesto configura tu clúster para que se sincronice desde la carpeta asm-acm-tutorial
del repositorio de muestra de Anthos Config Management. Esta carpeta contiene todos los archivos de configuración que necesitas para completar el resto del instructivo.
A fin de simplificar la experiencia en este instructivo, usa comandos sed
de modo que puedas actualizar el archivo acm-config.yaml
para implementar los manifiestos necesarios en cada paso. Actualizar un solo archivo permite que te enfoques en los conceptos y el flujo para proteger tus clústeres, mallas y aplicaciones sin manipular de forma repetida los archivos ni ejecutar los comandos de git add|commit|push
.
Antes de aplicar el manifiesto acm-config.yaml
, es útil comprender la estructura y el contenido generales del repositorio.
Para usar la capacidad del Sincronizador de configuración de sincronizarse con varios repositorios, el repositorio asc-acm-tutorial
contiene dos carpetas de nivel superior; root-sync
y online-boutique
.
La carpeta root-sync
La carpeta root-sync
es el repositorio raíz.
Este repositorio se divide en varias subcarpetas, y cada una de estas subcarpetas contiene recursos y políticas para una parte diferente de este instructivo.
Hay dos carpetas que contienen recursos para configurar la app de ejemplo Online Boutique y la puerta de enlace de entrada:
init
: recursos para configurarRepoSync
para las apps Online Boutique.deployments
: recursos para implementar la puerta de enlace de entrada y los espacios de nombres y las apps Online Boutique.
Existen tres carpetas que contienen recursos para implementar las diferentes políticas de Anthos Service Mesh:
enforce-sidecar-injection
: recursos para implementar políticas a fin de aplicar la inserción de archivo adicional paraNamespace
yPod
.enforce-strict-mtls
: recursos para implementar políticas a fin de aplicar el modoSTRICT
de mTLS para toda la malla y cualquierPeerAuthentication
.enforce-authorization-policies
: Recursos para implementar políticas a fin de aplicar el valor predeterminadodeny
AuthorizationPolicy
para toda la malla, así como para aplicar los principales de origen detallados a cualquierAuthorizationPolicies
.
Las tres carpetas restantes contienen recursos para implementar los recursos que corrigen los incumplimientos de políticas de Anthos Service Mesh:
fix-strict-mtls
: recursos para implementarPeerAuthentication
de mTLS del modo predeterminadoSTRICT
en el espacio de nombresistio-system
.fix-default-deny-authorization-policy
: recursos para implementardeny
AuthorizationPolicy
de forma predeterminada en el espacio de nombresistio-system
.deploy-authorization-policies
: recursos para implementar los recursos detalladosAuthorizationPolicy
a fin de que las app de ejemplo Online Boutique funcionen.
La carpeta online-boutique
La carpeta online-boutique
es un repositorio de espacio de nombres.
Este repositorio contiene los recursos que necesitas para implementar las apps de ejemplo Online Boutique mediante Kustomize.
Instala el controlador de políticas, el Sincronizador de configuración y Anthos Service Mesh administrado
Ahora que creaste y registraste el clúster, puedes instalar el Sincronizador de configuración, el controlador de políticas y Anthos Service Mesh en el clúster y configurarlo para que se sincronice con los archivos de configuración en la carpeta asc-acm-tutorial
:
Habilita Anthos Config Management en tu flota:
gcloud beta container fleet config-management enable
Habilita Anthos Service Mesh en la flota.
gcloud container fleet mesh enable
Habilita la administración automática del plano de control de Anthos Service Mesh para permitir que Google aplique la configuración recomendada de Anthos Service Mesh administrada:
gcloud container fleet mesh update \ --control-plane automatic \ --memberships ${CLUSTER}
Para instalar y configurar el Sincronizador de configuración y el controlador de políticas, crea el siguiente manifiesto de Anthos Config Management:
cat <<EOF > $WORK_DIR/acm-config.yaml applySpecVersion: 1 spec: policyController: enabled: true templateLibraryInstalled: true referentialRulesEnabled: true configSync: enabled: true sourceFormat: unstructured syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples syncBranch: main secretType: none policyDir: asm-acm-tutorial/root-sync/init EOF
Para obtener más información sobre los campos de configuración de Anthos Config Management, consulta gcloud apply spec field.
Aplica el siguiente archivo:
gcloud beta container fleet config-management apply \ --membership ${CLUSTER} \ --config $WORK_DIR/acm-config.yaml
Después de aplicar este archivo, el controlador de políticas y el Sincronizador de configuración se instalan en tu clúster. A continuación, el Sincronizador de configuración comienza a sincronizar todos los archivos de configuración de la carpeta
asm-acm-tutorial
en tu clúster. Estos archivos de configuración instalan y configuran los siguientes componentes clave:Se sincroniza el objeto
RepoSync
que configura la app Online Boutique:Dado que el conciliador
RepoSync
necesita permisos adicionales para crear recursos de Istio, el repositorio también contiene roles del clúster y vinculaciones de roles del clúster a fin de otorgar estos permisos. Este es el manifiesto del rol del clúster que se aplica de forma automática al clúster:
Para garantizar la instalación correcta del controlador de políticas y del Sincronizador de configuración, consulta el estado de Anthos Config Management:
gcloud beta container fleet config-management status
El resultado es similar a este:
Name: asm-acm-tutorial Status: SYNCED Last_Synced_Token: 4b3384d Sync_Branch: main Last_Synced_Time: 2022-05-04T21:32:58Z Policy_Controller: INSTALLED Hierarchy_Controller: PENDING
Si ves
PENDING
oNOT_INSTALLED
en las filasStatus
oPolicy_Controller
, espera unos minutos y vuelve a ejecutargcloud beta container fleet config-management status
.Para garantizar la instalación correcta de Anthos Service Mesh, describe su estado:
gcloud container fleet mesh describe
El resultado es similar a este:
createTime: '2022-05-05T23:33:44.041608250Z' membershipSpecs: projects/841604900168/locations/global/memberships/asm-acm-tutorial: mesh: controlPlane: AUTOMATIC membershipStates: projects/841604900168/locations/global/memberships/asm-acm-tutorial: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE state: code: OK description: 'Revision(s) ready for use: asm-managed.' updateTime: '2022-05-05T23:45:38.800808838Z' name: projects/PROJECT_ID/locations/global/features/servicemesh resourceState: state: ACTIVE spec: {} state: state: {} updateTime: '2022-05-05T23:45:44.848011023Z'
Si ves
state.code: ERROR
en lugar destate.code: OK
, espera unos minutos y vuelve a ejecutargcloud container fleet mesh describe
. Antes de continuar con el instructivo, debes asegurarte de que el camposervicemesh.controlPlaneManagement.details[].code
tenga el valorREVISION_READY
.
Implementa una puerta de enlace de entrada y una aplicación de muestra
En esta sección, implementarás la aplicación de muestra de Online Boutique y una puerta de enlace de entrada para administrar el tráfico de entrada.
Implementa la aplicación de muestra Online Boutique y la puerta de enlace de entrada.
En el siguiente comando, se usa
sed
a fin de actualizar el manifiestoacm-config.yaml
para que el Sincronizador de configuración implemente los recursos que necesitas a fin de usar la puerta de enlace de entrada y la app de muestra.sed -i "s,root-sync/init,root-sync/deployments,g" $WORK_DIR/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${CLUSTER} \ --config $WORK_DIR/acm-config.yaml
Este paso puede tardar unos minutos en completarse.
Consulta el estado del Sincronizador de configuración de
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
El resultado es similar al siguiente:
getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/project_id/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/deployments@main", "status": "SYNCED" } ]
Si ves
status: RECONCILING
en lugar destatus: SYNCED
, espera unos minutos y vuelve a ejecutargcloud alpha anthos config sync repo describe
.Para ver también los recursos administrados, puedes agregar la marca
--managed-resources
. Para obtener más información, consulta Visualiza el estado del Sincronizador de configuración en varios clústeres.Consulta el estado del Sincronizador de configuración de
RepoSync
:gcloud alpha anthos config sync repo describe \ --sync-name repo-sync \ --sync-namespace onlineboutique
El resultado es similar al siguiente:
getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/project_id/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//online-boutique/deployments@main:HEAD", "status": "SYNCED" } ]
Si ves
status: RECONCILING
en lugar destatus: SYNCED
, espera unos minutos y vuelve a ejecutargcloud alpha anthos config sync repo describe
.Espera a que se aprovisione la dirección IP pública de la puerta de enlace de entrada:
until kubectl -n asm-ingress get svc asm-ingressgateway -o jsonpath='{.status.loadBalancer}' | grep "ingress"; do : ; done
Obtén la dirección IP pública de la puerta de enlace de entrada:
EXTERNAL_IP=$(kubectl get svc asm-ingressgateway -n asm-ingress -o jsonpath="{.status.loadBalancer.ingress[*].ip}")
Visita la dirección IP desde tu navegador para verificar que la aplicación Online Boutique se haya implementado correctamente:
echo http://${EXTERNAL_IP}
Aplica políticas para proteger tu malla
En las siguientes secciones, aprovecharás el Controlador de políticas para aplicar las políticas del paquete de políticas de Anthos Service Mesh mediante la creación de restricciones.
Aplica la inyección de proxies de sidecar
En esta sección, aplicarás políticas para garantizar que todas las cargas de trabajo de la malla tengan habilitada la inyección automática de sidecar.
Para aplicar la inserción de proxies de sidecar, aplica restricciones.
El siguiente comando usa
sed
para actualizar el archivoacm-config.yaml
a fin de que el Sincronizador de configuración implemente los recursos asociados.sed -i "s,root-sync/deployments,root-sync/enforce-sidecar-injection,g" $WORK_DIR/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${CLUSTER} \ --config $WORK_DIR/acm-config.yaml
El comando anterior aplica los siguientes recursos:
Un
Constraint
deK8sRequiredLabels
que requiere que cualquierNamespace
en la malla contenga el valor específico de la etiqueta de inyección del proxy de sidecar de Anthos Service Mesh:Una
Constraint
AsmSidecarInjection
que prohíbe que cualquier Pod de la malla omita la inserción de sidecar del proxy de Istio:
Consulta el estado del Sincronizador de configuración de
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
El resultado es similar al siguiente:
getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/project_id/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/enforce-sidecar-injection@main", "status": "SYNCED" } ]
Si ves
status: RECONCILING
en lugar destatus: SYNCED
, espera unos minutos y vuelve a ejecutargcloud alpha anthos config sync repo describe
.Verifica que se hayan creado
Constraints
:kubectl get constraints
El controlador de políticas puede tardar unos minutos en evaluar estas restricciones. Si no ves valores en la columna
TOTAL-VIOLATIONS
, espera y vuelve a ejecutarkubectl get constraints
.El resultado es similar al siguiente:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS podsidecarinjectionannotation.constraints.gatekeeper.sh/pod-sidecar-injection-annotation deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/namespace-sidecar-injection-label deny 0
Debido a que configuraste correctamente
Namespaces
yPods
, hay0
TOTAL-VIOLATIONS
para estasConstraints
.Para ver estos
Constraints
en funcionamiento, intenta crear unNamespace
en tu clúster sin unlabel
ni unannotation
:kubectl create namespace test
El resultado es similar al siguiente error:
Error from server (Forbidden): admission webhook "validation.gatekeeper.sh" denied the request: [namespace-sidecar-injection-label] you must provide labels: {"istio-injection"}
Aplica la encriptación de tráfico
En esta sección, aplicarás políticas para garantizar que todo el tráfico de la malla esté encriptado.
Para aplicar la encriptación de tráfico, aplica restricciones.
El siguiente comando usa
sed
para actualizar el archivoacm-config.yaml
a fin de que el Sincronizador de configuración implemente los recursos asociados.sed -i "s,root-sync/enforce-sidecar-injection,root-sync/enforce-strict-mtls,g" $WORK_DIR/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${CLUSTER} \ --config $WORK_DIR/acm-config.yaml
El comando anterior aplica los siguientes recursos:
Un
Constraint
AsmPeerAuthnMeshStrictMtls
que aplica elPeerAuthentication
de mTLS a nivel de malla en el espacio de nombresistio-system
:Una restricción referencial
Config
en el espacio de nombresgatekeeper-system
Esta restricción referencial permite queAsmPeerAuthnMeshStrictMtls
Constraint
haga referencia a otro objeto en su definición (por ejemplo, si buscas cualquierPeerAuthentication
enistio-system
Namespace
):Una
Constraint
DestinationRuleTLSEnabled
que prohíbe inhabilitar TLS para todos los hosts y subconjuntos de hosts enDestinationRules
de Istio:Una
Constraint
AsmPeerAuthnStrictMtls
que exige que todas lasPeerAuthentications
no puedan reemplazar la mTLSSTRICT
:
Consulta el estado del Sincronizador de configuración de
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
El resultado es similar al siguiente:
getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/project_id/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/enforce-strict-mtls@main", "status": "SYNCED" } ]
Si ves
status: RECONCILING
en lugar destatus: SYNCED
, espera unos minutos y vuelve a ejecutargcloud alpha anthos config sync repo describe
.Ejecuta el siguiente comando para obtener más información sobre el incumplimiento
PeerAuthentication
:kubectl get asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls -ojsonpath='{.status.violations}' | jq
El resultado es similar al siguiente:
[ { "enforcementAction": "deny", "kind": "AsmPeerAuthnMeshStrictMtls", "message": "Root namespace <istio-system> does not have a strict mTLS PeerAuthentication", "name": "mesh-level-strict-mtls" } ]
Para solucionar el problema, implementa un
PeerAuthentication
en elistio-system
. Para evitar que todos tus servicios de la malla acepten tráfico de texto simple, establece una políticaPeerAuthentication
en toda la malla con el modo mTLS establecido enSTRICT
. Cuando implementas la política, el plano de control aprovisiona automáticamente certificados TLS para que las cargas de trabajo se puedan autenticar entre sí.El siguiente comando usa
sed
para actualizar el archivoacm-config.yaml
a fin de que el Sincronizador de configuración implemente los recursos asociados.sed -i "s,root-sync/enforce-strict-mtls,root-sync/fix-strict-mtls,g" $WORK_DIR/acm-config.yaml gcloud beta container hub config-management apply \ --membership ${CLUSTER} \ --config $WORK_DIR/acm-config.yaml
El comando anterior aplica el siguiente
STRICT
dePeerAuthentication
de mTLS en el espacio de nombresistio-system
. Esto aplica mTLSSTRICT
a toda la malla:Consulta el estado del Sincronizador de configuración de
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
El resultado es similar al siguiente:
getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/project_id/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/fix-strict-mtls@main", "status": "SYNCED" } ]
Si ves
status: RECONCILING
en lugar destatus: SYNCED
, espera unos minutos y vuelve a ejecutargcloud alpha anthos config sync repo describe
.Verifica que se hayan creado
Constraints
:kubectl get constraints
Ten en cuenta que el controlador de políticas puede tardar unos minutos en evaluar estas
Constraints
. Espera y ejecuta de nuevo este comandokubectl get constraints
hasta que obtengas los valores en la columnaTOTAL-VIOLATIONS
para cada línea.El resultado es similar al siguiente:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/namespace-sidecar-injection-label deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS destinationruletlsenabled.constraints.gatekeeper.sh/destination-rule-tls-enabled deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/peerauthentication-strict-mtls deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmsidecarinjection.constraints.gatekeeper.sh/pod-sidecar-injection-annotation deny 0
Aplica control de acceso detallado
En esta sección, aplicarás políticas para garantizar que todas las cargas de trabajo de la malla tengan control de acceso detallado.
Para aplicar un control de acceso detallado, aplica restricciones.
El siguiente comando usa
sed
para actualizar el archivoacm-config.yaml
a fin de que el Sincronizador de configuración implemente los recursos asociados.sed -i "s,root-sync/fix-strict-mtls,root-sync/enforce-authorization-policies,g" $WORK_DIR/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${CLUSTER} \ --config $WORK_DIR/acm-config.yaml
El comando anterior aplica los siguientes recursos:
Un
Constraint
AsmAuthzPolicyDefaultDeny
que aplica elAuthorizationPolicy
predeterminado de denegación a nivel de malla en el espacio de nombresistio-system
:Una
Constraint
AsmAuthzPolicyEnforceSourcePrincipals
que exige que cualquierAuthorizationPolicies
defina principales de origen detallados (además de “*”). Solo la puerta de enlace de entrada en el espacio de nombresasm-ingress
es una excepción a esta regla para recibir el tráfico de los usuarios finales y redireccionar el tráfico a la aplicaciónfrontend
de Online Boutique.
Consulta el estado del Sincronizador de configuración de
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
El resultado es similar al siguiente:
getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/project_id/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/enforce-authorization-policies@main", "status": "SYNCED" } ]
Si ves
status: RECONCILING
en lugar destatus: SYNCED
, espera unos minutos y vuelve a ejecutargcloud alpha anthos config sync repo describe
.Ejecuta el siguiente comando para obtener más información sobre el incumplimiento asociado:
kubectl get asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/default-deny-authorization-policies -ojsonpath='{.status.violations}' | jq
El resultado es similar al siguiente:
[ { "enforcementAction": "deny", "kind": "AsmAuthzPolicyDefaultDeny", "message": "Root namespace <istio-system> does not have a default deny AuthorizationPolicy", "name": "default-deny-authorization-policies" } ]
Para solucionar el problema, implementa
AuthorizationPolicy
en el espacio de nombresistio-system
.El siguiente comando usa
sed
para actualizar el archivoacm-config.yaml
a fin de que el Sincronizador de configuración implemente los recursos asociados.sed -i "s,root-sync/enforce-authorization-policies,root-sync/fix-default-deny-authorization-policy,g" $WORK_DIR/acm-config.yaml gcloud beta container hub config-management apply \ --membership ${CLUSTER} \ --config $WORK_DIR/acm-config.yaml
Con el comando anterior, se aplica el siguiente comando
AuthorizationPolicy
de denegación completo en el espacio de nombresistio-system
:Consulta el estado del Sincronizador de configuración de
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
El resultado es similar al siguiente:
getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/project_id/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/fix-default-deny-authorization-policy@main", "status": "SYNCED" } ]
Si ves
status: RECONCILING
en lugar destatus: SYNCED
, espera unos minutos y vuelve a ejecutargcloud alpha anthos config sync repo describe
.Verifica que se hayan creado
Constraints
:kubectl get constraints
Ten en cuenta que el controlador de políticas puede tardar unos minutos en evaluar estas
Constraints
. Espera y ejecuta de nuevo este comandokubectl get constraints
hasta que obtengas los valores en la columnaTOTAL-VIOLATIONS
para cada línea.El resultado es similar al siguiente:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmsidecarinjection.constraints.gatekeeper.sh/pod-sidecar-injection-annotation deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredlabels.constraints.gatekeeper.sh/namespace-sidecar-injection-label deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/default-deny-authorization-policies deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS destinationruletlsenabled.constraints.gatekeeper.sh/destination-rule-tls-enabled deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmpeerauthnstrictmtls.constraints.gatekeeper.sh/peerauthentication-strict-mtls deny 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS asmauthzpolicyenforcesourceprincipals.constraints.gatekeeper.sh/authz-source-principals-not-all deny 0
Visita la aplicación Online Boutique desde tu navegador:
echo http://${EXTERNAL_IP}
Deberías recibir el siguiente error:
RBAC: access denied
que confirma que la denegación predeterminadaAuthorizationPolicy
se aplica a toda la malla.Para solucionar este problema, implementa
AuthorizationPolicies
más detallados en los espacios de nombresasm-ingress
yonlineboutique
.El siguiente comando usa
sed
para actualizar el archivoacm-config.yaml
a fin de que el Sincronizador de configuración implemente los recursos asociados.sed -i "s,root-sync/fix-default-deny-authorization-policy,root-sync/deploy-authorization-policies,g" $WORK_DIR/acm-config.yaml gcloud beta container hub config-management apply \ --membership ${CLUSTER} \ --config $WORK_DIR/acm-config.yaml
El comando anterior aplica los siguientes recursos:
Un
AuthorizationPolicy
en el espacio de nombresasm-ingress
:Un
AuthorizationPolicy
por aplicación en el espacio de nombresonlineboutique
. Este es el ejemplo de la app decartservice
:Un
ServiceAccount
por app en los espacios de nombresasm-ingress
yonlineboutique
para tener una identidad única por app evaluada comoprincipal
enAuthorizationPolicies
. Este es el ejemplo de la app decartservice
:
Consulta el estado del Sincronizador de configuración de
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
El resultado es similar al siguiente:
getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/project_id/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/fix-default-deny-authorization-policy@main", "status": "SYNCED" } ]
Si ves
status: RECONCILING
en lugar destatus: SYNCED
, espera unos minutos y vuelve a ejecutargcloud alpha anthos config sync repo describe
.Consulta el estado del Sincronizador de configuración de
RepoSync
:gcloud alpha anthos config sync repo describe \ --sync-name repo-sync \ --sync-namespace onlineboutique
El resultado es similar al siguiente:
getting 1 RepoSync and RootSync from projects/project_id/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/project_id/locations/global/memberships/asm-acm-tutorial" ], "commit": "7d15d49af13c44aa531a4565b2277ddcf8b81884", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/online-boutique/authorization-policies@main", "status": "SYNCED" } ]
Si ves
status: RECONCILING
en lugar destatus: SYNCED
, espera unos minutos y vuelve a ejecutargcloud alpha anthos config sync repo describe
.Visita la aplicación Online Boutique de nuevo desde tu navegador:
echo http://${EXTERNAL_IP}
Si espera unos minutos, deberías ver que el sitio web funciona correctamente nuevamente.
Consulta el estado de las funciones de seguridad de Anthos
Puedes ver el estado de las funciones de seguridad de Anthos, incluidas las políticas de autenticación y autorización, en la consola de Google Cloud.
En la consola de Google Cloud, ve a la página Seguridad de Anthos.
En Resumen de la política, se muestra el estado de la seguridad de la aplicación, incluido el control de acceso de servicio (
AuthorizationPolicies
) y la mTLS.Haz clic en Auditoría de la política para ver los estados de las políticas de cargas de trabajo del clúster y de ambos espacios de nombres (
asm-ingress
yonlineboutique
).Las tarjetas de Control de acceso de servicio y Estado de mTLS proporcionan una descripción general de alto nivel.
En la lista Cargas de trabajo, se muestra el control de acceso del servicio y el estado de mTLS de cada carga de trabajo.
Ya protegiste tu clúster y tu malla con el controlador de políticas y el Sincronizador de configuración.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
Borra el proyecto
- En la consola de Google Cloud, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.
Borra los recursos individuales
Para borrar los recursos individuales, haz lo siguiente:
Cancela el registro de tu clúster de la flota:
gcloud container fleet memberships unregister ${CLUSTER} \ --project=${PROJECT_ID} \ --gke-cluster=${CLUSTER_ZONE}/${CLUSTER}
El resultado es similar a este:
kubeconfig entry generated for asm-acm-tutorial. Waiting for membership to be deleted...done. Deleting membership CR in the cluster...done. Deleting namespace [gke-connect] in the cluster...done.
Borra el clúster
gcloud container clusters delete ${CLUSTER} \ --zone ${CLUSTER_ZONE}
Presiona
y
cuando se te solicite. Este comando puede demorar más de cinco minutos en completarse.El resultado es similar a este:
Deleting cluster asm-acm-tutorial...done. Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-east4-a/clusters/asm-acm-tutorial].
Borra los archivos que creaste:
rm -r $WORK_DIR
¿Qué sigue?
- Descubre las Prácticas recomendadas de seguridad de Anthos Service Mesh.
- Obtén más información sobre el paquete de políticas de Anthos Service Mesh.
- Explora la biblioteca de plantillas de restricciones del controlador de políticas.
- Explora arquitecturas de referencia, diagramas, instructivos y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.