Este tutorial mostra como melhorar a postura de segurança do seu cluster e dos seus aplicativos. Imagine que você é um administrador de plataforma cuja organização gerencia os aplicativos da sua loja virtual com o Cloud Service Mesh , um conjunto de ferramentas que ajuda a monitorar e gerenciar um service mesh confiável. Você é responsável por garantir que seu mesh e seus aplicativos estejam seguros.
Você pode evitar configurações incorretas e validar automaticamente suas 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 para seus clusters. O Policy Controller também inclui uma biblioteca padrão de modelos de restrição que você pode usar com o pacote de segurança do Cloud Service Mesh para auditar a conformidade das vulnerabilidades de segurança e das práticas recomendadas do seu mesh. O Config Sync reconcilia continuamente o estado dos clusters com um conjunto central de arquivos de configuração declarativos do Kubernetes. O uso conjunto do Policy Controller e do Config Sync permite que você aplique restrições continuamente às suas configurações de política do Cloud Service Mesh.
O diagrama a seguir mostra uma visão geral de como o Cloud Service Mesh, o Policy Controller e o Config Sync funcionam juntos neste tutorial para gerenciar e proteger um gateway de entrada e os aplicativos de exemplo do Online Boutique que você usa neste tutorial:
Objetivos
- Crie um cluster do Google Kubernetes Engine (GKE) e registre o cluster em uma frota .
- Instale o Policy Controller, o Config Sync e o Cloud Service Mesh em um cluster.
- Configurar o Config Sync para sincronizar vários repositórios
- Aplique as melhores práticas para implantar configurações, aplicativos e recursos do Istio com o Config Sync.
- Implante configurações de cluster, os aplicativos de exemplo do Online Boutique e um gateway de entrada com o Config Sync.
- Aproveite o pacote de políticas do Cloud Service Mesh do Policy Controller para aplicar as seguintes práticas recomendadas de segurança:
- Garanta que todas as cargas de trabalho na malha tenham injeção automática de sidecar.
- Criptografe todo o tráfego na malha.
- Garanta que todas as cargas de trabalho na malha tenham controle de acesso granular.
Custos
Neste documento, usa os seguintes componentes faturáveis do Google Cloud:
- GKE.
- GKE Enterprise. The billing for GKE Enterprise includes billing for the Cloud Service Mesh, Config Sync, and Policy Controller.
Para gerar uma estimativa de custos com base na sua utilização projetada,
use a calculadora de preços.
Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.
Antes de começar
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Make sure that billing is enabled for your Google Cloud project.
Prepare seu ambiente
Nesta seção, você prepara seu ambiente para poder instalar o Cloud Service Mesh, o Policy Controller e o Config Sync:
-
In the Google Cloud console, activate Cloud Shell.
Atualize para a versão mais recente do Google Cloud CLI:
gcloud components update
Para armazenar os arquivos que você criar neste tutorial, crie um diretório:
mkdir ~/asm-acm-tutorial-dir
Para 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_ID
pelo ID do projeto que você deseja usar para este tutorial.Se você for solicitado a autorizar o Cloud Shell, clique em Autorizar para concluir a operação.
Habilite as APIs necessárias para este tutorial:
gcloud
gcloud services enable \ mesh.googleapis.com \ anthos.googleapis.com
Conector de configuração
Este tutorial inclui recursos do Config Connector . Você pode usá-los para concluir as mesmas tarefas que realiza na aba
gcloud
. Para utilizar esses recursos, instale o Config Connector e aplique-os da maneira que melhor se adequar ao seu ambiente.Use o seguinte manifesto
Services
: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_ID
Esta operação pode levar mais de um minuto para ser concluída.
Configurar um cluster do GKE
Nesta seção, você cria um cluster do GKE e o registra em uma frota . As frotas são umGoogle Cloud conceito para organizar logicamente clusters e outros recursos, permitindo que você use e gerencie recursos de vários clusters e aplique políticas consistentes em todos os seus sistemas.
O cluster criado nesta seção é o cluster no qual você instala o Cloud Service Mesh, o Policy Controller e o Config Sync. É também o cluster onde você implanta os aplicativos de exemplo do Online Boutique.
Para configurar seu cluster, conclua as seguintes etapas:
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}.svc.id.goog \ --labels mesh_id=proj-${PROJECT_NUMBER}
Conector de configuração
Use os seguintes manifestos
ContainerCluster
eContainerNodePool
: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.svc.id.goog
Substitua
PROJECT_NUMBER
pelo valor da variável de ambientePROJECT_NUMBER
recuperada anteriormente.Esta operação pode levar mais de cinco minutos para ser concluída.
Para garantir a criação bem-sucedida do cluster do GKE, descreva seu status:
gcloud container clusters list \ --zone ${CLUSTER_ZONE} \ --project ${PROJECT_ID}
A saída é semelhante à seguinte:
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 RUNNING
Conecte-se ao cluster do GKE:
gcloud container clusters get-credentials ${CLUSTER} \ --zone ${CLUSTER_ZONE} \ --project ${PROJECT_ID}
Registre seu cluster em uma frota:
gcloud
gcloud container fleet memberships register ${MEMBERSHIP} \ --project ${PROJECT_ID} \ --gke-cluster ${CLUSTER_ZONE}/${CLUSTER} \ --enable-workload-identity
A saída é semelhante à seguinte:
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.
Conector de configuração
Use o seguinte manifesto
GKEHubMembership
: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-tutorial
Para garantir o registro bem-sucedido do cluster do GKE, descreva seu status:
gcloud container fleet memberships list
A saída é semelhante à seguinte:
NAME EXTERNAL_ID LOCATION asm-acm-tutorial 0e12258c-8831-4d81-b5c0-5e7099a468cc global
Explorar os repositórios
Na seção de instalação a seguir, você aplicará um arquivo manifesto acm-config.yaml
. Este manifesto configura seu cluster para sincronizar a partir da pasta asm-acm-tutorial
do repositório de exemplo. Esta 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 o 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 de proteção de seus clusters, malhas e aplicações sem precisar manipular os arquivos e executar comandos git
repetidamente.
Para utilizar a capacidade do Config Sync de sincronizar vários repositórios , use os seguintes recursos:
-
root-sync
, como um repositórioRootSync
, contém todas as configurações do seu cluster, incluindoRepoSyncs
,Constraints
,ClusterRole
,RoleBindings
e recursos incluídos em alguns namespaces do sistema, comoistio-system
. -
ingress-gateway
, como um 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 aplicativos da Online Boutique e protegê-los progressivamente ao longo deste tutorial.
Instalar o Policy Controller, o Config Sync e o Cloud Service Mesh gerenciado
Agora que você criou e registrou seu cluster, você pode instalar o Config Sync, o Policy Controller e o Cloud Service Mesh em seu cluster e configurá-lo para sincronizar a partir das configurações do RootSync
padrão:
Habilite o operador
ConfigManagement
, que gerencia o Config Sync e o Policy Controller:gcloud
gcloud beta container fleet config-management enable
Conector de configuração
Use o seguinte manifesto
GKEHubFeature
:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: configmanagement spec: projectRef: external: PROJECT_ID location: global resourceID: configmanagement
Habilite o Cloud Service Mesh na sua frota.
gcloud
gcloud container fleet mesh enable
Conector de configuração
Use o seguinte manifesto
GKEHubFeature
:apiVersion: gkehub.cnrm.cloud.google.com/v1beta1 kind: GKEHubFeature metadata: name: servicemesh spec: projectRef: external: PROJECT_ID location: global resourceID: servicemesh
Habilite 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}
Conector de configuração
Use o seguinte manifesto
GKEHubFeatureMembership
: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_AUTOMATIC
Habilitar sincronização de configuração e controlador de política:
gcloud
Salve o seguinte manifesto como
acm-config.yaml
no 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: true
Para saber mais sobre os campos de configuração do 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.yaml
Conector de configuração
Use o seguinte manifesto
GKEHubFeatureMembership
: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: true
O Policy Controller e o Config Sync são instalados no seu cluster. Em seguida, o Config Sync começa a sincronizar todas as configurações do
RootSync
padrão com o seu cluster. Essas configurações instalam e configuram os seguintes componentes principais:Os objetos
RepoSync
que configuram os aplicativos do Online Boutique e o gateway de entrada são sincronizados:Como os reconciliadores
RepoSync
precisam de permissões adicionais para criar recursos do Istio, umClusterRole
e dois objetosRoleBinding
para 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 status
A saída é semelhante à seguinte:
Name: asm-acm-tutorial Status: SYNCED Last_Synced_Token: 4b3384d Sync_Branch: main Last_Synced_Time: 2022-05-04T21:32:58Z Policy_Controller: INSTALLED
Se você vir
PENDING
ouNOT_INSTALLED
nas linhasStatus
ouPolicy_Controller
, aguarde alguns minutos e executegcloud beta container fleet config-management status
novamente.Para garantir a instalação bem-sucedida do Cloud Service Mesh, descreva seu status:
gcloud container fleet mesh describe
A saída é semelhante à seguinte:
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: ERROR
em vez destate.code: OK
, aguarde alguns minutos e executegcloud container fleet mesh describe
novamente. Antes de prosseguir com o tutorial, certifique-se de que o camposervicemesh.controlPlaneManagement.details.code
tenha o valorREVISION_READY
.
Implantar um gateway de entrada e um aplicativo de exemplo
Nesta seção, você implantará o aplicativo de exemplo Online Boutique e um gateway de entrada para gerenciar o tráfego de entrada.
Implante o aplicativo de exemplo Online Boutique e o gateway de entrada.
O comando a seguir usa
sed
para atualizar o manifestoacm-config.yaml
para que o Config Sync implante os recursos necessários para implantar o gateway de entrada e o aplicativo de exemplo.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.yaml
Observe que esta etapa pode levar alguns minutos para ser concluída.
Veja o status do Config Sync para o
RootSync
e os doisRepoSyncs
:gcloud alpha anthos config sync repo describe
A saída é 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: RECONCILING
em vez destatus: SYNCED
, aguarde alguns minutos e executegcloud alpha anthos config sync repo describe
novamente.Para visualizar apenas as informações de um repositório, você pode usar os sinalizadores
--sync-name
e--sync-namespace
. Para visualizar os recursos gerenciados em detalhes, adicione o sinalizador--managed-resources
. Para obter mais informações, consulte Exibir o status da sincronização de configuração em vários clusters .Aguarde até que o endereço IP público do gateway de entrada seja provisionado:
until kubectl -n asm-ingress get svc asm-ingressgateway -o jsonpath='{.status.loadBalancer}' | grep "ingress"; do : ; done
Obtenha 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 aplicativo Online Boutique foi implantado com sucesso:
echo http://${EXTERNAL_IP}
Aplique políticas para proteger sua malha
Nas seções a seguir, você utilizará o Policy Controller para impor políticas do pacote de políticas do Cloud Service Mesh criando restrições .
Aplicar injeção de proxies sidecar
Nesta seção, você aplica políticas para garantir que todas as cargas de trabalho na malha tenham a injeção automática de sidecar habilitada.
Para impor a injeção de proxies sidecar, aplique restrições.
O comando a seguir usa
sed
para atualizar o manifestoacm-config.yaml
para 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.yaml
O comando anterior implanta os seguintes recursos:
Uma
Constraint
K8sRequiredLabels
que requer que qualquerNamespace
na malha contenha o rótulo de injeção de proxy sidecar específico do Cloud Service Mesh :Uma
Constraint
AsmSidecarInjection
que proíbe qualquerPod
na malha de ignorar a injeção do sidecar do proxy 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-system
A 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: RECONCILING
em vez destatus: SYNCED
, aguarde alguns minutos e executegcloud alpha anthos config sync repo describe
novamente.Verifique se as
Constraints
foram criadas:kubectl get constraints
Pode levar alguns minutos para o Controlador de Políticas avaliar essas restrições. Se você não vir valores na coluna
TOTAL-VIOLATIONS
, aguarde e executekubectl get constraints
novamente.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 0
Como configuramos corretamente nossos
Namespaces
ePods
, há0
TOTAL-VIOLATIONS
para essasConstraints
.Para ver essas
Constraints
em ação, tente criar umNamespace
no seu cluster sem umlabel
nem umaannotation
:kubectl create namespace test
A saída é semelhante ao seguinte erro:
Error from server (Forbidden): admission webhook "validation.gatekeeper.sh" denied the request: [namespace-sidecar-injection-label] you must provide labels: {"istio-injection"}
Aplicar criptografia de tráfego
Nesta seção, você aplica políticas para garantir que todo o tráfego na malha seja criptografado .
Para impor a criptografia de tráfego, aplique restrições.
O comando a seguir usa
sed
para atualizar o manifestoacm-config.yaml
para 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.yaml
O comando anterior implanta os seguintes recursos:
Uma
Constraint
AsmPeerAuthnMeshStrictMtls
que impõe aPeerAuthentication
mTLS de nível de malha no namespaceistio-system
:Uma restrição referencial
Config
no namespacegatekeeper-system
. Essa restrição referencial permite que aConstraint
AsmPeerAuthnMeshStrictMtls
faça referência a outro objeto em sua definição (por exemplo, ao procurar por qualquerPeerAuthentication
noNamespace
istio-system
):Uma
Constraint
DestinationRuleTLSEnabled
que proíbe desabilitar o TLS para todos os hosts e subconjuntos de hosts no IstioDestinationRules
:Uma
Constraint
AsmPeerAuthnStrictMtls
que impõe que todasPeerAuthentications
não podem substituirSTRICT
mTLS:
Veja o status do Config Sync para o
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
A 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: RECONCILING
em vez destatus: SYNCED
, aguarde alguns minutos e executegcloud alpha anthos config sync repo describe
novamente.Execute o seguinte comando para obter mais informações sobre a violação
PeerAuthentication
:kubectl get asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls -ojsonpath='{.status.violations}' | jq
A 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 uma
PeerAuthentication
noistio-system
. Para impedir que todos os seus serviços na malha aceitem tráfego de texto simples, defina uma políticaPeerAuthentication
para toda a malha com o modo mTLS definido comoSTRICT
. Ao implantar a política, o plano de controle provisiona automaticamente certificados TLS para que as cargas de trabalho possam se autenticar entre si.O comando a seguir usa
sed
para atualizar o manifestoacm-config.yaml
para 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.yaml
O comando anterior implementa a seguinte
PeerAuthentication
STRICT
mTLS no namespaceistio-system
. Isso aplica o mTLSSTRICT
a 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-system
A 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: RECONCILING
em vez destatus: SYNCED
, aguarde alguns minutos e executegcloud alpha anthos config sync repo describe
novamente.Verifique se as
Constraints
foram criadas:kubectl get constraints
Observe que pode levar alguns minutos para que o Controlador de Políticas avalie essas
Constraints
. Aguarde e execute novamente o comandokubectl get constraints
até obter os valores na colunaTOTAL-VIOLATIONS
para 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 0
Aplicar controle de acesso granular
Nesta seção, você aplica políticas para garantir que todas as cargas de trabalho na malha tenham controle de acesso granular .
Para impor o controle de acesso granular, aplique restrições.
O comando a seguir usa
sed
para atualizar o manifestoacm-config.yaml
para 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.yaml
O comando anterior implanta os seguintes recursos:
Uma
Constraint
AsmAuthzPolicyDefaultDeny
que impõe a negação padrão de nível de malhaAuthorizationPolicy
no namespaceistio-system
:Uma
Constraint
AsmAuthzPolicyEnforceSourcePrincipals
que impõe que qualquerAuthorizationPolicies
defina entidades de origem granulares (exceto "*"). Somente o gateway de entrada no namespaceasm-ingress
é uma exceção a essa regra, pois recebe o tráfego dos usuários finais e redireciona o tráfego para o aplicativofrontend
da Boutique Online.
Veja o status do Config Sync para o
RootSync
:gcloud alpha anthos config sync repo describe \ --sync-name root-sync \ --sync-namespace config-management-system
A 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: RECONCILING
em vez destatus: SYNCED
, aguarde alguns minutos e executegcloud alpha anthos config sync repo describe
novamente.Execute o seguinte comando para obter mais informações sobre a violação associada:
kubectl get asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/default-deny-authorization-policies -ojsonpath='{.status.violations}' | jq
A 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 a
AuthorizationPolicy
no namespaceistio-system
.O comando a seguir usa
sed
para atualizar o manifestoacm-config.yaml
para 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.yaml
O comando anterior implanta a seguinte
AuthorizationPolicy
deny-all 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-system
A 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: RECONCILING
em vez destatus: SYNCED
, aguarde alguns minutos e executegcloud alpha anthos config sync repo describe
novamente.Verifique se as
Constraints
foram criadas:kubectl get constraints
Observe que pode levar alguns minutos para que o Controlador de Políticas avalie essas
Constraints
. Aguarde e execute novamente o comandokubectl get constraints
até obter os valores na colunaTOTAL-VIOLATIONS
para 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 0
Acesse o aplicativo Online Boutique no seu navegador:
echo http://${EXTERNAL_IP}
Você deve receber o erro:
RBAC: access denied
, que confirma que aAuthorizationPolicy
de negação padrão é aplicada a toda a malha.Corrija esse problema implantando
AuthorizationPolicies
mais granulares nos namespacesasm-ingress
eonlineboutique
.O comando a seguir usa
sed
para atualizar o manifestoacm-config.yaml
para 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.yaml
O comando anterior implanta os seguintes recursos:
Uma
AuthorizationPolicy
no namespaceasm-ingress
:Uma
AuthorizationPolicy
por aplicativo no namespaceonlineboutique
, aqui está o exemplo para o aplicativocartservice
:Uma
ServiceAccount
por aplicativo nos namespacesasm-ingress
eonlineboutique
para que cada aplicativo tenha uma identidade única avaliada comoprincipal
nasAuthorizationPolicies
. Aqui está o exemplo para o aplicativocartservice
:
Veja o status do Config Sync para o
RootSync
e os doisRepoSyncs
:gcloud alpha anthos config sync repo describe
A saída é 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: RECONCILING
em vez destatus: SYNCED
, aguarde alguns minutos e executegcloud alpha anthos config sync repo describe
novamente.Para visualizar apenas as informações de um repositório, você pode usar os sinalizadores
--sync-name
e--sync-namespace
. Para visualizar em detalhes os recursos gerenciados, você pode adicionar o sinalizador--managed-resources
. Para obter mais informações, consulte Exibir o status da sincronização de configuração em vários clusters .Acesse o aplicativo Online Boutique novamente no seu navegador:
echo http://${EXTERNAL_IP}
Se você esperar alguns minutos, verá que o site estará funcionando corretamente novamente, conforme o esperado.
Veja o status dos recursos de segurança do GKE Enterprise
Você pode visualizar o status dos recursos de segurança do GKE Enterprise, incluindo políticas de autenticação e autorização, no Google Cloud console.
No Google Cloud console, acesse a página GKE Enterprise Security .
Acesse o GKE Enterprise Security
O Resumo da Política exibe o status da segurança do aplicativo, incluindo o controle de acesso ao serviço (
AuthorizationPolicies
) e mTLS.Clique em Auditoria de Política para visualizar os status da política de carga de trabalho para o cluster e ambos os namespaces (
asm-ingress
eonlineboutique
).Os cartões de controle de acesso ao serviço e de status mTLS fornecem uma visão geral de alto nível.
A lista de cargas de trabalho mostra o controle de acesso ao serviço e o status mTLS de cada carga de trabalho.
Agora você protegeu seu cluster e sua malha com o Policy Controller e o Config Sync.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto que contém os recursos ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Excluir recursos individuais
Para excluir os recursos individuais:
Cancele o registro do seu cluster da frota:
gcloud
gcloud container fleet memberships unregister ${CLUSTER} \ --project=${PROJECT_ID} \ --gke-cluster=${CLUSTER_ZONE}/${CLUSTER}
A saída é semelhante à seguinte:
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.
Conector de configuração
kubectl delete -f ~/asm-acm-tutorial-dir/fleet-membership.yaml
Exclua seu cluster:
gcloud
gcloud container clusters delete ${CLUSTER} \ --zone ${CLUSTER_ZONE}
Pressione
y
quando solicitado. Este comando pode levar mais de cinco minutos para ser concluído.A saída é semelhante à seguinte:
Deleting cluster asm-acm-tutorial...done. Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-east4-a/clusters/asm-acm-tutorial].
Conector de configuração
kubectl delete -f ~/asm-acm-tutorial-dir/container-cluster.yaml
Exclua os arquivos que você criou:
rm -r ~/asm-acm-tutorial-dir
O que vem a seguir
- Descubra as melhores práticas de segurança do Cloud Service Mesh .
- Saiba mais sobre o pacote de políticas do Cloud Service Mesh .
- Explore a biblioteca de modelos de restrição do Policy Controller.
- Explore arquiteturas de referência, diagramas e práticas recomendadas sobre o Google Cloud. Confira nosso Centro de Arquitetura de Nuvem .