Version 1.14

Renforcez la sécurité de votre application avec Anthos Service Mesh et Anthos Config Management

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

Ce tutoriel vous explique comment améliorer le niveau de sécurité de votre cluster et de votre application. Imaginez que vous êtes un administrateur de plate-forme dont l'organisation gère les applications de sa boutique en ligne à l'aide d'Anthos Service Mesh, une suite d'outils qui vous aide à surveiller et à gérer un maillage de services fiable. Vous devez vous assurer que votre maillage et vos applications sont sécurisés.

Vous pouvez éviter les erreurs de configuration et valider automatiquement vos règles Anthos Service Mesh à l'aide de Policy Controller et Config Sync d'Anthos Config Management. Policy Controller permet d'appliquer des règles entièrement programmables pour vos clusters. Policy Controller est également fourni avec une bibliothèque par défaut de modèles de contrainte que vous pouvez utiliser avec le groupe de sécurité Anthos Service Mesh pour auditer la conformité des failles et des bonnes pratiques de sécurité de votre maillage. Config Sync rapproche en permanence l'état des clusters d'un ensemble central de fichiers de configuration déclaratifs Kubernetes. L'utilisation conjointe de Policy Controller et de Config Sync vous permet d'appliquer en permanence des contraintes à vos configurations de règles Anthos Service Mesh.

Le schéma suivant montre comment Anthos Service Mesh, Policy Controller et Config Sync interagissent dans ce tutoriel pour gérer et protéger une passerelle d'entrée et les exemples d'applications de boutique en ligne que vous utilisez dans ce tutoriel :

Schéma illustrant l'architecture que vous allez créer pour ce tutoriel

Objectifs

  • Créer un cluster Google Kubernetes Engine (GKE) et l'enregistrer dans un parc.
  • Installer Policy Controller, Config Sync et Anthos Service Mesh sur un cluster.
  • Configurez Config Sync pour synchroniser plusieurs dépôts.
  • Appliquer les bonnes pratiques pour déployer des configurations, des applications et des ressources Istio avec Config Sync
  • Déployer des configurations de cluster, les exemples d'applications de boutique en ligne et une passerelle d'entrée avec Config Sync
  • Exploiter le lot de règles Anthos Service Mesh de Policy Controller pour appliquer les bonnes pratiques de sécurité suivantes :
    • S'assurer que toutes les charges de travail du maillage ont une injection side-car automatique.
    • Appliquer le chiffrement sur l'ensemble du trafic dans le maillage.
    • S'assurer que toutes les charges de travail du maillage disposent d'un contrôle d'accès précis.

Coûts

Ce tutoriel utilise les composants facturables suivants de Google Cloud :

  • GKE.
  • Anthos. La facturation d'Anthos inclut la facturation d'Anthos Service Mesh et des composants d'Anthos Config Management.

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé ce tutoriel, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  2. Assurez-vous que la facturation est activée pour votre projet Cloud. Découvrez comment vérifier si la facturation est activée sur un projet.

Préparer votre environnement

Dans cette section, vous allez préparer votre environnement afin de pouvoir installer Anthos Service Mesh, Policy Controller et Config Sync :

  1. Ouvrez une session Cloud Shell. Pour ouvrir cette session, dans l'angle supérieur droit de cette page, cliquez sur Activer Cloud Shell, puis sur Confirmer. Une session Cloud Shell s'ouvre dans un cadre situé en bas de la page. Exécutez les commandes suivantes dans cette session Cloud Shell.
  2. Passez à la dernière version de Google Cloud CLI :

    gcloud components update
    
  3. Pour stocker les fichiers que vous créez dans ce tutoriel, créez un répertoire à l'aide d'une variable d'environnement :

    WORK_DIR=~/asm-acm-tutorial-dir
    mkdir $WORK_DIR
    
  4. Pour simplifier le reste du tutoriel, créez les variables d'environnement suivantes :

    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)')
    

    Remplacez PROJECT_ID par l'ID de projet que vous souhaitez utiliser pour ce tutoriel.

    Si vous êtes invité à autoriser Cloud Shell, cliquez sur Autoriser pour terminer l'opération.

  5. Activez les API dont vous avez besoin pour ce tutoriel :

    gcloud services enable \
        mesh.googleapis.com \
        anthos.googleapis.com
    

    Cette opération peut prendre plus d'une minute.

Configurer un cluster GKE

Dans cette section, vous allez créer un cluster GKE, puis l'enregistrer dans un parc. Un parc est un concept Google Cloud qui permet d'organiser logiquement des clusters et d'autres ressources. Il vous permet d'utiliser et de gérer des fonctionnalités multicluster, ainsi que d'appliquer des règles cohérentes à vos systèmes.

Le cluster que vous créez dans cette section est le cluster sur lequel vous installez Anthos Service Mesh, Policy Controller et Config Sync. Il s'agit également du cluster dans lequel vous déployez les exemples d'applications Online Boutique.

Pour configurer votre cluster, procédez comme suit :

  1. Créez un cluster 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}
    

    Cette opération peut prendre plus de cinq minutes.

    Le résultat ressemble à ce qui suit :

    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
    
  2. Enregistrez votre cluster dans un parc :

    gcloud container fleet memberships register ${CLUSTER} \
        --project=${PROJECT_ID} \
        --gke-cluster=${CLUSTER_ZONE}/${CLUSTER} \
        --enable-workload-identity
    

    Le résultat ressemble à ce qui suit :

    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.
    

Explorer les dépôts

Dans la section d'installation suivante, vous appliquez un fichier manifeste Anthos Config Management acm-config.yaml. Ce fichier manifeste configure votre cluster pour qu'il effectue la synchronisation à partir du dossier asm-acm-tutorial de l'exemple de dépôt Anthos Config Management. Ce dossier contient tous les fichiers de configuration dont vous avez besoin pour effectuer le reste du tutoriel.

Pour simplifier ce tutoriel, exécutez les commandes sed afin de mettre à jour le fichier acm-config.yaml. Avec le fichier acm-config.yaml, Config Sync déploie les fichiers manifestes requis pour chaque étape de ce tutoriel. La mise à jour d'un seul fichier vous permet de vous concentrer sur les concepts et le flux de sécurisation de vos clusters, maillages et applications, sans avoir à manipuler les fichiers et à exécuter des commandes git de manière répétée.

Pour utiliser la capacité de Config Sync à synchroniser plusieurs dépôts, utilisez les ressources suivantes :

  • root-sync, en tant que dépôt RootSync, contient toutes les configurations de votre cluster, y compris RepoSyncs, Constraints, ClusterRole et RoleBindings, ainsi que les ressources incluses dans certains espaces de noms système tels que istio-system.
  • ingress-gateway, en tant que premier RepoSync, contient toutes les ressources nécessaires pour déployer une passerelle d'entrée et la sécuriser progressivement tout au long de ce tutoriel.
  • online-boutique, en tant que deuxième RepoSync, contient toutes les ressources nécessaires pour déployer les applications de boutique en ligne et les sécuriser progressivement tout au long de ce tutoriel.

Installer Policy Controller, Config Sync et Anthos Service Mesh géré

Maintenant que vous avez créé et enregistré votre cluster, vous pouvez installer Config Sync, Policy Controller et Anthos Service Mesh sur votre cluster, puis le configurer pour qu'il effectue la synchronisation à partir des configurations du dépôt RootSync par défaut :

  1. Activez Anthos Config Management dans votre parc :

    gcloud beta container fleet config-management enable
    
  2. Activez Anthos Config Management dans votre parc.

    gcloud container fleet mesh enable
    
  3. Activez la gestion automatique d'Anthos Service Mesh pour laisser Google appliquer la configuration recommandée d'Anthos Service Mesh géré:

    gcloud container fleet mesh update \
        --management automatic \
        --memberships ${CLUSTER}
    
  4. Pour installer et configurer Config Sync et Policy Controller, créez le fichier manifeste Anthos Config Management suivant :

    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
    

    Pour en savoir plus sur les champs de configuration d'Anthos Config Management, consultez la page Champs spécifiques de la commande d'application de gcloud.

  5. Appliquez le fichier :

    gcloud beta container fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    Une fois ce fichier appliqué, Policy Controller et Config Sync sont installés sur votre cluster. Ensuite, Config Sync commence à synchroniser toutes les configurations du dépôt RootSync par défaut avec votre cluster. Ces configurations installent et configurent les composants clés suivants :

  6. Pour garantir l'installation réussie de Policy Controller et de Config Sync, affichez l'état d'Anthos Config Management :

    gcloud beta container fleet config-management status
    

    Le résultat ressemble à ce qui suit :

    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 PENDING ou NOT_INSTALLED s'affichent dans les lignes Status ou Policy_Controller, attendez quelques minutes et exécutez à nouveau gcloud beta container fleet config-management status.

  7. Pour garantir l'installation réussie d'Anthos Service Mesh, décrivez son état :

    gcloud container fleet mesh describe
    

    Le résultat ressemble à ce qui suit :

    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'
    

    Si state.code: ERROR s'affiche au lieu de state.code: OK, attendez quelques minutes et exécutez à nouveau gcloud container fleet mesh describe. Avant de poursuivre le tutoriel, vous devez vous assurer que le champ servicemesh.controlPlaneManagement.details.code contient la valeur REVISION_READY.

Déployer une passerelle d'entrée et un exemple d'application

Dans cette section, vous allez déployer l'exemple d'application Boutique en ligne et une passerelle d'entrée pour gérer le trafic entrant.

  1. Déployez l'exemple d'application Boutique en ligne et la passerelle d'entrée.

    La commande suivante utilise sed pour mettre à jour le fichier manifeste acm-config.yaml afin que Config Sync déploie les ressources dont vous avez besoin pour déployer la passerelle d'entrée et l'exemple d'application.

    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
    

    Cette étape peut prendre quelques minutes.

  2. Affichez l'état de Config Sync pour RootSync et les deux RepoSyncs :

    gcloud alpha anthos config sync repo describe
    

    Le résultat est semblable à :

    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"
      }
    ]
    

    Si status: RECONCILING s'affiche au lieu de status: SYNCED, attendez quelques minutes et exécutez à nouveau gcloud alpha anthos config sync repo describe.

    Pour afficher uniquement les informations d'un dépôt, vous pouvez utiliser les options --sync-name et --sync-namespace. Pour afficher les ressources gérées en détail, ajoutez l'option --managed-resources. Pour en savoir plus, consultez la page Afficher l'état de Config Sync sur plusieurs clusters.

  3. Attendez que l'adresse IP publique de la passerelle d'entrée soit provisionnée :

    until kubectl -n asm-ingress get svc asm-ingressgateway -o jsonpath='{.status.loadBalancer}' | grep "ingress"; do : ; done
    
  4. Récupérez l'adresse IP publique de la passerelle d'entrée :

    EXTERNAL_IP=$(kubectl get svc asm-ingressgateway -n asm-ingress -o jsonpath="{.status.loadBalancer.ingress[*].ip}")
    
  5. Accédez à l'adresse IP depuis votre navigateur pour vérifier que l'application Boutique en ligne a bien été déployée :

    echo http://${EXTERNAL_IP}
    

Appliquer des règles pour sécuriser le maillage

Dans les sections suivantes, vous allez utiliser Policy Controller pour appliquer les règles du groupe de règles Anthos Service Mesh en créant des contraintes.

Appliquer l'injection de proxys side-car

Dans cette section, vous appliquez des règles pour vous assurer que l'injection side-car automatique est activée sur toutes les charges de travail du maillage.

  1. Pour appliquer l'injection de proxys side-car, appliquez des contraintes.

    La commande suivante utilise sed pour mettre à jour le fichier acm-config.yaml afin que Config Sync déploie les ressources associées.

    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
    

    La commande précédente déploie les ressources suivantes :

  2. Affichez l'état de Config Sync pour RootSync :

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    Le résultat est semblable à :

    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 status: RECONCILING s'affiche au lieu de status: SYNCED, attendez quelques minutes et exécutez à nouveau gcloud alpha anthos config sync repo describe.

  3. Vérifiez que les contraintes (Constraints) sont créées :

    kubectl get constraints
    

    Policy Controller peut prendre quelques minutes pour évaluer ces contraintes. Si aucune valeur ne s'affiche dans la colonne TOTAL-VIOLATIONS, attendez et exécutez à nouveau kubectl get constraints.

    Le résultat est semblable à :

    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
    

    Comme nous avons correctement configuré Namespaces et Pods, il existe 0 TOTAL-VIOLATIONS pour ces Constraints.

  4. Pour voir ces Constraints en action, essayez de créer un Namespace dans votre cluster sans label ni annotation :

    kubectl create namespace test
    

    La sortie ressemble à ce qui suit :

    Error from server (Forbidden): admission webhook "validation.gatekeeper.sh" denied the request: [namespace-sidecar-injection-label] you must provide labels: {"istio-injection"}
    

Appliquer le chiffrement du trafic

Dans cette section, vous appliquez des règles pour vous assurer que tout le trafic du maillage est chiffré.

  1. Pour appliquer le chiffrement du trafic, appliquez des contraintes.

    La commande suivante utilise sed pour mettre à jour le fichier acm-config.yaml afin que Config Sync déploie les ressources associées.

    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
    

    La commande précédente déploie les ressources suivantes :

  2. Affichez l'état de Config Sync pour RootSync :

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    Le résultat est semblable à :

    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 status: RECONCILING s'affiche au lieu de status: SYNCED, attendez quelques minutes et exécutez à nouveau gcloud alpha anthos config sync repo describe.

  3. Exécutez la commande suivante pour obtenir plus d'informations sur le cas de non-respect PeerAuthentication :

    kubectl get asmpeerauthnmeshstrictmtls.constraints.gatekeeper.sh/mesh-level-strict-mtls -ojsonpath='{.status.violations}'  | jq
    

    Le résultat est semblable à :

    [
      {
        "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"
      }
    ]
    
  4. Corrigez le problème en déployant une PeerAuthentication dans istio-system. Pour empêcher tous vos services du maillage d'accepter le trafic en texte brut, définissez une règle PeerAuthentication à l'échelle du maillage avec le mode mTLS défini sur STRICT. Lorsque vous déployez la règle, le plan de contrôle provisionne automatiquement les certificats TLS afin que les charges de travail puissent s'authentifier mutuellement.

    La commande suivante utilise sed pour mettre à jour le fichier acm-config.yaml afin que Config Sync déploie les ressources associées.

    sed -i "s,root-sync/enforce-strict-mtls,root-sync/fix-strict-mtls,g" $WORK_DIR/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    La commande ci-dessus déploie l'authentification PeerAuthentication du protocole mTLS en mode STRICT suivante dans l'espace de noms istio-system. Elle applique l'authentification mTLS en mode STRICT à l'ensemble du maillage :

    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: default
    spec:
      mtls:
        mode: STRICT
  5. Affichez l'état de Config Sync pour RootSync :

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    Le résultat est semblable à :

    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 status: RECONCILING s'affiche au lieu de status: SYNCED, attendez quelques minutes et exécutez à nouveau gcloud alpha anthos config sync repo describe.

  6. Vérifiez que les contraintes (Constraints) sont créées :

    kubectl get constraints
    

    Notez que Policy Controller peut prendre quelques minutes pour évaluer ces Constraints. Attendez et exécutez à nouveau cette commande kubectl get constraints jusqu'à obtenir des valeurs sous la colonne TOTAL-VIOLATIONS pour chaque ligne.

    Le résultat est semblable à :

    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
    

Appliquer un contrôle d'accès précis

Dans cette section, vous appliquez des règles pour vous assurer que toutes les charges de travail du maillage disposent d'un contrôle d'accès précis.

  1. Pour appliquer un contrôle d'accès précis, appliquez des contraintes.

    La commande suivante utilise sed pour mettre à jour le fichier acm-config.yaml afin que Config Sync déploie les ressources associées.

    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
    

    La commande précédente déploie les ressources suivantes :

  2. Affichez l'état de Config Sync pour RootSync :

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    Le résultat est semblable à :

    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 status: RECONCILING s'affiche au lieu de status: SYNCED, attendez quelques minutes et exécutez à nouveau gcloud alpha anthos config sync repo describe.

  3. Exécutez la commande suivante pour obtenir plus d'informations sur le cas de non-respect associé :

    kubectl get asmauthzpolicydefaultdeny.constraints.gatekeeper.sh/default-deny-authorization-policies -ojsonpath='{.status.violations}'  | jq
    

    Le résultat est semblable à :

    [
      {
        "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"
      }
    ]
    
  4. Corrigez le problème en déployant AuthorizationPolicy dans l'espace de noms istio-system.

    La commande suivante utilise sed pour mettre à jour le fichier acm-config.yaml afin que Config Sync déploie les ressources associées.

    sed -i "s,root-sync/enforce-authorization-policies,root-sync/fix-default-deny-authorization-policy,g" $WORK_DIR/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    La commande ci-dessus déploie la règle d'autorisation (AuthorizationPolicy) de refus suivante dans l'espace de noms istio-system :

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: deny-all
    spec:
      {}
  5. Affichez l'état de Config Sync pour RootSync :

    gcloud alpha anthos config sync repo describe \
        --sync-name root-sync \
        --sync-namespace config-management-system
    

    Le résultat est semblable à :

    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 status: RECONCILING s'affiche au lieu de status: SYNCED, attendez quelques minutes et exécutez à nouveau gcloud alpha anthos config sync repo describe.

  6. Vérifiez que les contraintes (Constraints) sont créées :

    kubectl get constraints
    

    Notez que Policy Controller peut prendre quelques minutes pour évaluer ces Constraints. Attendez et exécutez à nouveau cette commande kubectl get constraints jusqu'à obtenir des valeurs sous la colonne TOTAL-VIOLATIONS pour chaque ligne.

    Le résultat est semblable à :

    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
    
  7. Accédez à l'application Boutique en ligne depuis votre navigateur :

    echo http://${EXTERNAL_IP}
    

    Vous devriez recevoir l'erreur RBAC: access denied, qui confirme que la règle d'autorisation (AuthorizationPolicy) de refus par défaut s'applique à l'ensemble du maillage.

  8. Corrigez ce problème en déployant des éléments AuthorizationPolicies plus précis dans les espaces de noms asm-ingress et onlineboutique.

    La commande suivante utilise sed pour mettre à jour le fichier acm-config.yaml afin que Config Sync déploie les ressources associées.

    sed -i "s,root-sync/fix-default-deny-authorization-policy,root-sync/deploy-authorization-policies,g" $WORK_DIR/acm-config.yaml
    gcloud beta container fleet config-management apply \
        --membership ${CLUSTER} \
        --config $WORK_DIR/acm-config.yaml
    

    La commande précédente déploie les ressources suivantes :

  9. Affichez l'état de Config Sync pour RootSync et les deux RepoSyncs :

    gcloud alpha anthos config sync repo describe
    

    Le résultat est semblable à :

    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"
      }
    ]
    

    Si status: RECONCILING s'affiche au lieu de status: SYNCED, attendez quelques minutes et exécutez à nouveau gcloud alpha anthos config sync repo describe.

    Pour afficher uniquement les informations d'un dépôt, vous pouvez utiliser les options --sync-name et --sync-namespace. Vous pouvez également ajouter l'option --managed-resources pour afficher les ressources gérées en détail. Pour en savoir plus, consultez la page Afficher l'état de Config Sync sur plusieurs clusters.

  10. Accédez de nouveau à l'application Boutique en ligne depuis votre navigateur :

    echo http://${EXTERNAL_IP}
    

    Si vous attendez quelques minutes, vous devriez constater que le site Web fonctionne à nouveau comme prévu.

Afficher l'état des fonctionnalités de sécurité Anthos

Vous pouvez consulter l'état des fonctionnalités de sécurité Anthos, y compris les règles d'authentification et d'autorisation, dans la console Google Cloud.

  1. Dans la console Google Cloud, accédez à la page Anthos Security.

    Accéder à la page "Sécurité" d'Anthos

    Le récapitulatif des règles affiche l'état de la sécurité des applications, y compris le contrôle des accès aux services (AuthorizationPolicies) et l'authentification mTLS.

  2. Cliquez sur Audit des règles pour afficher l'état de conformité avec les règles de la charge de travail pour le cluster et les deux espaces de noms (asm-ingress et onlineboutique).

    Les fiches Contrôle des accès aux services et État mTLS fournissent une vue d'ensemble.

    Vue d&#39;ensemble du contrôle d&#39;accès aux services et de l&#39;état mTLS

    La liste Charges de travail affiche le contrôle d'accès aux services et l'état mTLS de chaque charge de travail.

    Liste détaillée de chaque charge de travail, de son contrôle des accès aux services et de l&#39;état mTLS

Vous avez désormais sécurisé votre cluster et votre maillage à l'aide de Policy Controller et de Config Sync.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer des ressources individuelles

Pour supprimer les ressources individuelles, procédez comme suit :

  1. Annulez l'enregistrement de votre cluster dans le parc :

    gcloud container fleet memberships unregister ${CLUSTER} \
        --project=${PROJECT_ID} \
        --gke-cluster=${CLUSTER_ZONE}/${CLUSTER}
    

    Le résultat ressemble à ce qui suit :

    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.
    
  2. Supprimez votre cluster :

    gcloud container clusters delete ${CLUSTER} \
        --zone ${CLUSTER_ZONE}
    

    Appuyez sur y lorsque vous y êtes invité. L'exécution de cette commande peut prendre plus de cinq minutes.

    Le résultat ressemble à ce qui suit :

    Deleting cluster asm-acm-tutorial...done.
    Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-east4-a/clusters/asm-acm-tutorial].
    
  3. Supprimez les fichiers que vous avez créés :

    rm -r $WORK_DIR
    

Étapes suivantes