Se não especificar uma conta de serviço, o Cloud Build pode selecionar automaticamente uma conta de serviço para executar compilações em seu nome. Esta conta de serviço pode ter autorizações desnecessariamente amplas para o seu exemplo de utilização, como acesso aos seus Cloud Source Repositories e a qualquer contentor do Cloud Storage no seu projeto.
Para melhorar a postura de segurança dos seus projetos e reduzir o potencial impacto de configurações incorretas ou utilizadores maliciosos, recomendamos que siga o princípio do privilégio mínimo. Ao adotar este princípio, pode atribuir a cada conta de serviço as autorizações e as funções com âmbito na tarefa que executa. Por exemplo, pode usar uma conta de serviço para criar e enviar imagens para o Artifact Registry, conforme mostrado no Google Cloud blogue.
Antes de começar
-
Enable the Cloud Build and IAM APIs.
Se planeia usar esta conta para criar e gerir credenciais, por exemplo, para criar credenciais de curta duração, ative a API IAM Service Account Credentials.
Enable the IAM Service Account Credentials API.
Crie uma conta de serviço, se ainda não o tiver feito.
Conceda autorizações de IAM
Para permitir que a sua compilação aceda aos serviços aos quais precisa de se ligar, tem de conceder algumas funções e autorizações:
Abra a página de definições do Cloud Build:
Abra a página de definições do Cloud Build
É apresentado o separador Autorizações da conta de serviço:
Na lista pendente, selecione a conta de serviço cujas funções quer alterar.
Defina o estado da função que quer adicionar como Ativar.
Se a função de que precisa para a sua pipeline de compilação não estiver listada aqui, pode conceder funções adicionais na página de configurações de IAM.
Pode encontrar informações adicionais sobre as funções normalmente necessárias para uma compilação em Configurar o acesso aos recursos do Cloud Build e na lista completa de funções e autorizações do IAM do Cloud Build.
Configure registos de compilação
Quando especifica a sua própria conta de serviço para compilações, tem de armazenar os registos de compilação no Cloud Logging ou num contentor do Cloud Storage criado pelo utilizador. Não pode armazenar os seus registos no contentor de registos predefinido.
Para armazenar os seus registos num segmento do Cloud Storage, siga as instruções em Armazene registos de compilação no segmento criado pelo utilizador. Certifique-se de que não definiu uma política de retenção no contentor de registos, uma vez que isso pode impedir que o Cloud Build escreva registos de compilação no contentor.
Para armazenar registos de compilação no Cloud Logging, conceda a função Logs Writer (
roles/logging.logWriter
) à conta de serviço.Para mais informações sobre onde armazenar os registos de compilação, consulte o artigo Escolha onde armazenar os registos de compilação.
Execute uma compilação com um ficheiro de configuração
Para executar manualmente uma compilação com um ficheiro de configuração:
No diretório raiz do projeto, crie um ficheiro de configuração de compilação do Cloud Build denominado
cloudbuild.yaml
oucloudbuild.json
.Adicione o campo
serviceAccount
e a configuração de registo preferida.Se estiver a armazenar os registos de compilação no Cloud Logging, adicione um campo
logging
e defina o valor do campo comoCLOUD_LOGGING_ONLY
.Se estiver a armazenar os registos de compilação num contentor do Cloud Storage criado pelo utilizador:
- Adicione um campo
logging
e defina o respetivo valor comoGCS_ONLY
. - Adicione um campo
logsBucket
e defina o respetivo valor como a localização do contentor do Cloud Storage.
- Adicione um campo
O exemplo seguinte configura o Cloud Build para executar compilações através de uma conta de serviço especificada pelo utilizador e configura os registos de compilação para serem armazenados num contentor do Cloud Storage criado pelo utilizador:
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 dos marcadores de posição no ficheiro de configuração de compilação pelo seguinte:
LOGS_BUCKET_LOCATION
é o contentor do Cloud Storage para armazenar registos de compilação. Por exemplo,gs://mylogsbucket
.PROJECT_ID
é o ID do Google Cloud projeto onde está a executar a compilação.SERVICE_ACCOUNT
é o endereço de email ou o ID exclusivo da conta de serviço que quer especificar para compilações. Por exemplo, um endereço de email de uma conta de serviço tem o seguinte aspeto:service-account-name@project-id.iam.gserviceaccount.com
.
Inicie a compilação com o ficheiro de configuração de compilação:
gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
Substitua os valores dos marcadores de posição nos comandos acima pelo seguinte:
CONFIG_FILE_PATH
é o caminho para o ficheiro de configuração de compilação.SOURCE_DIRECTORY
é o caminho ou o URL para o código-fonte.
Se não especificar um CONFIG_FILE_PATH e um SOURCE_DIRECTORY no comando
gcloud builds submit
, o Cloud Build assume que o ficheiro de configuração de compilação e o código-fonte estão no diretório de trabalho atual.
Execute compilações através de acionadores
Para executar uma compilação com acionadores do Cloud Build usando a sua própria conta de serviço, configure a opção de registo preferida e selecione a conta de serviço preferida quando criar o acionador.
No ficheiro de configuração de compilação:
Se estiver a armazenar os registos de compilação no Cloud Logging, adicione um campo
logging
e defina o valor do campo comoCLOUD_LOGGING_ONLY
.Se estiver a armazenar os registos de compilação num contentor do Cloud Storage criado pelo utilizador:
- Adicione um campo
logging
e defina o respetivo valor comoGCS_ONLY
. - Adicione um campo
logsBucket
e defina o respetivo valor como a localização do contentor do Cloud Storage.
- Adicione um campo
O exemplo seguinte configura os registos de compilação para serem armazenados num contentor do Cloud Storage criado pelo utilizador:
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
LOGS_BUCKET_LOCATION
pelo contentor do Cloud Storage para armazenar registos de compilação. Por exemplo,gs://mylogsbucket
.Especifique uma conta de serviço a usar com o seu acionador de compilação:
Consola
Para executar compilações através da página Acionador na Google Cloud consola, a conta de serviço especificada pelo utilizador tem de estar no mesmo projeto que o acionador de compilação. Para usar acionadores com contas de serviço entre projetos, crie o acionador de compilação com a ferramenta
gcloud
.No campo Conta de serviço, especifique a sua conta de serviço. Se não especificar uma conta de serviço, o Cloud Build usa a conta de serviço predefinida.
Clique em Criar para guardar o acionador de compilação.
gcloud
Quando criar um acionador de compilação, especifique a sua conta de serviço através da flag
--service-account
. No exemplo seguinte, o comandogcloud
cria um acionador de compilação que extrai código de um repositório Git:gcloud 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 dos marcadores de posição no ficheiro de configuração de compilação pelo seguinte:
TRIGGER_NAME
é o nome do acionador de compilação.REPO_NAME
é o nome do seu repositório.REPO_OWNER
é o nome de utilizador do proprietário do repositório.BRANCH_PATTERN
é o nome do ramo no seu repositório para invocar a compilação.TAG_PATTERN
é o nome da etiqueta no seu repositório para invocar a compilação.BUILD_CONFIG_FILE
é o caminho para o ficheiro de configuração de compilação.SERVICE_ACCOUNT
é a sua conta de serviço no formato/projects/PROJECT_ID/serviceAccounts/ACCOUNT_ID_OR_EMAIL
.BUILD_PROJECT
é o projeto onde está a começar a criar.
Configuração entre projetos
Se a conta de serviço especificada pelo utilizador estiver num projeto diferente do projeto onde está a iniciar as compilações, conceda o acesso necessário:
No projeto que tem a sua conta de serviço especificada pelo utilizador, certifique-se de que a
iam.disableCrossProjectServiceAccountUsage
restrição da política da organização não é aplicada. Esta restrição é aplicada por predefinição. Para desativar esta restrição da política da organização, execute o seguinte comando em que SERVICE_ACCOUNT_PROJECT_ID é o projeto que contém a conta de serviço especificada pelo utilizador:gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=SERVICE_ACCOUNT_PROJECT_ID
No projeto que tem a sua conta de serviço especificada pelo utilizador, conceda a função
roles/iam.serviceAccountTokenCreator
ao agente de serviço do Cloud Build do projeto onde está a executar compilações:gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member="serviceAccount:BUILD_SERVICE_AGENT" \ --role="roles/iam.serviceAccountTokenCreator"
Substitua os valores dos marcadores de posição no comando pelo seguinte:
SERVICE_ACCOUNT_PROJECT_ID
: o ID do projeto do projeto que contém a conta de serviço especificada pelo utilizador.BUILD_SERVICE_AGENT
: o ID do email do agente de serviço no formatoservice-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com
, em queBUILD_PROJECT_NUMBER
é o número do projeto do projeto onde está a executar compilações. Pode obter o número do projeto na página de definições do projeto.
Limitações:
O seu Google Cloud projeto tem de estar numa Google Cloud organização.
Tem de iniciar as compilações na linha de comandos com
gcloud builds submit
ougcloud builds triggers create
. Para usar a página Acionadores na Google Cloud consola, a conta de serviço especificada pelo utilizador e o acionador de compilação têm de estar no mesmo projeto.
O que se segue?
- Saiba mais sobre as autorizações e as funções de IAM do Cloud Build.
- Saiba como as alterações à conta de serviço afetam a forma como executa as suas compilações.