Visão Geral
O OpenID Connect (OIDC) permite que seus fluxos de trabalho de GitHub Actions acessem os recursos na Google Cloud Platform (GCP), sem precisar armazenar as credenciais do GCP como segredos de GitHub de longa duração.
Este guia fornece uma visão geral de como configurar o GCP para confiar no OIDC de GitHub como uma identidade federada, e inclui um exemplo de fluxo de trabalho para a ação google-github-actions/auth
que usa tokens para efetuar a autenticação no GCP e acessar recursos.
Pré-requisitos
-
Para aprender os conceitos básicos de como GitHub usa o OpenID Connect (OIDC) e sua arquitetura e benefícios, consulte "Sobre o fortalecimento da segurança com o OpenID Connect."
-
Antes de prosseguir, você deve planejar sua estratégia de segurança para garantir que os tokens de acesso sejam atribuídos apenas de forma previsível. Para controlar como seu provedor de nuvem emite tokens de acesso, você deve definir pelo menos uma condição, para que os repositórios não confiáveis não possam solicitar tokens de acesso para seus recursos na nuvem. Para obter mais informações, consulte "Configurar a confiança do OIDC com a nuvem".
Adicionando um provedor de identidade de carga do Google Cloud
Para configurar o provedor de identidade OIDC no GCP, você deverá definir a configuração a seguir. Para obter instruções sobre como fazer essas alterações, consulte a documentação do GCP.
- Crie um novo conjunto de identidades.
- Configure o mapeamento e adicione condições.
- Conecte o novo grupo a uma conta de serviço.
Orientação adicional para a configuração do provedor de identidade:
- Para aumentar a segurança, verifique se você revisou "Configurando a confiança do OIDC com a nuvem". Por exemplo, consulte "Configurar o assunto no seu provedor de nuvem".
- Para a conta de serviço estar disponível para configuração, ela deverá ser atribuída à função
roles/iam.workloadIdentityUser
. Para obter mais informações, consulte a documentação do GCP. - O URL do emissor a usar:
https://token.actions.githubusercontent.com
Atualizar o seu fluxo de trabalho de GitHub Actions
Para atualizar seus fluxos de trabalho para o OIDC, você deverá fazer duas alterações no seu YAML:
- Adicionar configurações de permissões para o token.
- Use a ação
google-github-actions/auth
para trocar o token do OIDC (JWT) por um token de acesso na nuvem.
Adicionando configurações de permissões
A execução do trabalho ou fluxo de trabalho exige uma configuração de permissões
com id-token: write
. Você não poderá o token de ID OIDC JWT se a configuração das permissões
para id-token
estiverem definidas como leitura
ou nenhum
.
A configuração id-token: write
permite que o JWT seja solicitado do provedor OIDC de GitHub usando uma dessas abordagens:
- Usando variáveis de ambiente no executor (
ACTIONS_ID_TOKEN_REQUEST_URL
eACTIONS_ID_TOKEN_REQUEST_TOKEN
). - Usando
getIDToken()
do conjunto de ferramentas de ações.
Se você só precisa obter um token OIDC para um único trabalho, essa permissão poderá ser definida dentro desse trabalho. Por exemplo:
permissions:
id-token: write
Você pode precisar especificar permissões adicionais aqui, dependendo das necessidades do seu fluxo de trabalho.
Solicitando o token de acesso
A ação do google-github-actions/auth
recebe um JWT do provedor OIDC de GitHub e, em seguida, solicita um token de acesso do GCP. Para obter mais informações, consulte a documentação do GCP.
Este exemplo tem um trabalho denominado Get_OIDC_ID_token
que usa ações para solicitar uma lista de serviços do GCP.
<example-workload-identity-provider>
: Substitua isso pelo caminho para o seu provedor de identidade no GCP. Por exemplo,projetos/<example-project-id>/locations/global/workloadIdentityPools/<name-of-pool/providers/<name-of-provider>
<example-service-account>
: Substitua isso pelo nome da sua conta de serviço no GCP.<project-id>
: Substitua isso pelo ID do seu projeto do GCP.
Esta ação troca um token do OIDC do GitHub por um token de acesso do Google Cloud, usando a Federação de Identidade de Carga.
name: List services in GCP
on:
pull_request:
branches:
- main
permissions:
id-token: write
jobs:
Get_OIDC_ID_token:
runs-on: ubuntu-latest
steps:
- id: 'auth'
name: 'Authenticate to GCP'
uses: 'google-github-actions/auth@v0.3.1'
with:
create_credentials_file: 'true'
workload_identity_provider: '<example-workload-identity-provider>'
service_account: '<example-service-account>'
- id: 'gcloud'
name: 'gcloud'
run: |-
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
gcloud services list