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

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

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

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

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

מטרות

  • יוצרים אשכול Google Kubernetes Engine ‏ (GKE) ורושמים את האשכול בצי.
  • מתקינים את Policy Controller,‏ סנכרון תצורות ו-Cloud Service Mesh באשכול.
  • הגדרת סנכרון תצורות לסנכרון של כמה מאגרי מידע
  • כדאי ליישם שיטות מומלצות כדי לפרוס הגדרות, אפליקציות ומשאבי Istio באמצעות סנכרון תצורות.
  • פריסת הגדרות של אשכולות, אפליקציות לדוגמה של Online Boutique ושער כניסה (ingress) באמצעות סנכרון תצורות.
  • כדי לאכוף את השיטות המומלצות הבאות לאבטחה, אפשר להשתמש בחבילת המדיניות של 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 או יוצרים אותו.

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

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

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

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

הכנת הסביבה

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

  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. ‫Fleets הם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 שאוחזר קודם.

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

  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 ראשון, מכיל את כל המשאבים שנדרשים לפריסת שער כניסה (ingress gateway) ולאבטחה הדרגתית שלו במהלך ההדרכה הזו.
  • online-boutique, כRepoSync שני, מכיל את כל המשאבים שנדרשים לפריסת אפליקציות Online Boutique ולאבטחה הדרגתית שלהן לאורך המדריך הזה.

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

אחרי שיצרתם ורשמתם את האשכול, אתם יכולים להתקין את Config Sync, ‏ 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 בצי.

    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 ו-סנכרון תצורות מותקנים באשכול. לאחר מכן,‏ סנכרון תצורות מתחיל לסנכרן את כל ההגדרות של ברירת המחדל 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 ו-סנכרון תצורות בוצעה בהצלחה, בודקים את הסטטוס:

    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 ושער כניסה לניהול תעבורת נתונים נכנסת (ingress).

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

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

    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. בודקים את סטטוס סנכרון התצורות ב-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: SYNCED מופיע status: RECONCILING, צריך להמתין כמה דקות ולהריץ את 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. כדי לוודא שאפליקציית Online Boutique נפרסה בהצלחה, נכנסים לכתובת ה-IP מהדפדפן:

    echo http://${EXTERNAL_IP}
    

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

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

אכיפה של החדרת שרתי proxy מסוג sidecar

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

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

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

    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 ברשת יכיל את התווית הספציפית להזרקת שרת proxy מסוג sidecar של 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. צופים בסטטוס של סנכרון תצורות עבור 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: SYNCED מופיע status: RECONCILING, צריך להמתין כמה דקות ולהריץ את 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. צופים בסטטוס של סנכרון תצורות עבור 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. כדי למנוע מכל השירותים ברשת לקבל תנועה לא מוצפנת, צריך להגדיר מדיניות ברמת הרשת עם מצב mTLS שמוגדר ל-STRICT.PeerAuthentication כשפורסים את המדיניות, מישור הבקרה מקצה באופן אוטומטי אישורי 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. צופים בסטטוס של סנכרון תצורות עבור 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: SYNCED מופיע status: RECONCILING, צריך להמתין כמה דקות ולהריץ את 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 מגדיר ישויות מקור גרנולריות (חוץ מ-'*'). רק שער הכניסה (ingress) במרחב השמות 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. צופים בסטטוס של סנכרון תצורות עבור 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. צופים בסטטוס של סנכרון תצורות עבור 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: SYNCED מופיע status: RECONCILING, צריך להמתין כמה דקות ולהריץ את 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 default deny חלה על כל הרשת.

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

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

    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: SYNCED מופיע status: RECONCILING, צריך להמתין כמה דקות ולהריץ את gcloud alpha anthos config sync repo describe שוב.

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

  10. עוברים שוב לאפליקציית Online Boutique מהדפדפן:

    echo http://${EXTERNAL_IP}
    

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

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

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

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

    מעבר אל GKE Enterprise Security

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

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

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

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

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

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

עכשיו האשכול והרשת שלכם מאובטחים באמצעות Policy Controller וסנכרון תצורות.

הסרת המשאבים

כדי להימנע מחיובים בחשבון 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
    

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