Como configurar contas de serviço especificadas pelo usuário

Nesta página, explicamos como configurar contas de serviço específicas de usuário para builds.

Por padrão, o Cloud Build usa uma conta de serviço especial para executar builds em seu nome. Essa conta de serviço é chamada de conta de serviço do Cloud Build e é criada automaticamente quando você ativa a API Cloud Build em um projeto do Google Cloud. Por padrão, essa conta de serviço tem várias permissões, como a capacidade de atualizar versões ou gravar registros.

Em vez de usar a conta de serviço padrão do Cloud Build, é possível especificar sua própria conta de serviço para executar builds em seu nome. É possível especificar qualquer número de contas de serviço por projeto. Manter várias contas de serviço permite que você conceda permissões diferentes a essas contas de serviço, dependendo das tarefas que elas executam. Por exemplo, é possível usar uma conta de serviço para criar e enviar imagens para o Container Registry e uma conta de serviço diferente para criar e enviar imagens para o Artifact Registry.

Antes de começar

  • Ative as APIs Cloud Build and IAM.

    Ative as APIs

  • Para usar os exemplos de linha de comando neste guia, instale e configure a CLI do Google Cloud.

  • Certifique-se de ter criado a conta de serviço a ser usada. Você precisa criar a conta no mesmo projeto do Cloud em que está executando as versões.

Configuração entre projetos

Se a conta de serviço especificada pelo usuário estiver em um projeto diferente daquele em que você está iniciando versões, conceda o acesso necessário:

  • No projeto que tem sua conta de serviço especificada pelo usuário, verifique se a restrição da política da organização iam.disableCrossProjectServiceAccountUsage não foi aplicada. Essa restrição é aplicada por padrão. Para desativar essa restrição de política da organização, execute o seguinte comando, em que SERVICE_ACCOUNT_PROJECT_ID é o projeto que contém sua conta de serviço especificada pelo usuário:

       gcloud resource-manager org-policies disable-enforce \
          iam.disableCrossProjectServiceAccountUsage \
          --project=SERVICE_ACCOUNT_PROJECT_ID
    
  • No projeto que tem sua conta de serviço especificada pelo usuário, conceda o papel roles/iam.serviceAccountTokenCreator para o agente de serviço do Cloud Build do projeto em que você está executando builds:

       gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
           --member="serviceAccount:BUILD_SERVICE_AGENT \
           --role="roles/iam.serviceAccountTokenCreator"
    

    Substitua os valores de marcador no comando acima pelo seguinte:

    • SERVICE_ACCOUNT_PROJECT_ID: o ID do projeto que contém a conta de serviço especificada pelo usuário.
    • BUILD_SERVICE_AGENT: o ID do e-mail do agente de serviço do formulário service-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com, em que BUILD_PROJECT_NUMBER é o número do projeto em que você está executando builds. Você encontra o número do projeto na página de configurações do projeto.

Limitações:

  • Seu projeto do Cloud precisa estar em uma organização do Google Cloud.
  • Você precisa iniciar builds na linha de comando usando gcloud builds submit ou gcloud beta builds triggers create. Para usar a página "Acionadores" no Console do Google Cloud, a conta de serviço especificada pelo usuário e o gatilho de compilação precisam estar no mesmo projeto.

Como configurar registros do build

Para especificar sua própria conta de serviço para builds, é preciso armazenar seus registros de compilação no Cloud Logging ou em um bucket do Cloud Storage criado pelo usuário. Não é possível armazenar seus registros no bucket de registros padrão.

Permissões do IAM obrigatórias

Para instruções sobre como conceder papéis do IAM a uma conta de serviço, consulte Como configurar o acesso aos recursos.

Como executar builds na linha de comando

  1. No diretório raiz do projeto, crie um arquivo de configuração do build do Cloud Build chamado cloudbuild.yaml ou cloudbuild.json.

  2. No arquivo de configuração de build:

    • Adicione um campo serviceAccount especificando o endereço de e-mail da sua conta de serviço.
    • Se você estiver armazenando os registros de criação no Logging, adicione um campo logging e defina o valor do campo como CLOUD_LOGGING_ONLY.
    • Se você estiver armazenando os registros da versão em um bucket do Cloud Storage criado pelo usuário:
      • Adicione um campo logging e defina o valor dele como GCS_ONLY.
      • Adicione um campo de logsBucket e defina o valor dele como o local do bucket do Cloud Storage.

    Não é possível armazenar registros no bucket de registros padrão ao usar a conta de serviço especificada pelo usuário.

    O seguinte arquivo de configuração de versão configura o Cloud Build para executar versões usando uma conta de serviço especificada pelo usuário e configura registros de criação para serem armazenados em um bucket do Cloud Storage criado pelo usuário:

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    serviceAccount: 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT'
    options:
      logging: GCS_ONLY
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
      "serviceAccount": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT",
      "options": {
        "logging": "GCS_ONLY"
      }
    }
    

    Substitua os valores de marcador no arquivo de configuração do build pelo seguinte:

    • LOGS_BUCKET_LOCATION é o bucket do Cloud Storage para armazenar registros do build. Por exemplo, gs://mylogsbucket.
    • PROJECT_NAME é o ID do projeto do Cloud em que você está executando o build.
    • SERVICE_ACCOUNT é o endereço de e-mail ou o ID exclusivo da conta de serviço que você quer especificar para builds. Por exemplo, my-sa-name@my-project-name.iam.gserviceaccount.com.
  3. Inicie a compilação usando o arquivo de configuração da compilação:

     gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

Substitua os valores dos marcadores nos comandos acima pelo seguinte:

  • CONFIG_FILE_PATH é o caminho para o arquivo de configuração do build;
  • SOURCE_DIRECTORY é o caminho ou o URL do código-fonte.

Se você não especificar CONFIG_FILE_PATH e SOURCE_DIRECTORY no comando gcloud builds submit, o Cloud Build presumirá que o arquivo de configuração do build e o código-fonte estão no diretório de trabalho atual.

Como executar builds usando gatilhos

  1. No repositório de origem, crie um arquivo de configuração do build do Cloud Build chamado cloudbuild.yaml ou cloudbuild.json.

  2. No arquivo de configuração de build:

    • Se você estiver armazenando os registros de criação no Logging, adicione um campo logging e defina o valor do campo como CLOUD_LOGGING_ONLY.
    • Se você estiver armazenando os registros da versão em um bucket do Cloud Storage criado pelo usuário:
      • Adicione um campo logging e defina o valor dele como GCS_ONLY.
      • Adicione um campo de logsBucket e defina o valor dele como o local do bucket do Cloud Storage.

    Não é possível armazenar registros no bucket de registros padrão ao usar a conta de serviço especificada pelo usuário.

    O seguinte arquivo de configuração da versão configura os registros do build para que sejam armazenados em um bucket do Cloud Storage criado pelo usuário:

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    options:
      logging: GCS_ONLY
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
      "options": {
        "logging": "GCS_ONLY"
      }
    }
    

    Substitua o valor do marcador no arquivo de configuração do build pelo seguinte:

    • LOGS_BUCKET_LOCATION é o bucket do Cloud Storage para armazenar registros do build. Por exemplo, gs://mylogsbucket.
  3. Especifique uma conta de serviço para usar com o gatilho de compilação:

    Console

    Para executar builds usando a IU do gatilho no Console do Google Cloud, a conta de serviço especificada pelo usuário precisa estar no mesmo projeto que seu gatilho de compilação. Para usar gatilhos com contas de serviço de vários projetos, crie o gatilho de compilação usando a ferramenta gcloud.

    1. Crie ou edite o gatilho de compilação.
    2. No campo Conta de serviço especifique sua conta de serviço. Se você não especificar uma conta de serviço, a conta de serviço do Cloud Build padrão será usada.
    3. Clique em Criar para salvar o gatilho de compilação.

    gcloud

    Ao criar um gatilho de compilação, especifique sua conta de serviço usando a sinalização --service-account. Se você não especificar uma conta de serviço, a conta de serviço do Cloud Build padrão será usada. No exemplo a seguir, o comando gcloud cria um gatilho de compilação quando o código-fonte está no GitHub:

     gcloud beta builds triggers create github \
        --name=TRIGGER_NAME \
        --repo-name=REPO_NAME \
        --repo-owner=REPO_OWNER \
        --branch-pattern=BRANCH_PATTERN
        --build-config=BUILD_CONFIG_FILE
        --service-account=SERVICE_ACCOUNT
        --project=BUILD_PROJECT
    

    Substitua os valores de marcador no arquivo de configuração do build pelo seguinte:

    • TRIGGER_NAME é o nome do gatilho de compilação.
    • REPO_NAME é o nome do repositório;
    • REPO_OWNER é o nome de usuário do proprietário do repositório.
    • BRANCH_PATTERN é o nome da ramificação no seu repositório para invocar o build.
    • TAG_PATTERN é o nome da tag no repositório para invocar o build.
    • BUILD_CONFIG_FILE é o caminho para seu arquivo de configuração da compilação.
    • SERVICE_ACCOUNT é o e-mail associado à conta de serviço.
    • BUILD_PROJECT é o projeto em que você está criando builds.

O gatilho de compilação invoca um build em resposta ao evento associado ao gatilho. Por exemplo, seu gatilho é executado quando o código-fonte é enviado para o repositório. Para saber mais sobre gatilhos, consulte Como criar e gerenciar gatilhos de compilação.

A seguir