Caso sua arquitetura use vários serviços, é provável que você precise de credenciais para permitir a comunicação entre serviços. O Cloud Build oferece suporte integrado ao OpenID Connect (OIDC) padrão para autenticação e autorização seguras entre serviços.
É possível usar o Cloud Build para gerar tokens de ID. Com esses tokens, é possível chamar endpoints seguros no Cloud Build.
Por exemplo, se você estiver executando um aplicativo de plataforma sem servidor, como funções do Cloud Run, Cloud Run ou App Engine, será possível interagir com segurança com o aplicativo nos workloads do Cloud Build.
Antes de começar
-
Enable the Cloud Build and IAM APIs.
Se você pretende usar essa conta para criar credenciais de curta duração, também é necessário ativar a API Service Account Credentials do IAM.
Para usar os exemplos de linha de comando neste guia, instale e configure a Google Cloud CLI.
Certifique-se de ter criado a conta de serviço a ser usada. É necessário criar a conta no mesmo projeto do Google Cloud em que você está executando as versões.
Permissões do IAM obrigatórias
A conta de serviço especificada pelo usuário precisa ter o
iam.serviceAccounts.getOpenIdToken
.
- Conceda o papel Criador de token de identidade do OpenID Connect da conta de serviço (
roles/iam.serviceAccountOpenIdTokenCreator
) à conta de serviço especificada pelo usuário no projeto em que você criou a conta de serviço.
Para instruções sobre como conceder funções do IAM a uma conta de serviço, consulte Gerenciar o acesso a contas de serviço.
Métodos para receber um token de ID
Há duas maneiras de configurar as etapas de build para receber tokens de ID:
- usar a CLI gcloud
- enviar uma solicitação direta ao servidor de metadados
Receber um token de ID pelo gcloud
Nesta seção, o snippet de código a seguir demonstra como usar a CLI gcloud para receber tokens de ID:
YAML
steps:
- name: 'gcr.io/cloud-builders/gcloud'
script: 'gcloud auth print-identity-token --audiences ${_TOKEN_AUDIENCE} > /workspace/identity_token.txt'
env:
- _TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}
service_account: '$_SERVICE_ACCOUNT'
substitutions:
_TOKEN_AUDIENCE: 'TOKEN_AUDIENCE'
_SERVICE_ACCOUNT_ID: 'SERVICE_ACCOUNT_ID'
_SERVICE_ACCOUNT: 'projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}'
logsBucket: 'LOGS_BUCKET_LOCATION'
options:
logging: GCS_ONLY
dynamic_substitutions: true
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/gcloud",
"script": "gcloud auth print-identity-token --audiences ${_TOKEN_AUDIENCE} > /workspace/identity_token.txt"
"env": [
"_TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}"
]
}
],
"service_account": "$_SERVICE_ACCOUNT",
"substitutions": {
"_TOKEN_AUDIENCE": "TOKEN_AUDIENCE",
"_SERVICE_ACCOUNT_ID": "SERVICE_ACCOUNT_ID",
"_SERVICE_ACCOUNT": "projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}"
},
"logsBucket": "LOGS_BUCKET_LOCATION",
"options": {
"logging": "GCS_ONLY",
"dynamic_substitutions": true
}
}
Substitua:
TOKEN_AUDIENCE
é o URL ou público-alvo das para conseguir o token de ID, comohttp://www.example.com
.SERVICE_ACCOUNT_ID
é o endereço de e-mail ou o ID exclusivo da conta de serviço especificada pelo usuário. Por exemplo,service-account-name@project-id.iam.gserviceaccount.com
.LOGS_BUCKET_LOCATION
é o bucket do Cloud Storage. para armazenar registros de build. Por exemplo,gs://mylogsbucket
.
Enviar uma solicitação direta ao servidor de metadados
Nesta seção, o snippet de código a seguir demonstra como fazer uma solicitação solicitação ao servidor de metadados para receber tokens de ID:
YAML
steps:
- name: 'gcr.io/cloud-builders/curl'
id: 'printTokenFromCurl'
script: |
curl -H 'Metadata-Flavor: Google' http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=${_TOKEN_AUDIENCE} -o /workspace/identity_token.txt
env:
- _TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}
service_account: '$_SERVICE_ACCOUNT'
substitutions:
_TOKEN_AUDIENCE: 'TOKEN_AUDIENCE'
_SERVICE_ACCOUNT_ID: 'SERVICE_ACCOUNT_ID'
_SERVICE_ACCOUNT: 'projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}'
logsBucket: 'LOGS_BUCKET_LOCATION'
options:
logging: GCS_ONLY
dynamic_substitutions: true
JSON
{
"steps": [
{
"name": "gcr.io/cloud-builders/curl",
"id": "printTokenFromCurl"
"script": "curl -H 'Metadata-Flavor: Google' http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=${_TOKEN_AUDIENCE} -o /workspace/identity_token.txt"
"env":
"_TOKEN_AUDIENCE=${_TOKEN_AUDIENCE}"
}
],
"service_account": "$_SERVICE_ACCOUNT",
"substitutions": {
"_TOKEN_AUDIENCE": "TOKEN_AUDIENCE",
"_SERVICE_ACCOUNT_ID": "SERVICE_ACCOUNT_ID",
"_SERVICE_ACCOUNT": "projects/${PROJECT_ID}/serviceAccounts/${_SERVICE_ACCOUNT_ID}"
},
"logsBucket": "LOGS_BUCKET_LOCATION",
"options": {
"logging": "GCS_ONLY",
"dynamic_substitutions": true
}
}
Substitua:
TOKEN_AUDIENCE
é o URL ou público-alvo das para conseguir o token de ID, comohttp://www.example.com
.SERVICE_ACCOUNT_ID
é o endereço de e-mail ou o ID exclusivo da conta de serviço especificada pelo usuário. Por exemplo,service-account-name@project-id.iam.gserviceaccount.com
.LOGS_BUCKET_LOCATION
é o bucket do Cloud Storage para armazenar registros do build. Por exemplo,gs://mylogsbucket
.
Para mais instruções sobre como gerar e usar tokens de ID em suas cargas de trabalho, consulte Métodos para conseguir um token de ID.