Neste tutorial, mostramos como melhorar a postura de segurança do cluster e do app. Imagine que você é o administrador de uma plataforma onde uma organização gerencia os apps da loja on-line com o Cloud Service Mesh, um pacote de ferramentas que ajuda a monitorar e gerenciar uma malha de serviço confiável. Você é responsável por garantir a segurança da malha e dos apps.
É possível evitar configurações incorretas e validar automaticamente as políticas do Cloud Service Mesh usando o Policy Controller e o Config Sync. O Policy Controller permite a aplicação de políticas totalmente programáveis nos clusters. O Policy Controller também tem uma biblioteca padrão de modelos de restrição que pode ser usada com o pacote de segurança do Cloud Service Mesh para auditar a compliance das vulnerabilidades de segurança da malha e práticas recomendadas. O Config Sync reconcilia continuamente o estado dos clusters com um conjunto central de arquivos de configuração declarativos do Kubernetes. Usar o Policy Controller e o Config Sync juntos permite que você aplique restrições continuamente nas configurações de políticas do Cloud Service Mesh.
No diagrama a seguir, oferecemos uma visão geral de como o Cloud Service Mesh, o Policy Controller e o Config Sync funcionam juntos para gerenciar e proteger um gateway de entrada e os apps de exemplo da Online Boutique utilizados neste tutorial:
Preparar o ambiente
Nesta seção, você vai preparar o ambiente para instalar o Cloud Service Mesh, o Policy Controller e o Config Sync:
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Faça upgrade para a versão mais recente do Google Cloud CLI:
gcloud components updatePara armazenar os arquivos criados neste tutorial, crie um diretório:
mkdir ~/asm-acm-tutorial-dirPara simplificar o restante do tutorial, crie as seguintes variáveis de ambiente:
PROJECT_ID=PROJECT_ID gcloud config set project $PROJECT_ID CLUSTER=asm-acm-tutorial CLUSTER_ZONE=us-east4-a MEMBERSHIP=asm-acm-tutorial PROJECT_NUMBER=$(gcloud projects describe ${PROJECT_ID} --format='get(projectNumber)')Substitua
PROJECT_IDpelo ID do projeto que quer usar neste tutorial.Se for solicitado que você autorize o Cloud Shell, clique em Autorizar para concluir a operação.
Ative as APIs necessárias para este tutorial:
gcloud
gcloud services enable \ mesh.googleapis.com \ anthos.googleapis.comConfig Connector
Este tutorial inclui recursos do Config Connector. É possível usar esses recursos para realizar as mesmas tarefas que você concluiu na guia
gcloud. Para utilizar esses recursos, instale o Config Connector e aplique os recursos da maneira que funcionar melhor para seu ambiente.Use o manifesto
Servicesa seguir:apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: annotations: cnrm.cloud.google.com/deletion-policy: "abandon" cnrm.cloud.google.com/disable-dependent-services: "false" name: mesh.googleapis.com spec: resourceID: mesh.googleapis.com projectRef: external: PROJECT_ID --- apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: annotations: cnrm.cloud.google.com/deletion-policy: "abandon" cnrm.cloud.google.com/disable-dependent-services: "false" name: anthos.googleapis.com spec: resourceID: anthos.googleapis.com projectRef: external: PROJECT_IDA conclusão dessa operação pode levar mais de um minuto.
Crie um cluster do GKE:
gcloud
gcloud container clusters create ${CLUSTER} \ --zone ${CLUSTER_ZONE} \ --machine-type=e2-standard-4 \ --num-nodes 4 \ --workload-pool ${PROJECT_ID}. \ --labels mesh_id=proj-${PROJECT_NUMBER}Config Connector
Use os manifestos
ContainerClustereContainerNodePoolabaixo:apiVersion: container.cnrm.cloud.google.com/v1beta1 kind: ContainerNodePool metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID name: asm-acm-tutorial spec: clusterRef: name: asm-acm-tutorial location: us-east4-a nodeConfig: machineType: e2-standard-4 nodeCount: 4 --- apiVersion: container.cnrm.cloud.google.com/v1beta1 kind: ContainerCluster metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID cnrm.cloud.google.com/remove-default-node-pool: "true" labels: mesh_id: proj-PROJECT_NUMBER name: asm-acm-tutorial spec: location: us-east4-a initialNodeCount: 1 workloadIdentityConfig: workloadPool: PROJECT_ID.Substitua
PROJECT_NUMBERpelo valor da variável de ambientePROJECT_NUMBERrecuperada anteriormente.A conclusão dessa operação pode levar mais de cinco minutos.
Para garantir a criação do cluster do GKE, descreva o status dele:
gcloud container clusters list \ --zone ${CLUSTER_ZONE} \ --project ${PROJECT_ID}O resultado será assim:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS asm-acm-tutorial us-east4-a 1.23.12-gke.100 35.186.179.30 e2-standard-4 1.23.12-gke.100 3 RUNNINGConecte-se ao cluster do GKE:
gcloud container clusters get-credentials ${CLUSTER} \ --zone ${CLUSTER_ZONE} \ --project ${PROJECT_ID}Registre o cluster em uma frota.
gcloud
gcloud container fleet memberships register ${MEMBERSHIP} \ --project ${PROJECT_ID} \ --gke-cluster ${CLUSTER_ZONE}/${CLUSTER} \ --enable-workload-identityO resultado será assim:
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.Config Connector
Use o manifesto
GKEHubMembershipa seguir:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubMembership metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID name: asm-acm-tutorial spec: location: global authority: issuer: https://container.googleapis.com/v1/projects/PROJECT_ID/locations/us-east4-a/clusters/asm-acm-tutorial endpoint: gkeCluster: resourceRef: name: asm-acm-tutorialPara garantir o registro bem-sucedido do cluster do GKE, descreva seu status:
gcloud container fleet memberships listO resultado será assim:
NAME EXTERNAL_ID LOCATION asm-acm-tutorial 0e12258c-8831-4d81-b5c0-5e7099a468cc globalroot-sync, como um repositórioRootSync, contém todas as configurações no cluster, inclusiveRepoSyncs,Constraints,ClusterRole,RoleBindingse recursos incluídos em alguns namespaces do sistema, comoistio-system.ingress-gateway, como o primeiroRepoSync, contém todos os recursos necessários para implantar um gateway de entrada e protegê-lo progressivamente ao longo deste tutorial.online-boutique, como um segundoRepoSync, contém todos os recursos necessários para implantar os apps da Online Boutique e protegê-los progressivamente ao longo deste tutorial.Ative o operador
ConfigManagement, que gerencia o Config Sync e o Policy Controller:gcloud
gcloud beta container fleet config-management enableConfig Connector
Use o manifesto
GKEHubFeaturea seguir:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: configmanagement spec: projectRef: external: PROJECT_ID location: global resourceID: configmanagementAtive o Cloud Service Mesh na frota.
gcloud
gcloud container fleet mesh enableConfig Connector
Use o manifesto
GKEHubFeaturea seguir:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: servicemesh spec: projectRef: external: PROJECT_ID location: global resourceID: servicemeshAtive o gerenciamento automático do Cloud Service Mesh para permitir que o Google aplique a configuração recomendada do Cloud Service Mesh gerenciado:
gcloud
gcloud container fleet mesh update \ --management automatic \ --memberships ${MEMBERSHIP}Config Connector
Use o manifesto
GKEHubFeatureMembershipa seguir:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeatureMembership metadata: name: servicemesh-membership spec: projectRef: external: PROJECT_ID location: global membershipRef: name: asm-acm-tutorial featureRef: name: servicemesh mesh: management: MANAGEMENT_AUTOMATICAtive o Config Sync e o Policy Controller:
gcloud
Salve o manifesto a seguir como
acm-config.yamlno diretório~/asm-acm-tutorial-dir:applySpecVersion: 1 spec: configSync: enabled: true policyDir: asm-acm-tutorial/root-sync/init secretType: none sourceFormat: unstructured syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples syncBranch: main policyController: enabled: true referentialRulesEnabled: true templateLibraryInstalled: truePara saber mais sobre os campos de configuração da Google Cloud CLI, consulte gcloud apply spec fields.
Aplique o arquivo:
gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlConfig Connector
Use o manifesto
GKEHubFeatureMembershipa seguir:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeatureMembership metadata: name: configmanagement-membership spec: projectRef: external: PROJECT_ID location: global membershipRef: name: asm-acm-tutorial featureRef: name: configmanagement configmanagement: configSync: sourceFormat: unstructured git: policyDir: asm-acm-tutorial/root-sync/init secretType: none syncBranch: main syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples policyController: enabled: true referentialRulesEnabled: true templateLibraryInstalled: trueO Policy Controller e o Config Sync estão instalados no cluster. Em seguida, o Config Sync começa a sincronizar todas as configurações do
RootSyncpadrão com o cluster. Essas configurações instalam e configuram os seguintes componentes-chave:Os objetos
RepoSyncque configuram os apps da Online Boutique e o gateway de entrada são sincronizados:Como os reconciliadores
RepoSyncprecisam de permissões adicionais para criar recursos do Istio, um objetoClusterRolee dois objetosRoleBindingpara conceder essas permissões também são aplicados ao seu cluster:
Para garantir a instalação bem-sucedida do Policy Controller e do Config Sync, verifique o status:
gcloud beta container fleet config-management statusO resultado será assim:
Name: asm-acm-tutorial Status: SYNCED Last_Synced_Token: 4b3384d Sync_Branch: main Last_Synced_Time: 2022-05-04T21:32:58Z Policy_Controller: INSTALLEDSe você vir
PENDINGouNOT_INSTALLEDnas linhasStatusouPolicy_Controller, aguarde alguns minutos e executegcloud beta container fleet config-management statusnovamente.Para garantir a instalação do Cloud Service Mesh, descreva o status dele:
gcloud container fleet mesh describeO resultado será assim:
createTime: '2022-09-13T23:12:56.477042921Z' membershipSpecs: projects/PROJECT_NUMBER/locations/global/memberships/asm-acm-tutorial: mesh: management: MANAGEMENT_AUTOMATIC membershipStates: projects/PROJECT_NUMBER/locations/global/memberships/asm-acm-tutorial: servicemesh: controlPlaneManagement: details: - code: REVISION_READY details: 'Ready: asm-managed' state: ACTIVE dataPlaneManagement: details: - code: OK details: Service is running. state: ACTIVE state: code: OK description: |- Revision(s) ready for use: asm-managed. All Canonical Services have been reconciled successfully. updateTime: '2022-09-14T00:19:10.571552206Z' name: projects/PROJECT_ID/locations/global/features/servicemesh resourceState: state: ACTIVE spec: {} state: state: {} updateTime: '2022-09-14T00:19:14.135113118Z'Se você vir
state.code: ERRORem vez destate.code: OK, aguarde alguns minutos e executegcloud container fleet mesh describenovamente. Antes de prosseguir com o tutorial, verifique se o camposervicemesh.controlPlaneManagement.details.codetem o valorREVISION_READY.Implante o aplicativo de amostra Online Boutique e o gateway de entrada.
O comando a seguir usa
sedpara atualizar o manifestoacm-config.yamlpara que o Config Sync implante os recursos necessários para implantar o gateway de entrada e o app de amostra.sed -i "s,root-sync/init,root-sync/deployments,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlEssa etapa pode levar alguns minutos para ser concluída.
Veja o status do Config Sync de
RootSynce dos doisRepoSyncs:gcloud alpha anthos config sync repo describeA resposta é semelhante a:
getting 3 RepoSync and RootSync from projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial [ { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "95a30c052566357afb9db3d7f6153d9c0f219c03", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/root-sync/deployments@main", "status": "SYNCED" }, { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "95a30c052566357afb9db3d7f6153d9c0f219c03", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/ingress-gateway/deployments@main", "status": "SYNCED" }, { "clusters": [ "projects/PROJECT_ID/locations/global/memberships/asm-acm-tutorial" ], "commit": "95a30c052566357afb9db3d7f6153d9c0f219c03", "errors": [], "source": "https://github.com/GoogleCloudPlatform/anthos-config-management-samples//asm-acm-tutorial/online-boutique/deployments@main", "status": "SYNCED" } ]Se você vir
status: RECONCILINGem vez destatus: SYNCED, aguarde alguns minutos e executegcloud alpha anthos config sync repo describenovamente.Para ver apenas as informações de um repositório, use as sinalizações
--sync-namee--sync-namespace. Para ver os recursos gerenciados em detalhes, adicione a flag--managed-resources. Para mais informações, consulte Ver o status do Config Sync em vários clusters.Aguarde o provisionamento do endereço IP público do gateway de entrada:
until kubectl -n asm-ingress get svc asm-ingressgateway -o jsonpath='{.status.loadBalancer}' | grep "ingress"; do : ; doneAnote o endereço IP público do gateway de entrada:
EXTERNAL_IP=$(kubectl get svc asm-ingressgateway -n asm-ingress -o jsonpath="{.status.loadBalancer.ingress[*].ip}")Acesse o endereço IP do seu navegador para verificar se o app Online Boutique foi implantado:
echo http://${EXTERNAL_IP}Para aplicar a injeção de proxies sidecar, aplique restrições.
O comando a seguir usa
sedpara atualizar o manifestoacm-config.yamle fazer com que o Config Sync implante os recursos associados.sed -i "s,root-sync/deployments,root-sync/enforce-sidecar-injection,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlO comando anterior implanta os seguintes recursos:
Um
K8sRequiredLabelsConstraintque exige que qualquerNamespacena malha contenha o rótulo de injeção de proxy sidecar do Cloud Service Mesh:Um
AsmSidecarInjectionConstraintque proíbe qualquerPodna malha de ignorar a injeção do sidecar do proxy do Istio:
Veja o status do Config Sync para o
RootSync:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemA saída é semelhante a:
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" } ]Se você vir
status: RECONCILINGem vez destatus: SYNCED, aguarde alguns minutos e executegcloud alpha anthos config sync repo describenovamente.Verifique se as
Constraintsforam criadas:kubectl get constraintsPode levar alguns minutos para o Policy Controller avaliar essas restrições. Se os valores não aparecerem na coluna
TOTAL-VIOLATIONS, aguarde e executekubectl get constraintsnovamente.A saída é semelhante a:
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 0Como configuramos corretamente nossos
NamespacesePods, há0TOTAL-VIOLATIONSpara essesConstraints.Para ver essas
Constraintsem funcionamento, tente criar umNamespaceno cluster sem umlabelnem umannotation:kubectl create namespace testA resposta será semelhante a esta:
Error from server (Forbidden): admission webhook "validation.gatekeeper.sh" denied the request: [namespace-sidecar-injection-label] you must provide labels: {"istio-injection"}Para aplicar a criptografia do tráfego, aplique restrições.
O comando a seguir usa
sedpara atualizar o manifestoacm-config.yamle fazer com que o Config Sync implante os recursos associados.sed -i "s,root-sync/enforce-sidecar-injection,root-sync/enforce-strict-mtls,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlO comando anterior implanta os seguintes recursos:
Um
AsmPeerAuthnMeshStrictMtlsConstraintque aplica o mTLSPeerAuthenticationno nível da malha no namespaceistio-system:Uma restrição referencial
Configno namespacegatekeeper-system. Essa restrição referencial permite que oAsmPeerAuthnMeshStrictMtlsConstraintfaça referência a outro objeto na definição (por exemplo, pesquisar qualquerPeerAuthenticationnoistio-systemNamespace):Um
ConstraintDestinationRuleTLSEnabledque proíbe a desativação do TLS para todos os hosts e subconjuntos de hosts noDestinationRulesdo Istio:Um
ConstraintAsmPeerAuthnStrictMtlsque exige que todos osPeerAuthenticationsnão substituam mTLSSTRICT:
Veja o status do Config Sync para o
RootSync:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemA saída é semelhante a:
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" } ]Se você vir
status: RECONCILINGem vez destatus: SYNCED, aguarde alguns minutos e executegcloud alpha anthos config sync repo describenovamente.Execute o seguinte comando para ver mais informações sobre a violação
PeerAuthentication:kubectl get asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls -ojsonpath='{.status.violations}' | jqA saída é semelhante a:
[ { "enforcementAction": "deny", "group": "constraints.gatekeeper.sh", "kind": "AsmPeerAuthnMeshStrictMtls", "message": "Root namespace <istio-system> does not have a strict mTLS PeerAuthentication", "name": "mesh-level-strict-mtls", "version": "v1beta1" } ]Corrija o problema implantando um
PeerAuthenticationnoistio-system. Para impedir que todos os serviços na malha aceitem tráfego de texto simples, defina uma políticaPeerAuthenticationpara toda a malha, com o modo mTLS definido comoSTRICT. Quando você implanta a política, o plano de controle provisiona certificados TLS automaticamente, para que as cargas de trabalho possam ser autenticadas entre si.O comando a seguir usa
sedpara atualizar o manifestoacm-config.yamle fazer com que o Config Sync implante os recursos associados.sed -i "s,root-sync/enforce-strict-mtls,root-sync/fix-strict-mtls,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlO comando anterior implanta o seguinte
PeerAuthenticationmTLSSTRICTno namespaceistio-system. Isso aplica mTLSSTRICTa toda a malha:Veja o status do Config Sync para o
RootSync:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemA saída é semelhante a:
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" } ]Se você vir
status: RECONCILINGem vez destatus: SYNCED, aguarde alguns minutos e executegcloud alpha anthos config sync repo describenovamente.Verifique se as
Constraintsforam criadas:kubectl get constraintsPode levar alguns minutos para o Policy Controller avaliar esses
Constraints. Aguarde e execute novamente o comandokubectl get constraintsaté receber valores na colunaTOTAL-VIOLATIONSde cada linha.A saída é semelhante a:
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 0Para aplicar o controle de acesso granular, aplique restrições.
O comando a seguir usa
sedpara atualizar o manifestoacm-config.yamle fazer com que o Config Sync implante os recursos associados.sed -i "s,root-sync/fix-strict-mtls,root-sync/enforce-authorization-policies,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlO comando anterior implanta os seguintes recursos:
Uma
AsmAuthzPolicyDefaultDenyConstraintque aplica a negação padrão da malhaAuthorizationPolicyna páginaistio-systemnamespace:Um
AsmAuthzPolicyEnforceSourcePrincipalsConstraint, que determina que qualquerAuthorizationPoliciesesteja definindo principais de origem granulares (que não sejam "*"). Somente o gateway de entrada no namespaceasm-ingressé uma exceção a essa regra para receber o tráfego dos usuários finais e redirecionar o tráfego para o appfrontendda Online Boutique.
Veja o status do Config Sync para o
RootSync:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemA saída é semelhante a:
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" } ]Se você vir
status: RECONCILINGem vez destatus: SYNCED, aguarde alguns minutos e executegcloud alpha anthos config sync repo describenovamente.Execute o seguinte comando para ver mais informações sobre a violação associada:
kubectl get asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/default-deny-authorization-policies -ojsonpath='{.status.violations}' | jqA saída é semelhante a:
[ { "enforcementAction": "deny", "group": "constraints.gatekeeper.sh", "kind": "AsmAuthzPolicyDefaultDeny", "message": "Root namespace <istio-system> does not have a default deny AuthorizationPolicy", "name": "default-deny-authorization-policies", "version": "v1beta1" } ]Corrija o problema implantando o
AuthorizationPolicyno namespaceistio-system.O comando a seguir usa
sedpara atualizar o manifestoacm-config.yamle fazer com que o Config Sync implante os recursos associados.sed -i "s,root-sync/enforce-authorization-policies,root-sync/fix-default-deny-authorization-policy,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlO comando anterior implanta o seguinte
AuthorizationPolicyde negação de todos no namespaceistio-system:Veja o status do Config Sync para o
RootSync:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-systemA saída é semelhante a:
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" } ]Se você vir
status: RECONCILINGem vez destatus: SYNCED, aguarde alguns minutos e executegcloud alpha anthos config sync repo describenovamente.Verifique se as
Constraintsforam criadas:kubectl get constraintsPode levar alguns minutos para o Policy Controller avaliar esses
Constraints. Aguarde e execute novamente o comandokubectl get constraintsaté receber valores na colunaTOTAL-VIOLATIONSde cada linha.A saída é semelhante a:
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 0Acesse o app "Online Boutique" no seu navegador:
echo http://${EXTERNAL_IP}Você receberá o erro:
RBAC: access denied, que confirma que a negação padrãoAuthorizationPolicyé aplicada a toda a malha.Para corrigir esse problema, implante uma
AuthorizationPoliciesmais granular nos namespacesasm-ingresseonlineboutique.O comando a seguir usa
sedpara atualizar o manifestoacm-config.yamle fazer com que o Config Sync implante os recursos associados.sed -i "s,root-sync/fix-default-deny-authorization-policy,root-sync/deploy-authorization-policies,g" ~/asm-acm-tutorial-dir/acm-config.yaml gcloud beta container fleet config-management apply \ --membership ${MEMBERSHIP} \ --config ~/asm-acm-tutorial-dir/acm-config.yamlO comando anterior implanta os seguintes recursos:
Um
AuthorizationPolicyno namespaceasm-ingress:Um
AuthorizationPolicypor app no namespaceonlineboutique. Veja o exemplo do appcartservice:Uma
ServiceAccountpor app nos namespacesasm-ingresseonlineboutiquepara que uma identidade exclusiva por app seja avaliada comoprincipalemAuthorizationPolicies. Veja o exemplo do appcartservice:
Veja o status do Config Sync de
RootSynce dos doisRepoSyncs:gcloud alpha anthos config sync repo describeA resposta é semelhante a:
getting 3 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/deploy-authorization-policies@main", "status": "SYNCED" }, { "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/ingress-gateway/authorization-policies@main", "status": "SYNCED" }, { "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" } ]Se você vir
status: RECONCILINGem vez destatus: SYNCED, aguarde alguns minutos e executegcloud alpha anthos config sync repo describenovamente.Para ver apenas as informações de um repositório, use as sinalizações
--sync-namee--sync-namespace. Para ver em detalhes os recursos gerenciados, adicione a flag--managed-resources. Para mais informações, consulte Ver o status do Config Sync em vários clusters.Acesse o app Online Boutique novamente no seu navegador:
echo http://${EXTERNAL_IP}Depois de alguns minutos, o site voltará a funcionar.
No console do Google Cloud , acesse a página Segurança do GKE Enterprise.
Acessar a segurança do GKE Enterprise
O Resumo da política exibe o status da segurança do aplicativo, incluindo o controle de acesso ao serviço (
AuthorizationPolicies) e a mTLS.Clique em Auditoria de políticas para ver os status da política da carga de trabalho para o cluster e os dois namespaces (
asm-ingresseonlineboutique).Os cards Controle de acesso ao serviço e Status mTLS oferecem uma visão geral de alto nível.

A lista Cargas de trabalho mostra o controle de acesso ao serviço e o status mTLS de cada carga de trabalho.

Configurar um cluster do GKE
Nesta seção, você criará um cluster do GKE e o registrará em uma frota. As frotas são um conceito doGoogle Cloud para organizar logicamente clusters e outros recursos. Elas permitem que você use e gerencie recursos de vários clusters e aplique políticas consistentes nos seus sistemas.
O cluster criado nesta seção é o que recebe a instalação do Cloud Service Mesh, Policy Controller e Config Sync. É também o cluster em que você implanta os apps de exemplo da Online Boutique.
Para configurar o cluster, siga estas etapas:
Analisar os repositórios
Na seção de instalação a seguir, você vai aplicar um
arquivo de manifesto acm-config.yaml. Esse manifesto configura
seu cluster para sincronizar com a
pasta asm-acm-tutorial
do repositório de exemplo. Essa pasta contém todos
os arquivos de configuração necessários para concluir o restante do tutorial.
Para simplificar este tutorial, use os comandos sed para atualizar
acm-config.yaml. Com o arquivo acm-config.yaml,
o Config Sync implanta os manifestos necessários para cada etapa deste tutorial.
Atualizar um único arquivo ajuda você a se concentrar nos conceitos e no fluxo
da proteção dos clusters, da malha e dos aplicativos sem manipular
os arquivos e executar comandos git repetidamente.
Para usar a capacidade do Config Sync de sincronizar vários repositórios, use os seguintes recursos:
Instalar o Policy Controller, o Config Sync e o Cloud Service Mesh gerenciado
Agora que você criou e registrou seu cluster, é possível instalar
o Config Sync, o Policy Controller e o Cloud Service Mesh no cluster e
configurá-lo para sincronização usando as configurações do RootSync padrão:
Implantar um gateway de entrada e um app de exemplo
Nesta seção, você vai implantar o aplicativo de amostra Online Boutique e um gateway de entrada para gerenciar o tráfego de entrada.
Aplicar políticas para proteger a malha
Nas seções a seguir, você aproveita o controlador de políticas para aplicar políticas do pacote de políticas do Cloud Service Mesh criando restrições.
Aplicar injeção de proxies sidecar
Nesta seção, você aplicará políticas para garantir que todas as cargas de trabalho na malha tenham a injeção automática de arquivo secundário ativada.
Aplicar criptografia de tráfego
Nesta seção, você aplicará políticas para garantir que todo o tráfego na malha seja criptografado.
Aplicar controle de acesso granular
Nesta seção, você aplicará políticas para garantir que todas as cargas de trabalho na malha tenham controle de acesso granular.
Confira o status dos recursos de segurança do GKE Enterprise
É possível ver o status dos recursos de segurança do GKE Enterprise, incluindo políticas de autenticação e autorização, no console Google Cloud .
Você protegeu o cluster e a malha com o Policy Controller e o Config Sync.