Se a sua arquitetura estiver a usar vários serviços, é provável que precise de credenciais para ativar a comunicação entre os serviços. O Cloud Build oferece suporte integrado para a norma OpenID Connect (OIDC) para autenticação e autorização seguras entre serviços.
Pode usar o Cloud Build para gerar tokens de ID. Com estes tokens, pode chamar pontos finais seguros a partir do Cloud Build.
Por exemplo, se estiver a executar uma aplicação de plataforma sem servidor, como as funções do Cloud Run, o Cloud Run ou o App Engine, pode interagir em segurança com a sua aplicação a partir de cargas de trabalho do Cloud Build.
Antes de começar
-
Enable the Cloud Build and IAM APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. Se planeia usar esta conta para criar credenciais de curta duração, também tem de ativar a API IAM Service Account Credentials.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.Para usar os exemplos de linhas de comando neste guia, instale e configure a CLI Google Cloud.
Certifique-se de que criou a conta de serviço que quer usar. Tem de criar a conta no mesmo Google Cloud projeto onde está a executar compilações.
Autorizações de IAM necessárias
A conta de serviço especificada pelo utilizador tem de ter a autorização iam.serviceAccounts.getOpenIdToken
.
- Conceda a função Criador do token de identidade do OpenID Connect da conta de serviço (
roles/iam.serviceAccountOpenIdTokenCreator
) à conta de serviço especificada pelo utilizador no projeto onde criou a conta de serviço.
Para obter instruções sobre como conceder funções de IAM a uma conta de serviço, consulte o artigo Faça a gestão do acesso a contas de serviço.
Métodos para obter um token de ID
Existem duas formas de configurar os passos de compilação para obter tokens de ID:
- usar a CLI gcloud
- enviar um pedido direto para o servidor de metadados
Obtenha um token de ID através do gcloud
Nesta secção, o seguinte fragmento do código demonstra como usar a CLI gcloud para obter 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 o seguinte:
TOKEN_AUDIENCE
é o URL ou o público-alvo para obter o token de ID, comohttp://www.example.com
.SERVICE_ACCOUNT_ID
é o endereço de email ou o ID exclusivo da conta de serviço especificada pelo utilizador. Por exemplo,service-account-name@project-id.iam.gserviceaccount.com
.LOGS_BUCKET_LOCATION
é o contentor do Cloud Storage para armazenar registos de compilação. Por exemplo,gs://mylogsbucket
.
Envie um pedido direto para o servidor de metadados
Nesta secção, o seguinte fragmento do código demonstra como fazer um pedido direto ao servidor de metadados para obter 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 o seguinte:
TOKEN_AUDIENCE
é o URL ou o público-alvo para obter o token de ID, comohttp://www.example.com
.SERVICE_ACCOUNT_ID
é o endereço de email ou o ID exclusivo da conta de serviço especificada pelo utilizador. Por exemplo,service-account-name@project-id.iam.gserviceaccount.com
.LOGS_BUCKET_LOCATION
é o contentor do Cloud Storage para armazenar registos de compilação. Por exemplo,gs://mylogsbucket
.
Para obter instruções adicionais sobre como gerar e usar tokens de ID nas suas cargas de trabalho, consulte Métodos para obter um token de ID.