Início rápido: faça a gestão de recursos com o Config Controller

Saiba como criar uma instância do Config Controller pré-instalada com o Config Connector, o Policy Controller e o Config Sync. Em seguida, saiba como usar a sua instância concluindo as seguintes tarefas:

  • Use o Config Connector para criar e gerir um Cloud de Confiance by S3NS recurso.
  • Crie uma restrição do Policy Controller para aplicar uma política e detetar uma violação de política antes da implementação.
  • Configure o GitOps configurando o Config Sync para sincronizar a partir de um repositório de exemplo que contenha um recurso. Cloud de Confiance by S3NS

Antes de começar

  1. Install the Google Cloud CLI.

  2. Configure a CLI gcloud para usar a sua identidade federada.

    Para mais informações, consulte o artigo Inicie sessão na CLI gcloud com a sua identidade federada.

  3. Para inicializar a CLI gcloud, execute o seguinte 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 estiver a usar um projeto existente para este guia, verifique se tem as autorizações necessárias para concluir este guia. Se criou um novo projeto, já tem as autorizações necessárias.

  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. Funções necessárias

    Para receber as autorizações de que precisa para gerir os recursos de exemplo com o Config Controller usado neste início rápido, peça ao seu administrador para lhe conceder as seguintes funções do IAM no seu projeto:

    Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

    Crie uma instância do Config Controller

    1. No terminal, crie uma instância do controlador de configuração do Autopilot:

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

      Esta operação pode demorar até 15 minutos a ser concluída.

      O resultado é o seguinte:

      Created instance [cc-example].
      Fetching cluster endpoint and auth data.
      kubeconfig entry generated for krmapihost-cc-example.
      
    2. Verifique se a sua instância foi criada vendo a lista de instâncias do Config Controller:

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

      O resultado é o seguinte:

      NAME                 LOCATION                 STATE
      cc-example           us-central1              RUNNING
      

    Conceda a autorização necessária ao controlador de configuração

    Nesta secção, concede autorização ao Config Controller para gerir Cloud de Confiance by S3NS recursos:

    1. Defina uma variável de ambiente para o email da sua conta de serviço:

      export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \
          -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
      
    2. Crie a associação de políticas:

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

      Substitua PROJECT_ID pelo ID do seu projeto.

      O resultado é semelhante ao seguinte:

      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
      

    Use a sua instância do Config Controller

    As secções seguintes apresentam as formas como pode usar a sua instância do Config Controller.

    Crie um Cloud de Confiance by S3NS recurso com o Config Connector

    Com a sua instância do Config Controller, pode tirar partido do Config Connector para gerir muitos Cloud de Confiance by S3NS serviços e recursos através das ferramentas e das APIs do Kubernetes. Nesta secção, usa o Config Controller para criar um recurso PubSubTopic.

    Para criar um tópico Pub/Sub com o Config Connector, conclua os seguintes passos:

    1. Use o Config Connector para ativar a API Pub/Sub:

      1. Com o seu editor de texto preferido, crie um ficheiro com o nome enable-pubsub.yaml e copie o seguinte YAML para o mesmo:

        # 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
        

        Substitua PROJECT_ID pelo ID do seu projeto.

      2. Para ativar a API Pub/Sub, aplique o manifesto ao seu cluster:

        kubectl apply -f enable-pubsub.yaml
        

        A ativação desta API pode demorar vários minutos.

    2. Use o Config Connector para criar um tópico Pub/Sub:

      1. Crie um ficheiro com o nome pubsub-topic.yaml e copie o seguinte YAML para o ficheiro:

        # 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. Crie o tópico Pub/Sub:

        kubectl apply -f pubsub-topic.yaml
        
    3. Confirme que o Config Controller criou o seu recurso em Cloud de Confiance by S3NS ao ver a lista de tópicos Pub/Sub:

      gcloud pubsub topics list
      

      O resultado é semelhante ao seguinte:

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

    Aplique uma política com o Policy Controller

    A sua instância do Config Controller permite-lhe usar o Policy Controller e as restrições do Policy Controller. Como parte da instalação do Policy Controller, o Config Controller instala automaticamente a biblioteca de modelos de restrições. Pode usar os modelos nesta biblioteca para aplicar uma variedade de controlos de segurança e conformidade comuns nas suas instâncias do Config Controller.

    Nesta secção, cria uma restrição através do modelo de restrição GCPStorageLocationConstraintV1. Este modelo permite-lhe restringir a localização na qual pode criar contentores do Cloud Storage. A restrição que cria com este modelo restringe a localização a us-central1. Pode usar esta restrição para garantir que os contentores estão a ser criados numa região que oferece o melhor preço e desempenho.

    Para criar a restrição:

    1. Crie um ficheiro com o nome bucket-constraint.yaml e copie o seguinte YAML para o ficheiro:

      # 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. Crie a restrição:

      kubectl apply -f bucket-constraint.yaml
      

      O resultado é o seguinte:

      gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
      
    3. Demonstre que a restrição está a funcionar tentando usar o Config Connector para criar um recurso StorageBucket em asia-southeast1:

      1. Crie um ficheiro com o nome asia-storage-bucket.yaml e copie o seguinte YAML para o mesmo:

        # 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. Tente criar o contentor do Cloud Storage:

        kubectl apply -f asia-storage-bucket.yaml
        

        O resultado é o seguinte:

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

    Configure o GitOps com o Config Sync

    O Config Sync é um serviço GitOps que lhe permite sincronizar a sua instância do Config Controller com configurações, políticas e Cloud de Confiance by S3NS recursos armazenados num repositório Git, numa imagem OCI ou num repositório Helm. Uma vez que o Config Sync reconcilia continuamente o estado do Config Controller com as configurações na sua origem, pode ajudar a garantir que as suas instâncias têm uma configuração consistente.

    Nesta secção, sincroniza a sua instância do Config Controller com um repositório público do GitHub. Este repositório contém outro recurso PubSubTopic. Ao sincronizar a sua instância a partir deste repositório, o recurso é criado e aplicado automaticamente à sua instância. Pode optar por criar os seus recursos através da sincronização de configuração (em vez de aplicar o recurso diretamente) se quiser usar um fluxo de trabalho GitOps.

    1. Para sincronizar a partir do GitHub, configure o Cloud NAT. Tem de o fazer porque a sua instância do Config Controller é suportada por um cluster do GKE privado, e os nós do cluster privado não têm acesso à Internet de saída:

      1. Crie um router NAT da nuvem. Precisa deste router para configurar o gateway NAT.

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

        O resultado é semelhante ao seguinte:

        Creating router [cc-nat-router]...done.
        NAME           REGION       NETWORK
        cc-nat-router  us-central1  default
        
      2. Configure um gateway NAT no router que criou no passo anterior:

        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
        

        O resultado é o seguinte:

        Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
        
    2. Para configurar a instância do Config Controller para sincronizar a partir de um repositório de exemplo, crie um ficheiro denominado cc-rootsync.yaml e copie o seguinte YAML para o mesmo:

      # 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. Aplique a configuração:

      kubectl apply -f cc-rootsync.yaml
      

      Depois de a instância estar a sincronizar a partir do repositório, o Config Sync cria o tópico Pub/Sub e aplica-o à instância do Config Controller.

    4. Verifique se o Config Sync está a sincronizar o repositório Git com a instância do Config Controller:

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

      O resultado é semelhante ao seguinte:

      *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 não vir este resultado, aguarde alguns minutos e tente novamente.

    5. Verifique se o Config Controller criou o seu recurso:

      gcloud pubsub topics list
      

      O resultado é semelhante ao seguinte:

      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
      

      Neste resultado, pode ver o Pub/Sub que criou na secção Crie uma instância do Config Controller e o que criou sincronizando a sua instância com um repositório do GitHub.

    Limpar

    Para evitar incorrer em custos na sua Cloud de Confiance by S3NS conta pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

    Elimine o projeto

      Delete a Cloud de Confiance project:

      gcloud projects delete PROJECT_ID

    Elimine os recursos individuais

    1. Elimine o recurso do Config Connector PubSubTopic:

      kubectl delete -f pubsub-topic.yaml
      
    2. Elimine a restrição do Policy Controller:

      kubectl delete -f bucket-constraint.yaml
      
    3. Elimine o router NAT:

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

      Prima y quando lhe for pedido.

    4. Elimine o recurso do Pub/Sub criado pelo Config Sync:

      kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
      
    5. Elimine o recurso RootSync:

      kubectl delete rootsync root-sync -n config-management-system
      
    6. Com o seu editor de texto preferido, elimine todos os ficheiros YAML que criou:

      • enable-pubsub.yaml
      • pubsub-topic.yaml
      • bucket-constraint.yaml
      • asia-storage-bucket.yaml
      • cc-rootsync.yaml
    7. Elimine a instância do Config Controller:

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

      Prima y quando lhe for pedido.

    O que se segue?