חיזוק האבטחה של האפליקציה באמצעות Cloud Service Mesh,‏ סנכרון תצורות ו-Policy Controller

במדריך הזה נסביר איך לשפר את מצב האבטחה של האשכול ושל האפליקציה. נניח שאתם אדמינים של פלטפורמה בארגון שמנהל את האפליקציות של החנות הווירטואלית שלו באמצעות Cloud Service Mesh, חבילת כלים שעוזרת לכם לנטר ולנהל רשת שירותים אמינה. אתם אחראים לוודא שרשת ה-Mesh והאפליקציות שלכם מאובטחות.

כדי למנוע הגדרות שגויות ולאמת באופן אוטומטי את כללי המדיניות של Cloud Service Mesh, אתם יכולים להשתמש ב-Policy Controller וב-Config Sync. בעזרת Policy Controller אפשר לאכוף באשכולות כללי מדיניות שניתנים לתכנות באופן מלא. בנוסף, Policy Controller כולל ספריית ברירת מחדל של תבניות אילוצים, שאפשר להשתמש בהן עם חבילת האבטחה של Cloud Service Mesh כדי לבדוק את התאימות של נקודות החולשה באבטחה של רשת ה-Mesh ואת השיטות המומלצות. ‫סנכרון תצורות מבצע התאמה רציפה בין מצב האשכולות לבין קבוצה מרכזית של קובצי תצורה הצהרתית של Kubernetes. השימוש ב-Policy Controller ובסנכרון תצורות ביחד מאפשר לכם לאכוף באופן רציף אילוצים על הגדרות המדיניות של Cloud Service Mesh.

בתרשים הבא מוצגת סקירה כללית של האופן שבו Cloud Service Mesh, ‏Policy Controller ו-סנכרון תצורות פועלים יחד במדריך הזה כדי לנהל ולהגן על שער כניסה ועל האפליקציות לדוגמה של Online Boutique שבהן אתם משתמשים במדריך הזה:

דיאגרמה שבה מוצגת הארכיטקטורה שיוצרים במדריך הזה

מטרות

  • יוצרים אשכול Google Kubernetes Engine ‏ (GKE) ורושמים את האשכול בצי.
  • התקנת Policy Controller,‏ Config Sync ו-Cloud Service Mesh באשכול.
  • מגדירים את Config Sync כך שיסנכרן כמה מאגרים.
  • כדאי ליישם שיטות מומלצות כדי לפרוס הגדרות, אפליקציות ומשאבי Istio באמצעות סנכרון תצורות.
  • פריסת הגדרות אשכול, האפליקציות לדוגמה של Online Boutique ושער כניסה באמצעות Config Sync.
  • כדי לאכוף את השיטות המומלצות הבאות לאבטחה, אפשר להשתמש בחבילת המדיניות של Cloud Service Mesh ב-Policy Controller:
    • מוודאים שלכל עומסי העבודה ברשת יש הזרקה אוטומטית של sidecar.
    • הצפנה של כל התנועה ברשת.
    • לוודא שלכל עומסי העבודה ברשת יש בקרת גישה פרטנית.

עלויות

במסמך הזה משתמשים ברכיבים הבאים של Google Cloud, והשימוש בהם כרוך בתשלום:

  • GKE.
  • GKE Enterprise. The billing for GKE Enterprise includes billing for the Cloud Service Mesh, Config Sync, and Policy Controller.

כדי ליצור הערכת עלויות בהתאם לשימוש החזוי, אתם יכולים להשתמש במחשבון התמחור.

משתמשים חדשים של Google Cloud ? יכול להיות שאתם זכאים לתקופת ניסיון בחינם.

כשמסיימים את המשימות שמתוארות במסמך הזה אפשר למחוק את המשאבים שיצרתם כדי להימנע מחיובים נוספים. מידע נוסף זמין בקטע הסרת המשאבים.

לפני שמתחילים

  1. בדף לבחירת הפרויקט במסוף Google Cloud , בוחרים פרויקט ב- Google Cloud או יוצרים אותו.

    תפקידים שנדרשים כדי לבחור או ליצור פרויקט

    • בחירת פרויקט: כדי לבחור פרויקט לא נדרש תפקיד IAM ספציפי – אתם יכולים לבחור כל פרויקט שקיבלתם בו תפקיד.
    • יצירת פרויקט: כדי ליצור פרויקט, צריך את התפקיד "יצירת פרויקטים" (roles/resourcemanager.projectCreator), שכולל את ההרשאה resourcemanager.projects.create. איך מקצים תפקידים

    כניסה לדף לבחירת הפרויקט

  2. מוודאים שהחיוב מופעל בפרויקט ב- Google Cloud .

הכנת הסביבה

בקטע הזה מכינים את הסביבה כדי שתוכלו להתקין את Cloud Service Mesh,‏ Policy Controller ו-Config Sync:

  1. במסוף Google Cloud , מפעילים את Cloud Shell.

    הפעלת Cloud Shell

  2. משדרגים לגרסה העדכנית של Google Cloud CLI:

    gcloud components update
    
  3. כדי לאחסן את הקבצים שאתם יוצרים במדריך הזה, צרו ספרייה:

    mkdir ~/asm-acm-tutorial-dir
    
  4. כדי לפשט את שאר המדריך, יוצרים את משתני הסביבה הבאים:

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

    מחליפים את PROJECT_ID במזהה הפרויקט שבו רוצים להשתמש במדריך הזה.

    אם מתבקשים לאשר את Cloud Shell, לוחצים על Authorize כדי להשלים את הפעולה.

  5. מפעילים את ממשקי ה-API שנדרשים למדריך הזה:

    gcloud

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

    Config Connector

    המדריך הזה כולל משאבים של Config Connector. אתם יכולים להשתמש במקורות המידע האלה כדי לבצע את אותן המשימות שאתם מבצעים בכרטיסייה gcloud. כדי להשתמש במשאבים האלה, מתקינים את Config Connector ומחילים את המשאבים באופן שהכי מתאים לסביבה שלכם.

    משתמשים במניפסט 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
    

    הפעולה הזו יכולה להימשך יותר מדקה.

הגדרת אשכול GKE

בקטע הזה יוצרים אשכול GKE ורושמים אותו ב-Fleet.Google Cloud הוא מושג שמתייחס לארגון לוגי של אשכולות ומשאבים אחרים, שמאפשר להשתמש ביכולות של כמה אשכולות ולנהל אותן, ולהחיל כללי מדיניות עקביים בכל המערכות.

האשכול שיוצרים בקטע הזה הוא האשכול שבו מתקינים את Cloud Service Mesh, את Policy Controller ואת סנכרון תצורות. זה גם האשכול שבו פורסים את האפליקציות לדוגמה של Online Boutique.

כדי להגדיר את האשכול:

  1. יוצרים אשכול 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}
    

    Config Connector

    משתמשים במניפסטים הבאים של ContainerCluster ו-ContainerNodePool:

    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
    

    מחליפים את PROJECT_NUMBER בערך של משתנה הסביבה PROJECT_NUMBER שאוחזר קודם.

    הפעולה הזו יכולה להימשך יותר מ-5 דקות.

  2. כדי לוודא שאשכול GKE נוצר בהצלחה, מתארים את הסטטוס שלו:

    gcloud container clusters list \
        --zone ${CLUSTER_ZONE} \
        --project ${PROJECT_ID}
    

    הפלט אמור להיראות כך:

    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
    
  3. מתחברים לאשכול GKE:

    gcloud container clusters get-credentials ${CLUSTER} \
        --zone ${CLUSTER_ZONE} \
        --project ${PROJECT_ID}
    
  4. רישום האשכול ב-Fleet:

    gcloud

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

    הפלט אמור להיראות כך:

    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

    משתמשים במניפסט הבא של 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
    
  5. כדי לוודא שהרישום של אשכול GKE יתבצע בהצלחה, צריך לתאר את הסטטוס שלו:

    gcloud container fleet memberships list
    

    הפלט אמור להיראות כך:

    NAME              EXTERNAL_ID                           LOCATION
    asm-acm-tutorial  0e12258c-8831-4d81-b5c0-5e7099a468cc  global
    

עיון במאגרים

בקטע ההתקנה הבא, מחילים קובץ מניפסט acm-config.yaml. קובץ המניפסט הזה מגדיר את האשכול לסנכרון מהתיקייה asm-acm-tutorial במאגר הדוגמה. התיקייה הזו מכילה את כל קובצי התצורה שצריך כדי להשלים את שאר המדריך.

כדי לפשט את המדריך, תשתמשו בפקודות sed כדי לעדכן את acm-config.yaml. בעזרת קובץ acm-config.yaml,‏ סנכרון תצורות פורס את המניפסטים שנדרשים לכל שלב במדריך הזה. עדכון של קובץ יחיד עוזר לכם להתמקד במושגים ובזרימה של אבטחת האשכולות, הרשת והאפליקציות, בלי שתצטרכו לבצע שוב ושוב מניפולציות בקבצים ולהריץ שוב ושוב פקודות git.

כדי להשתמש ביכולת של Config Sync לסנכרן כמה מאגרים, צריך להשתמש במשאבים הבאים:

  • ‫root-sync, כמאגר RootSync, מכיל את כל ההגדרות באשכול, כולל RepoSyncs,‏ Constraints,‏ ClusterRole,‏ RoleBindings ומשאבים שנכללים במרחבי שמות מסוימים של המערכת, כמו istio-system.
  • ‫ingress-gateway, בתור RepoSync ראשון, מכיל את כל המשאבים שצריך כדי לפרוס שער כניסה ולאבטח אותו בהדרגה לאורך המדריך הזה.
  • online-boutique, בתור RepoSync שני, מכיל את כל המשאבים שצריך כדי לפרוס את האפליקציות של Online Boutique ולאבטח אותן בהדרגה במהלך המדריך הזה.

התקנה של Policy Controller,‏ סנכרון תצורות ו-Cloud Service Mesh מנוהל

אחרי שיצרתם ורשמתם את האשכול, אתם יכולים להתקין בו את סנכרון תצורות, את Policy Controller ואת Cloud Service Mesh, ולהגדיר אותו כך שיסתנכרן עם ההגדרות של ברירת המחדל של RootSync:

  1. מפעילים את האופרטור ConfigManagement, שמנהל את סנכרון תצורות ואת Policy Controller:

    gcloud

    gcloud beta container fleet config-management enable
    

    Config Connector

    משתמשים במניפסט GKEHubFeature הבא:

    apiVersion: gkehub.cnrm.cloud.google.com/v1beta1
    kind: GKEHubFeature
    metadata:
      name: configmanagement
    spec:
      projectRef:
        external: PROJECT_ID
      location: global
      resourceID: configmanagement
    
  2. מפעילים את Cloud Service Mesh ב-fleet.

    gcloud

    gcloud container fleet mesh enable
    

    Config Connector

    משתמשים במניפסט GKEHubFeature הבא:

    apiVersion: gkehub.cnrm.cloud.google.com/v1beta1
    kind: GKEHubFeature
    metadata:
      name: servicemesh
    spec:
      projectRef:
        external: PROJECT_ID
      location: global
      resourceID: servicemesh
    
  3. מפעילים את הניהול האוטומטי של Cloud Service Mesh כדי לאפשר ל-Google להחיל את ההגדרה המומלצת של Cloud Service Mesh מנוהל:

    gcloud

    gcloud container fleet mesh update \
        --management automatic \
        --memberships ${MEMBERSHIP}
    

    Config Connector

    משתמשים במניפסט 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
    
  4. מפעילים את סנכרון תצורות ואת Policy Controller:

    gcloud

    שומרים את המניפסט הבא בתור acm-config.yaml בספרייה ~/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
    

    למידע נוסף על שדות התצורה של Google Cloud CLI, קראו את המאמר שדות המפרט של gcloud apply.

    מחילים את הקובץ:

    gcloud beta container fleet config-management apply \
        --membership ${MEMBERSHIP} \
        --config ~/asm-acm-tutorial-dir/acm-config.yaml
    

    Config Connector

    משתמשים במניפסט 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
    

    ‫Policy Controller ו-סנכרון תצורות מותקנים באשכול. לאחר מכן, Config Sync מתחיל לסנכרן את כל ההגדרות של ברירת המחדל RootSync עם האשכול שלכם. ההגדרות האלה מתקינות ומגדירות את רכיבי המפתח הבאים:

    • האובייקטים של RepoSync שמגדירים את האפליקציות של Online Boutique ואת שער הכניסה מסונכרנים:

      apiVersion: configsync.gke.io/v1beta1
      kind: RepoSync
      metadata:
        name: repo-sync
      spec:
        override:
          enableShellInRendering: true
        sourceFormat: unstructured
        git:
          repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
          revision: HEAD
          branch: main
          dir: asm-acm-tutorial/online-boutique/init
          auth: none
      apiVersion: configsync.gke.io/v1beta1
      kind: RepoSync
      metadata:
        name: repo-sync
      spec:
        override:
          enableShellInRendering: true
        sourceFormat: unstructured
        git:
          repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
          revision: HEAD
          branch: main
          dir: asm-acm-tutorial/ingress-gateway/init
          auth: none
    • מכיוון שלרכיבי ההתאמה RepoSync נדרשות הרשאות נוספות כדי ליצור משאבי Istio, מוחלים על האשכול גם אובייקט ClusterRole ושני אובייקטים מסוג RoleBinding כדי להעניק את ההרשאות האלה:

      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        labels:
          rbac.authorization.k8s.io/aggregate-to-edit: "true"
        name: custom:aggregate-to-edit:istio
      rules:
      - apiGroups:
        - "networking.istio.io"
        - "security.istio.io"
        resources:
        - "virtualservices"
        - "authorizationpolicies"
        - "gateways"
        verbs:
        - "*"
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: repo-sync
      subjects:
      - kind: ServiceAccount
        name: ns-reconciler-onlineboutique
        namespace: config-management-system
      roleRef:
        kind: ClusterRole
        name: edit
        apiGroup: rbac.authorization.k8s.io
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: repo-sync
      subjects:
      - kind: ServiceAccount
        name: ns-reconciler-asm-ingress
        namespace: config-management-system
      roleRef:
        kind: ClusterRole
        name: edit
        apiGroup: rbac.authorization.k8s.io
  5. כדי לוודא שההתקנה של Policy Controller ו-Config Sync בוצעה בהצלחה, בודקים את הסטטוס:

    gcloud beta container fleet config-management status
    

    הפלט אמור להיראות כך:

    Name: asm-acm-tutorial
    Status: SYNCED
    Last_Synced_Token: 4b3384d
    Sync_Branch: main
    Last_Synced_Time: 2022-05-04T21:32:58Z
    Policy_Controller: INSTALLED
    

    אם מופיע הערך PENDING או NOT_INSTALLED בשורות Status או Policy_Controller, צריך להמתין כמה דקות ולהריץ שוב את gcloud beta container fleet config-management status.

  6. כדי לוודא שההתקנה של Cloud Service Mesh בוצעה בהצלחה, מתארים את הסטטוס שלה:

    gcloud container fleet mesh describe
    

    הפלט אמור להיראות כך:

    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'
    

    אם במקום state.code: OK מופיע state.code: ERROR, צריך להמתין כמה דקות ולהריץ את gcloud container fleet mesh describe שוב. לפני שממשיכים במדריך, צריך לוודא שבשדה servicemesh.controlPlaneManagement.details.code מופיע הערך REVISION_READY.

פריסת שער כניסה ואפליקציה לדוגמה

בקטע הזה נסביר איך פורסים את האפליקציה לדוגמה Online Boutique ושער כניסה כדי לנהל את תנועת הכניסה.

  1. פורסים את אפליקציית הדוגמה Online Boutique ואת שער הכניסה.

    הפקודה הבאה משתמשת ב-sed כדי לעדכן את המניפסט של acm-config.yaml, כדי שסנכרון תצורות יפרוס את המשאבים שצריך לפרוס את שער ה-Ingress ואת האפליקציה לדוגמה.

    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
    

    הערה: השלב הזה יכול להימשך כמה דקות.

  2. בודקים את סטטוס Config Sync עבור RootSync ושני RepoSyncs:

    gcloud alpha anthos config sync repo describe
    

    הפלט אמור להיראות כך:

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

    אם מופיע status: RECONCILING במקום status: SYNCED, מחכים כמה דקות ומריצים שוב את gcloud alpha anthos config sync repo describe.

    כדי לראות רק את המידע של מאגר אחד, אפשר להשתמש בדגלים --sync-name ו---sync-namespace. כדי לראות את המשאבים המנוהלים בפירוט, מוסיפים את הדגל --managed-resources. מידע נוסף זמין במאמר בנושא הצגת סטטוס סנכרון ההגדרות בכמה אשכולות.

  3. ממתינים עד שכתובת ה-IP הציבורית של שער הכניסה תוקצה:

    until kubectl -n asm-ingress get svc asm-ingressgateway -o jsonpath='{.status.loadBalancer}' | grep "ingress"; do : ; done
    
  4. מקבלים את כתובת ה-IP הציבורית של שער הכניסה:

    EXTERNAL_IP=$(kubectl get svc asm-ingressgateway -n asm-ingress -o jsonpath="{.status.loadBalancer.ingress[*].ip}")
    
  5. נכנסים לכתובת ה-IP מהדפדפן כדי לוודא שהאפליקציה Online Boutique נפרסה בהצלחה:

    echo http://${EXTERNAL_IP}
    

אכיפת כללי מדיניות לאבטחת הרשת

בקטעים הבאים תשתמשו ב-Policy Controller כדי לאכוף כללי מדיניות מחבילת המדיניות של Cloud Service Mesh באמצעות יצירת אילוצים.

אכיפת החדרת קובצי עזר חיצוניים

בקטע הזה אוכפים כללי מדיניות כדי לוודא שבכל עומסי העבודה ברשת מופעלת החדרת sidecar אוטומטית.

  1. כדי לאכוף החדרת פרוקסי sidecar, צריך להחיל אילוצים.

    הפקודה הבאה משתמשת ב-sed כדי לעדכן את המניפסט acm-config.yaml כדי ש-Config Sync יפרוס את המשאבים המשויכים.

    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
    

    הפקודה הקודמת פורסת את המשאבים הבאים:

    • ‫K8sRequiredLabels Constraint שמחייב שכל Namespace ברשת יכיל את תווית ההזרקה הספציפית של קובץ העזר החיצוני של Cloud Service Mesh:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: K8sRequiredLabels
      metadata:
        name: namespace-sidecar-injection-label
      spec:
        enforcementAction: deny
        match:
          kinds:
          - apiGroups:
            - ""
            kinds:
            - Namespace
          excludedNamespaces:
          - config-management-monitoring
          - config-management-system
          - default
          - gatekeeper-system
          - gke-connect
          - istio-system
          - kube-node-lease
          - kube-public
          - kube-system
          - resource-group-system
        parameters:
          labels:
          - allowedRegex: enabled
            key: istio-injection
    • ‫AsmSidecarInjection ‫Constraint שאוסר על כל Pod ברשת לעקוף את הזרקת ה-sidecar של Istio proxy:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: AsmSidecarInjection
      metadata:
        name: pod-sidecar-injection-annotation
      spec:
        enforcementAction: deny
        match:
          kinds:
          - apiGroups:
            - ""
            kinds:
            - Pod
          excludedNamespaces:
          - kube-system
        parameters:
          strictnessLevel: High
  2. צפייה בסטטוס של Config Sync ב-RootSync:

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

    הפלט אמור להיראות כך:

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

    אם מופיע status: RECONCILING במקום status: SYNCED, מחכים כמה דקות ומריצים שוב את gcloud alpha anthos config sync repo describe.

  3. מוודאים שנוצרו Constraints:

    kubectl get constraints
    

    יכול להיות שיעברו כמה דקות עד ש-Policy Controller יעריך את האילוצים האלה. אם לא מופיעים ערכים בעמודה TOTAL-VIOLATIONS, צריך לחכות ולהריץ שוב את הפקודה kubectl get constraints.

    הפלט אמור להיראות כך:

    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
    

    מכיוון שהגדרנו בצורה נכונה את Namespaces ו-Pods, יש 0 TOTAL-VIOLATIONS עבור Constraints אלה.

  4. כדי לראות את Constraints בפעולה, נסו ליצור Namespace באשכול בלי label או annotation:

    kubectl create namespace test
    

    הפלט דומה לשגיאה הבאה:

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

אכיפת הצפנת תנועה

בקטע הזה אוכפים כללי מדיניות כדי לוודא שכל התנועה ברשת מוצפנת.

  1. כדי לאכוף הצפנה של תנועת הנתונים, צריך להחיל אילוצים.

    הפקודה הבאה משתמשת ב-sed כדי לעדכן את המניפסט של acm-config.yaml, כדי שסנכרון ההגדרות יפרוס את המשאבים המשויכים.

    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
    

    הפקודה הקודמת פורסת את המשאבים הבאים:

    • AsmPeerAuthnMeshStrictMtls Constraint שאוכף את מדיניות ה-mTLS ברמת הרשת PeerAuthentication במרחב השמות istio-system:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: AsmPeerAuthnMeshStrictMtls
      metadata:
        name: mesh-level-strict-mtls
      spec:
        enforcementAction: deny
        parameters:
          rootNamespace: istio-system
          strictnessLevel: High
    • אילוץ הפניה Config במרחב השמות gatekeeper-system. האילוץ הרפרנציאלי הזה מאפשר ל-AsmPeerAuthnMeshStrictMtls Constraint להפנות לאובייקט אחר בהגדרה שלו (לדוגמה, חיפוש של PeerAuthentication כלשהו ב-istio-system Namespace):

      apiVersion: config.gatekeeper.sh/v1alpha1
      kind: Config
      metadata:
        name: config
      spec:
        sync:
          syncOnly:
            - group: ""
              version: "v1"
              kind: "Namespace"
            - group: "security.istio.io"
              version: "v1beta1"
              kind: "PeerAuthentication"
            - group: "security.istio.io"
              version: "v1beta1"
              kind: "AuthorizationPolicy"
    • ‫DestinationRuleTLSEnabled Constraint שאוסר על השבתת TLS לכל המארחים וקבוצות המשנה של המארחים ב-Istio DestinationRules:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: DestinationRuleTLSEnabled
      metadata:
        name: destination-rule-tls-enabled
      spec:
        enforcementAction: deny
        match:
          kinds:
          - apiGroups:
            - networking.istio.io
            kinds:
            - DestinationRule
    • AsmPeerAuthnStrictMtls Constraint שאוכפת שכל PeerAuthentications לא יכולים להחליף את STRICT mTLS:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: AsmPeerAuthnStrictMtls
      metadata:
        name: peerauthentication-strict-mtls
      spec:
        enforcementAction: deny
        match:
          kinds:
          - apiGroups:
            - security.istio.io
            kinds:
            - PeerAuthentication
        parameters:
          strictnessLevel: High
  2. צפייה בסטטוס של Config Sync ב-RootSync:

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

    הפלט אמור להיראות כך:

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

    אם במקום status: SYNCED מופיע status: RECONCILING, צריך להמתין כמה דקות ולהריץ את gcloud alpha anthos config sync repo describe שוב.

  3. כדי לקבל מידע נוסף על ההפרה PeerAuthentication, מריצים את הפקודה הבאה:

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

    הפלט אמור להיראות כך:

    [
      {
        "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. כדי לפתור את הבעיה, צריך לפרוס PeerAuthentication ב-istio-system. כדי למנוע מכל השירותים ברשת לקבל תנועה לא מוצפנת, צריך להגדיר מדיניות PeerAuthentication ברמת הרשת עם מצב mTLS שמוגדר ל-STRICT. כשפורסים את המדיניות, מישור הבקרה מקצה באופן אוטומטי אישורי TLS כדי שעומסי העבודה יוכלו לאמת זה את זה.

    הפקודה הבאה משתמשת ב-sed כדי לעדכן את המניפסט של acm-config.yaml, כדי שסנכרון תצורות יפרוס את המשאבים המשויכים.

    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
    

    הפקודה הקודמת פורסת את STRICT mTLS PeerAuthentication הבא במרחב השמות istio-system. הפקודה הזו מחילה mTLS STRICT על כל הרשת:

    apiVersion: security.istio.io/v1beta1
    kind: PeerAuthentication
    metadata:
      name: default
    spec:
      mtls:
        mode: STRICT
  5. צופים בסטטוס של Config Sync עבור RootSync:

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

    הפלט אמור להיראות כך:

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

    אם מופיע status: RECONCILING במקום status: SYNCED, מחכים כמה דקות ומריצים שוב את gcloud alpha anthos config sync repo describe.

  6. מוודאים שנוצרו Constraints:

    kubectl get constraints
    

    שימו לב: יכול להיות שיעברו כמה דקות עד ש-Policy Controller יתחיל להעריך את ה-Constraints האלה. ממתינים ומריצים שוב את הפקודה kubectl get constraints עד שמקבלים ערכים בעמודה TOTAL-VIOLATIONS לכל שורה.

    הפלט אמור להיראות כך:

    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
    

אכיפה של בקרת גישה מפורטת

בקטע הזה תאכפו כללי מדיניות כדי לוודא שלכל עומסי העבודה ברשת יש בקרת גישה מפורטת.

  1. כדי לאכוף בקרת גישה פרטנית, צריך להחיל אילוצים.

    הפקודה הבאה משתמשת ב-sed כדי לעדכן את המניפסט acm-config.yaml כדי ש-סנכרון תצורות יפרוס את המשאבים המשויכים.

    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
    

    הפקודה הקודמת פורסת את המשאבים הבאים:

    • ‫AsmAuthzPolicyDefaultDeny Constraint שמחיל את AuthorizationPolicy ברירת המחדל של דחיית בקשות ברמת הרשת istio-system במרחב השמות:

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: AsmAuthzPolicyDefaultDeny
      metadata:
        name: default-deny-authorization-policies
      spec:
        enforcementAction: deny
        parameters:
          rootNamespace: istio-system
          strictnessLevel: High
    • AsmAuthzPolicyEnforceSourcePrincipals Constraint שמבטיח שכל AuthorizationPolicies מגדיר חשבונות משתמשים מפורטים של מקור (מלבד "*"). רק שער הכניסה במרחב השמות asm-ingress הוא חריג לכלל הזה, כדי לקבל את התנועה ממשתמשי הקצה ולהפנות אותה לאפליקציית frontend של Online Boutique.

      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: AsmAuthzPolicyEnforceSourcePrincipals
      metadata:
        name: authz-source-principals-not-all
      spec:
        enforcementAction: deny
        match:
          kinds:
          - apiGroups:
            - security.istio.io
            kinds:
            - AuthorizationPolicy
          excludedNamespaces:
            - asm-ingress
  2. צפייה בסטטוס של Config Sync ב-RootSync:

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

    הפלט אמור להיראות כך:

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

    אם במקום status: SYNCED מופיע status: RECONCILING, צריך להמתין כמה דקות ולהריץ את gcloud alpha anthos config sync repo describe שוב.

  3. מריצים את הפקודה הבאה כדי לקבל מידע נוסף על ההפרה המשויכת:

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

    הפלט אמור להיראות כך:

    [
      {
        "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. כדי לפתור את הבעיה, פורסים את AuthorizationPolicy במרחב השמות istio-system.

    הפקודה הבאה משתמשת ב-sed כדי לעדכן את המניפסט acm-config.yaml כדי ש-סנכרון תצורות יפרוס את המשאבים המשויכים.

    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
    

    הפקודה הקודמת פורסת את מדיניות AuthorizationPolicy הבאה לדחיית כל התעבורה במרחב השמות istio-system:

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: deny-all
    spec:
      {}
  5. צופים בסטטוס של Config Sync עבור RootSync:

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

    הפלט אמור להיראות כך:

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

    אם מופיע status: RECONCILING במקום status: SYNCED, מחכים כמה דקות ומריצים שוב את gcloud alpha anthos config sync repo describe.

  6. מוודאים שנוצרו Constraints:

    kubectl get constraints
    

    שימו לב: יכול להיות שיעברו כמה דקות עד ש-Policy Controller יתחיל להעריך את ה-Constraints האלה. ממתינים ומריצים שוב את הפקודה kubectl get constraints עד שמקבלים ערכים בעמודה TOTAL-VIOLATIONS לכל שורה.

    הפלט אמור להיראות כך:

    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. נכנסים לאפליקציה Online Boutique מהדפדפן:

    echo http://${EXTERNAL_IP}
    

    אמורה להופיע השגיאה RBAC: access denied, שמאשרת שכלל ברירת המחדל לדחייה AuthorizationPolicy חל על כל הרשת.

  8. כדי לפתור את הבעיה, צריך לפרוס AuthorizationPolicies יותר גרנולריות בasm-ingress ובמרחבי השמות onlineboutique.

    הפקודה הבאה משתמשת ב-sed כדי לעדכן את המניפסט acm-config.yaml, כדי ש-Config Sync יפרוס את המשאבים המשויכים.

    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
    

    הפקודה הקודמת פורסת את המשאבים הבאים:

    • ‫AuthorizationPolicy במרחב השמות asm-ingress:

      apiVersion: security.istio.io/v1beta1
      kind: AuthorizationPolicy
      metadata:
        name: asm-ingressgateway
      spec:
        selector:
          matchLabels:
            asm: ingressgateway
        rules:
        - to:
          - operation:
              ports:
              - "8080"
    • AuthorizationPolicy לכל אפליקציה במרחב השמות onlineboutique. הנה דוגמה לאפליקציה cartservice:

      apiVersion: security.istio.io/v1beta1
      kind: AuthorizationPolicy
      metadata:
        name: cartservice
      spec:
        selector:
          matchLabels:
            app: cartservice
        rules:
        - from:
          - source:
              principals:
              - cluster.local/ns/onlineboutique/sa/frontend
              - cluster.local/ns/onlineboutique/sa/checkoutservice
          to:
          - operation:
              paths:
              - /hipstershop.CartService/AddItem
              - /hipstershop.CartService/GetCart
              - /hipstershop.CartService/EmptyCart
              methods:
              - POST
              ports:
              - "7070"
    • ‫ServiceAccount אחד לכל אפליקציה במרחבי השמות asm-ingress ו-onlineboutique כדי שלכל אפליקציה תהיה זהות ייחודית שמוערכת בתור principal ב-AuthorizationPolicies. הנה דוגמה לאפליקציית cartservice:

      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: cartservice
  9. בודקים את סטטוס סנכרון תצורות עבור RootSync ושני RepoSyncs:

    gcloud alpha anthos config sync repo describe
    

    הפלט אמור להיראות כך:

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

    אם מופיע status: RECONCILING במקום status: SYNCED, מחכים כמה דקות ומריצים שוב את gcloud alpha anthos config sync repo describe.

    כדי לראות רק את המידע של מאגר אחד, אפשר להשתמש בדגלים --sync-name ו---sync-namespace. כדי לראות את המשאבים המנוהלים בפירוט, אפשר להוסיף את הדגל --managed-resources. מידע נוסף זמין במאמר בנושא הצגת סטטוס סנכרון ההגדרות בכמה אשכולות.

  10. נכנסים שוב לאפליקציה Online Boutique מהדפדפן:

    echo http://${EXTERNAL_IP}
    

    אם תחכו כמה דקות, האתר אמור לפעול שוב כצפוי.

צפייה בסטטוס של תכונות האבטחה ב-GKE Enterprise

במסוף Google Cloud אפשר לראות את הסטטוס של תכונות האבטחה של GKE Enterprise, כולל מדיניות האימות וההרשאה.

  1. נכנסים לדף GKE Enterprise Security במסוף Google Cloud .

    מעבר לאבטחה ב-GKE Enterprise

    סיכום המדיניות מציג את הסטטוס של אבטחת האפליקציה, כולל בקרת גישה לשירות (AuthorizationPolicies) ו-mTLS.

  2. לוחצים על Policy Audit כדי לראות את סטטוס המדיניות של עומסי העבודה עבור האשכול ושני מרחבי השמות (asm-ingress ו-onlineboutique).

    הכרטיסים Service access control ו-mTLS status מספקים סקירה כללית ברמה גבוהה.

    סקירה כללית של בקרת הגישה לשירותים והסטטוס של mTLS

    ברשימה Workloads מוצגים הסטטוסים של בקרת הגישה לשירות ושל mTLS לכל עומס עבודה.

    רשימה מפורטת של כל עומס עבודה, בקרת הגישה לשירות שלו וסטטוס ה-mTLS שלו

עכשיו האשכול ורשת השירותים מאובטחים באמצעות Policy Controller ו-Config Sync.

הסרת המשאבים

כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים או להשאיר את הפרויקט ולמחוק את המשאבים הנפרדים.

מחיקת הפרויקט

    כדי למחוק Google Cloud פרויקט:

    gcloud projects delete PROJECT_ID

מחיקת משאבים בודדים

כדי למחוק את המשאבים הבודדים:

  1. מבטלים את הרישום של האשכול ב-Fleet:

    gcloud

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

    הפלט אמור להיראות כך:

    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.
    

    Config Connector

    kubectl delete -f ~/asm-acm-tutorial-dir/fleet-membership.yaml
    
  2. מוחקים את האשכול:

    gcloud

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

    כשמתבקשים, לוחצים על y. הפקודה הזו יכולה להימשך יותר מחמש דקות.

    הפלט אמור להיראות כך:

    Deleting cluster asm-acm-tutorial...done.
    Deleted [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-east4-a/clusters/asm-acm-tutorial].
    

    Config Connector

    kubectl delete -f ~/asm-acm-tutorial-dir/container-cluster.yaml
    
  3. מוחקים את הקבצים שיצרתם:

    rm -r ~/asm-acm-tutorial-dir
    

המאמרים הבאים