Guida rapida: gestisci le risorse con Config Controller

Scopri come creare un'istanza di Config Controller con Config Connector, Policy Controller e Config Sync preinstallati. Successivamente, scopri come utilizzare l'istanza completando le seguenti attività:

  • Utilizza Config Connector per creare e gestire una risorsa Cloud de Confiance by S3NS .
  • Crea un vincolo Policy Controller per applicare una policy e rilevare una violazione delle norme prima del deployment.
  • Configura GitOps configurando Config Sync per la sincronizzazione da un repository di esempio che contiene una risorsa Cloud de Confiance by S3NS .

Prima di iniziare

  1. Install the Google Cloud CLI.

  2. Configura gcloud CLI per utilizzare la tua identità federata.

    Per ulteriori informazioni, vedi Accedi a gcloud CLI con la tua identità federata.

  3. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  4. Create or select a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Cloud de Confiance project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Cloud de Confiance project you are creating.

    • Select the Cloud de Confiance project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Cloud de Confiance project name.

  5. Se utilizzi un progetto esistente per questa guida, verifica di disporre delle autorizzazioni necessarie per completare la guida. Se hai creato un nuovo progetto, disponi già delle autorizzazioni necessarie.

  6. Verify that billing is enabled for your Cloud de Confiance project.

  7. Enable the KRM, GKE, Resource Manager, and Service Usage APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable krmapihosting.googleapis.com container.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
  8. Ruoli obbligatori

    Per ottenere le autorizzazioni necessarie per gestire le risorse di esempio con Config Controller utilizzate in questa guida rapida, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:

    Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

    Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

    Crea un'istanza di Config Controller

    1. Nel terminale, crea un'istanza di Config Controller Autopilot:

      gcloud anthos config controller create cc-example \
          --location=us-central1 \
          --full-management
      

      Il completamento di questa operazione può richiedere fino a 15 minuti.

      L'output è il seguente:

      Created instance [cc-example].
      Fetching cluster endpoint and auth data.
      kubeconfig entry generated for krmapihost-cc-example.
      
    2. Verifica che l'istanza sia stata creata visualizzando l'elenco delle istanze di Config Controller:

      gcloud anthos config controller list --location=us-central1
      

      L'output è il seguente:

      NAME                 LOCATION                 STATE
      cc-example           us-central1              RUNNING
      

    Concedi l'autorizzazione richiesta per Config Controller

    In questa sezione concedi a Config Controller l'autorizzazione per gestire le risorse Cloud de Confiance by S3NS:

    1. Imposta una variabile di ambiente per l'email del account di servizio:

      export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \
          -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
      
    2. Crea l'associazione di policy:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member "serviceAccount:${SA_EMAIL}" \
          --role "roles/owner" \
          --project PROJECT_ID
      

      Sostituisci PROJECT_ID con l'ID progetto.

      L'output è simile al seguente:

      Updated IAM policy for project [PROJECT_ID].
      auditConfigs:
      - auditLogConfigs:
        - logType: ADMIN_READ
        - logType: DATA_READ
        - logType: DATA_WRITE
        service: gkehub.googleapis.com
      # Remainder of output omitted
      

    Utilizzare l'istanza di Config Controller

    Le sezioni seguenti ti presentano i modi in cui puoi utilizzare l'istanza di Config Controller.

    Crea una risorsa Cloud de Confiance by S3NS con Config Connector

    Con l'istanza di Config Controller, puoi sfruttare Config Connector per gestire molti Cloud de Confiance by S3NS servizi e risorse utilizzando gli strumenti e le API di Kubernetes. In questa sezione utilizzi Config Controller per creare una risorsa PubSubTopic.

    Per creare un argomento Pub/Sub utilizzando Config Connector, completa i seguenti passaggi:

    1. Utilizza Config Connector per abilitare l'API Pub/Sub:

      1. Utilizzando l'editor di testo che preferisci, crea un file denominato enable-pubsub.yaml e copia al suo interno il seguente codice YAML:

        # enable-pubsub.yaml
        apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1
        kind: Service
        metadata:
          name: pubsub.googleapis.com
          namespace: config-control
        spec:
          projectRef:
            external: projects/PROJECT_ID
        

        Sostituisci PROJECT_ID con l'ID progetto.

      2. Per abilitare l'API Pub/Sub, applica il manifest al cluster:

        kubectl apply -f enable-pubsub.yaml
        

        L'attivazione di questa API potrebbe richiedere diversi minuti.

    2. Utilizza Config Connector per creare un argomento Pub/Sub:

      1. Crea un file denominato pubsub-topic.yaml e copia al suo interno il seguente codice YAML:

        # pubsub-topic.yaml
        apiVersion: pubsub.cnrm.cloud.google.com/v1beta1
        kind: PubSubTopic
        metadata:
          annotations:
            cnrm.cloud.google.com/project-id: PROJECT_ID
          labels:
            label-one: "value-one"
          name: example-topic
          namespace: config-control
        
      2. Crea l'argomento Pub/Sub:

        kubectl apply -f pubsub-topic.yaml
        
    3. Verifica che Config Controller abbia creato la risorsa in Cloud de Confiance by S3NS visualizzando l'elenco degli argomenti Pub/Sub:

      gcloud pubsub topics list
      

      L'output è simile al seguente:

      ---
      name: projects/PROJECT_ID/topics/start-instance-event
      ---
      labels:
        label-one: value-one
        managed-by-cnrm: 'true'
      name: projects/PROJECT_ID/topics/example-topic
      

    Applicare un criterio con Policy Controller

    L'istanza di Config Controller ti consente di utilizzare Policy Controller e i vincoli di Policy Controller. Nell'ambito dell'installazione di Policy Controller, Config Controller installa automaticamente la libreria di modelli di vincoli. Puoi utilizzare i modelli di questa libreria per applicare una serie di controlli di sicurezza e conformità comuni alle tue istanze di Config Controller.

    In questa sezione crei un vincolo utilizzando il modello di vincolo GCPStorageLocationConstraintV1. Questo modello consente di limitare la località in cui puoi creare bucket Cloud Storage. Il vincolo che crei utilizzando questo modello limita la località a us-central1. Ti consigliamo di utilizzare questo vincolo per assicurarti che i bucket vengano creati in una regione che offre il miglior prezzo e il miglior rendimento.

    Per creare il vincolo:

    1. Crea un file denominato bucket-constraint.yaml e copia al suo interno il seguente codice YAML:

      # bucket-constraint.yaml
      apiVersion: constraints.gatekeeper.sh/v1beta1
      kind: GCPStorageLocationConstraintV1
      metadata:
        name: storage-only-in-us-central1
      spec:
        match:
          kinds:
          - apiGroups:
            - storage.cnrm.cloud.google.com
            kinds:
            - StorageBucket
        parameters:
          locations:
          - us-central1
      
    2. Crea il vincolo:

      kubectl apply -f bucket-constraint.yaml
      

      L'output è il seguente:

      gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
      
    3. Dimostra che il vincolo funziona provando a utilizzare Config Connector per creare una risorsa StorageBucket in asia-southeast1:

      1. Crea un file denominato asia-storage-bucket.yaml e copia al suo interno il seguente codice YAML:

        # asia-storage-bucket.yaml
        apiVersion: storage.cnrm.cloud.google.com/v1beta1
        kind: StorageBucket
        metadata:
          name: bucket-in-disallowed-location
          namespace: config-control
        spec:
          location: asia-southeast1
        
      2. Prova a creare il bucket Cloud Storage:

        kubectl apply -f asia-storage-bucket.yaml
        

        L'output è il seguente:

        Error from server (Forbidden): error when creating "STDIN": admission webhook "validation.gatekeeper.sh" denied the request: [storage-only-in-us-central1] Cloud Storage bucket <bucket-in-disallowed-location> uses a disallowed location <asia-southeast1>, allowed locations are ["us-central1"]
        

    Configurare GitOps con Config Sync

    Config Sync è un servizio GitOps che consente di sincronizzare l'istanza di Config Controller con configurazioni, policy e risorseCloud de Confiance by S3NS archiviate in un repository Git, un'immagine OCI o un repository Helm. Poiché Config Sync riconcilia continuamente lo stato di Config Controller con le configurazioni nella tua origine, puoi contribuire a garantire che le tue istanze abbiano una configurazione coerente.

    In questa sezione, sincronizzi l'istanza di Config Controller con un repository GitHub pubblico. Questo repository contiene un'altra risorsa PubSubTopic. Se sincronizzi l'istanza da questo repository, la risorsa viene creata e applicata automaticamente all'istanza. Potresti scegliere di creare le risorse utilizzando Config Sync (anziché applicare direttamente la risorsa) se vuoi utilizzare un flusso di lavoro GitOps.

    1. Per la sincronizzazione da GitHub, configura Cloud NAT. Devi farlo perché la tua istanza Config Controller è supportata da un cluster GKE privato e i nodi del cluster privato non hanno accesso a internet in uscita:

      1. Crea un router Cloud NAT. Ti serve questo router per configurare il gateway NAT.

        gcloud compute routers create cc-nat-router \
            --network default \
            --region us-central1
        

        L'output è simile al seguente:

        Creating router [cc-nat-router]...done.
        NAME           REGION       NETWORK
        cc-nat-router  us-central1  default
        
      2. Configura un gateway NAT sul router che hai creato nel passaggio precedente:

        gcloud compute routers nats create cc-nat-config \
            --router-region us-central1 \
            --router cc-nat-router \
            --nat-all-subnet-ip-ranges \
            --auto-allocate-nat-external-ips
        

        L'output è il seguente:

        Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
        
    2. Per configurare l'istanza di Config Controller in modo che esegua la sincronizzazione da un repository di esempio, crea un file denominato cc-rootsync.yaml e copia il seguente codice YAML:

      # cc-rootsync.yaml
      apiVersion: configsync.gke.io/v1beta1
      kind: RootSync
      metadata:
        name: root-sync
        namespace: config-management-system
      spec:
        sourceFormat: unstructured
        git:
          repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
          branch: main
          dir: config-controller-quickstart
          auth: none
      
    3. Applica la configurazione:

      kubectl apply -f cc-rootsync.yaml
      

      Dopo che la tua istanza esegue la sincronizzazione dal repository, Config Sync crea l'argomento Pub/Sub e lo applica all'istanza di Config Controller.

    4. Verifica che Config Sync stia sincronizzando il repository Git con l'istanza di Config Controller:

      nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-example
      

      L'output è simile al seguente:

      *gke_PROJECT_ID_us-central1_krmapihost-cc-example
      --------------------
      <root>:root-sync                         https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-controller-quickstart@main
      SYNCED @ 2023-01-10 18:31:02 +0000 UTC   715b4295d3eac07b057cce2543275c1ee104cad8
      Managed resources:
         NAMESPACE        NAME                                                               STATUS   SOURCEHASH
         config-control   pubsubtopic.pubsub.cnrm.cloud.google.com/pubsub-topic-sample-sync  Current   715b429
         config-control   service.serviceusage.cnrm.cloud.google.com/pubsub.googleapis.com   Current   715b429
      

      Se non vedi questo output, attendi un paio di minuti e riprova.

    5. Verifica che Config Controller abbia creato la risorsa:

      gcloud pubsub topics list
      

      L'output è simile al seguente:

      name: projects/PROJECT_ID/topics/start-instance-event
      ---
      labels:
        managed-by-cnrm: 'true'
      name: projects/PROJECT_ID/topics/sample-topic
      ---
      labels:
        managed-by-cnrm: 'true'
      name: projects/PROJECT_ID/topics/pubsub-topic-sample-sync
      ---
      labels:
        label-one: value-one
        managed-by-cnrm: 'true'
      name: projects/PROJECT_ID/topics/example-topic
      

      In questo output, puoi vedere l'argomento Pub/Sub che hai creato nella sezione Crea un'istanza di Config Controller e quello che hai creato sincronizzando l'istanza con un repository GitHub.

    Esegui la pulizia

    Per evitare che al tuo account Cloud de Confiance by S3NS vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

    Elimina il progetto

      Delete a Cloud de Confiance project:

      gcloud projects delete PROJECT_ID

    Elimina le singole risorse

    1. Elimina la risorsa Config Connector PubSubTopic:

      kubectl delete -f pubsub-topic.yaml
      
    2. Elimina il vincolo di Policy Controller:

      kubectl delete -f bucket-constraint.yaml
      
    3. Elimina il router NAT:

      gcloud compute routers delete cc-nat-router \
          --project=PROJECT_ID \
          --region=us-central1
      

      Premi y quando richiesto.

    4. Elimina la risorsa Pub/Sub creata da Config Sync:

      kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
      
    5. Elimina la risorsa RootSync:

      kubectl delete rootsync root-sync -n config-management-system
      
    6. Utilizzando l'editor di testo che preferisci, elimina tutti i file YAML che hai creato:

      • enable-pubsub.yaml
      • pubsub-topic.yaml
      • bucket-constraint.yaml
      • asia-storage-bucket.yaml
      • cc-rootsync.yaml
    7. Elimina l'istanza Config Controller:

      gcloud anthos config controller delete --location=us-central1 cc-example
      

      Premi y quando richiesto.

    Passaggi successivi