Receba eventos através dos registos de auditoria do Google Cloud (CLI gcloud)

Este início rápido mostra como configurar um serviço do Google Kubernetes Engine (GKE) como destino para receber eventos do Cloud Storage através do Eventarc.

Neste início rápido, vai:

  1. Configure uma conta de serviço para que o Eventarc possa obter eventos e encaminhá-los para o destino.
  2. Crie um contentor do Cloud Storage para ser a origem de eventos.
  3. Crie um cluster do GKE.
  4. Inicialize os destinos do GKE no Eventarc.
  5. Implemente um serviço do GKE que receba eventos.
  6. Crie um acionador do Eventarc que envie eventos do Cloud Storage para o serviço GKE.
  7. Carregue um ficheiro para o contentor do Cloud Storage para gerar um evento e ver o evento nos registos do pod do GKE.

Antes de começar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. Create or select a Google Cloud 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 (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

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

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Install the Google Cloud CLI.

  8. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  9. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  10. Create or select a Google Cloud 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 (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

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

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  11. Verify that billing is enabled for your Google Cloud project.

  12. Atualize os componentes da CLI do Google Cloud:
    gcloud components update
  13. Ative as APIs Eventarc, Resource Manager e Google Kubernetes Engine:
    gcloud services enable eventarc.googleapis.com \
        cloudresourcemanager.googleapis.com \
        container.googleapis.com
  14. Defina as variáveis de configuração usadas neste início rápido:
    PROJECT_ID=$(gcloud config get-value project)
    TRIGGER_SA=eventarc-sa
    CLUSTER_NAME=events-cluster
    SERVICE_NAME=hello-gke
  15. Se for o criador do projeto, é-lhe atribuída a função básica de proprietário (roles/owner). Por predefinição, esta função do Identity and Access Management (IAM) inclui as autorizações necessárias para acesso total à maioria dos Google Cloud recursos e pode ignorar este passo.

    Se não for o criador do projeto, as autorizações necessárias têm de ser concedidas no projeto ao principal adequado. Por exemplo, um principal pode ser uma Conta Google (para utilizadores finais) ou uma conta de serviço (para aplicações e cargas de trabalho de computação). Para mais informações, consulte a página Funções e autorizações do destino de eventos.

    Autorizações necessárias

    Para receber as autorizações de que precisa para concluir este início rápido, peça ao seu administrador que lhe conceda as seguintes funções da 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.

  16. Tome nota da conta de serviço predefinida do Compute Engine, uma vez que a vai anexar a um acionador do Eventarc para representar a identidade do acionador para fins de teste. Esta conta de serviço é criada automaticamente depois de ativar ou usar um Google Cloud serviço que usa o Compute Engine e com o seguinte formato de email:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Substitua PROJECT_NUMBER pelo seu Google Cloud número do projeto. Pode encontrar o número do projeto na página Boas-vindas da Google Cloud consola ou executando o seguinte comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    Para ambientes de produção, recomendamos vivamente que crie uma nova conta de serviço e lhe conceda uma ou mais funções do IAM que contenham as autorizações mínimas necessárias e siga o princípio do privilégio mínimo.

  17. Conceda a função de subscritor do Pub/Sub (roles/pubsub.subscriber) no projeto à conta de serviço predefinida do Compute Engine para que o acionador do Eventarc possa obter eventos do Pub/Sub.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/pubsub.subscriber
  18. Conceda a função de recetor de eventos do Eventarc (roles/eventarc.eventReceiver) no projeto à conta de serviço predefinida do Compute Engine para que o acionador do Eventarc possa receber eventos de fornecedores de eventos.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
  19. Se ativou o agente do serviço Cloud Pub/Sub a 8 de abril de 2021 ou antes, para suportar pedidos de envio autenticados do Pub/Sub, conceda a função de criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator) ao agente do serviço. Caso contrário, esta função é concedida por predefinição:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  20. Para o Google Cloud Storage, ative os tipos de registos para estes serviços: Admin Read, Data Read e Data Write:

    1. Leia a política IAM do seu projeto e armazene-a num ficheiro:
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. Edite a sua política em `/tmp/policy.yaml`, adicionando ou alterando *apenas* a configuração dos registos de auditoria de acesso a dados. Aviso: tem de preservar as secções `bindings:` e `etag:` sem alterações. Caso contrário, o seu projeto pode ficar inutilizável.
      auditConfigs:
        - auditLogConfigs:
          - logType: ADMIN_READ
          - logType: DATA_WRITE
          - logType: DATA_READ
          service: storage.googleapis.com
        bindings:
        - members:
          - user:EMAIL_ADDRESS
          role: roles/owner
        etag: BwW_bHKTV5U=
        version: 1
      Substitua EMAIL_ADDRESS pelo seu endereço de email.
    3. Escreva a sua nova Política IAM:
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      Se o comando anterior comunicar um conflito com outra alteração, então repita estes passos, começando por ler a política de IAM do projeto.
  21. Crie um contentor do Cloud Storage

    Este início rápido usa o Cloud Storage como origem de eventos. Crie um contentor do Cloud Storage:

    gcloud storage buckets create  gs://events-quickstart-$(gcloud config get-value project) --location=us-central1

    Depois de criar a origem de eventos, pode implementar o serviço de receção de eventos no GKE.

    Crie um cluster do GKE

    Um cluster do GKE consiste em, pelo menos, uma máquina do painel de controlo do cluster e várias máquinas de trabalho denominadas nós. Os nós são instâncias de máquinas virtuais (VMs) do Compute Engine que executam os processos do Kubernetes necessários para os tornar parte do cluster. Implementa aplicações em clusters e as aplicações são executadas nos nós.

    Crie um cluster do Autopilot com o nome events-cluster:

    gcloud container clusters create-auto $CLUSTER_NAME --region us-central1

    A criação do cluster pode demorar vários minutos a ser concluída. Depois de criar o cluster, o resultado deve ser semelhante ao seguinte:

    Creating cluster events-cluster...done.
    Created [https://container.googleapis.com/v1/projects/MY_PROJECT/zones/us-central1/clusters/events-cluster].
    [...]
    STATUS: RUNNING
    

    Esta ação cria um cluster do GKE denominado events-cluster num projeto com um Google Cloud ID do projeto de MY_PROJECT.

    Ative os destinos do GKE

    Para cada acionador que segmenta um serviço do GKE, o Eventarc cria um componente de encaminhamento de eventos que extrai eventos do Pub/Sub e encaminha-os para o destino. Para criar o componente e gerir recursos no cluster do GKE, conceda autorizações ao agente de serviço do Eventarc:

    1. Ative os destinos do GKE para o Eventarc:

      gcloud eventarc gke-destinations init
    2. No comando para associar as funções necessárias, introduza y.

      As seguintes funções estão associadas à conta de serviço:

      • compute.viewer
      • container.developer
      • iam.serviceAccountAdmin

    Crie um destino de serviço do GKE

    Implemente um serviço do GKE que receba e registe eventos através de uma imagem pré-criada, us-docker.pkg.dev/cloudrun/container/hello:

    1. O Kubernetes usa um ficheiro YAML denominado kubeconfig para armazenar informações de autenticação de clusters para o kubectl. Atualize o ficheiro kubeconfig com as credenciais e as informações do ponto final para apontar kubectl para o cluster do GKE:

      gcloud container clusters get-credentials $CLUSTER_NAME \
          --region us-central1
      
    2. Crie uma implementação do Kubernetes:

      kubectl create deployment $SERVICE_NAME \
          --image=us-docker.pkg.dev/cloudrun/container/hello
      
    3. Exponha-o como um serviço do Kubernetes:

      kubectl expose deployment $SERVICE_NAME \
          --type ClusterIP --port 80 --target-port 8080
      

    Crie um acionador do Eventarc

    Quando carrega um ficheiro para o Cloud Storage, o acionador do Eventarc envia eventos do Cloud Storage para o serviço do GKE.hello-gke

    1. Crie um acionador de registos de auditoria do Cloud:

      gcloud eventarc triggers create my-gke-trigger \
          --location="us-central1" \
          --destination-gke-cluster="events-cluster" \
          --destination-gke-location="us-central1" \
          --destination-gke-namespace="default" \
          --destination-gke-service="hello-gke" \
          --destination-gke-path="/" \
          --event-filters="type=google.cloud.audit.log.v1.written" \
          --event-filters="serviceName=storage.googleapis.com" \
          --event-filters="methodName=storage.objects.create" \
          --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"
      

      Esta ação cria um acionador denominado my-gke-trigger.

    2. Confirme que o acionador foi criado com êxito:

      gcloud eventarc triggers list

      O resultado deve ser semelhante ao seguinte:

      NAME: my-gke-trigger
      TYPE: google.cloud.audit.log.v1.written
      DESTINATION: GKE: hello-gke
      ACTIVE: By 20:39:43
      LOCATION: us-central1
      

    Gere e veja um evento

    Carregue um ficheiro de texto para o Cloud Storage para gerar um evento e acionar o serviço GKE. Em seguida, pode ver a mensagem do evento nos registos do pod.

    1. Carregue um ficheiro de texto para o Cloud Storage:

      echo "Hello World" > random.txt
      gcloud storage cp random.txt gs://events-quickstart-$(gcloud config get-value project)/random.txt

      O carregamento gera um evento e o pod do GKE regista a mensagem do evento.

    2. Para ver a mensagem do evento:

      1. Encontre o ID do pod:

        kubectl get pods

        O resultado deve ser semelhante ao seguinte:

        NAME                                         READY   STATUS             RESTARTS   AGE
        hello-gke-645964f578-2mjjt                   1/1     Running            0          35s

        Copie o NAME do pod para usar no passo seguinte.

      2. Verifique os registos do pod:

        kubectl logs NAME

        Substitua NAME pelo nome do grupo de anúncios que copiou.

      3. Procure uma entrada de registo semelhante a:

        2022/02/24 22:23:49 Hello from Cloud Run! The container started successfully and is listening for HTTP requests on $PORT
        {"severity":"INFO","eventType":"google.cloud.audit.log.v1.written","message":"Received event of type google.cloud.audit.log.v1.written. [...]}
        

    Limpar

    Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou.

    Pode:

    1. Elimine o contentor do Cloud Storage.

    2. Elimine o acionador do Eventarc.

    3. Elimine o cluster do GKE.

    Em alternativa, pode eliminar o seu Google Cloud projeto para evitar incorrer em custos. A eliminação do seu Google Cloud projeto interrompe a faturação de todos os recursos usados nesse projeto.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

    Se planeia explorar vários tutoriais e inícios rápidos, a reutilização de projetos pode ajudar a evitar exceder os limites de quota de projetos.

    O que se segue?

    Receba eventos através do Pub/Sub (CLI do Google Cloud)