Observação
No momento, não há suporte para executores hospedados no GitHub no GitHub Enterprise Server.
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 do 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 se autenticar no GCP e acessar recursos.
Pré-requisitos
-
Para saber os conceitos básicos de como o GitHub usa o OIDC (OpenID Connect), além da arquitetura e dos benefícios, confira 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 o provedor de nuvem emite os tokens de acesso, você precisa definir, pelo menos, uma condição, para que os repositórios não confiáveis não possam solicitar tokens de acesso aos seus recursos de nuvem. Para saber mais, confira OpenID Connect.
-
Você deve garantir que os seguintes pontos de extremidade OIDC sejam acessíveis pelo seu provedor de nuvem:
http://HOSTNAME/_services/token/.well-known/openid-configuration
http://HOSTNAME/_services/token/.well-known/jwks
Observação
A Google Cloud Platform não tem intervalos de IP fixos definidos para esses pontos de extremidade.
-
Certifique-se de que o valor da declaração do emissor incluído no JSON Web Token (JWT) esteja configurado como uma URL roteável publicamente. Para saber mais, confira OpenID Connect.
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, veja 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 reforçar a segurança, leia Como configurar a relação de confiança do OIDC com a nuvem. Para ver um exemplo, confira Como configurar a entidade no seu provedor de nuvem.
- Para que a conta de serviço esteja disponível para configuração, ela precisa ser atribuída à função
roles/iam.workloadIdentityUser
. Para obter mais informações, confira a documentação do GCP. - A URL do Emissor a ser usada:
http://HOSTNAME/_services/token
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 OIDC (JWT) por um token de acesso à nuvem.
Observação
Quando os ambientes são usados em fluxos de trabalho ou em políticas OIDC, recomendamos adicionar regras de proteção ao ambiente para segurança adicional. Por exemplo, você pode configurar regras de implantação em um ambiente para restringir quais ramificações e tags podem ser implantadas no ambiente ou acessar segredos de ambiente. Para saber mais, confira Gerenciar ambientes para implantação.
Adicionando configurações de permissões
A execução do trabalho ou do fluxo de trabalho requer uma configuração permissions
com id-token: write
para permitir que o provedor OIDC do GitHub crie um JSON Web Token para cada execução.
Observação
A configuração de id-token: write
nas permissões do fluxo de trabalho não dá ao fluxo de trabalho permissão para modificar ou gravar em nenhum recurso. Em vez disso, só permite que o fluxo de trabalho solicite (busque) e use (defina) um token OIDC para uma ação ou etapa. Esse token é usado para autenticar com serviços externos usando um token de acesso de curta duração.
Para obter informações detalhadas sobre permissões necessárias, exemplos de configuração e cenários avançados, confira Referência do OpenID Connect.
Solicitando o token de acesso
A ação google-github-actions/auth
recebe um JWT do provedor OIDC do GitHub e solicita um token de acesso da sua instância do GCP. Para obter mais informações, confira a documentação do GCP.
Este exemplo contém um trabalho chamado Get_OIDC_ID_token
que usa ações para solicitar uma lista de serviços do GCP.
WORKLOAD-IDENTITY-PROVIDER
: substitua isso pelo caminho para o provedor de identidade no GCP. Por exemplo,projects/example-project-id/locations/global/workloadIdentityPools/name-of-pool/providers/name-of-provider
SERVICE-ACCOUNT
: substitua isso pelo nome da sua conta de serviço no GCP.
Essa ação troca um token OIDC do GitHub por um token de acesso do Google Cloud usando a Federação de Identidade de Carga de Trabalho.
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@f1e2d3c4b5a6f7e8d9c0b1a2c3d4e5f6a7b8c9d0' with: create_credentials_file: 'true' workload_identity_provider: 'WORKLOAD-IDENTITY-PROVIDER' service_account: 'SERVICE-ACCOUNT' - id: 'gcloud' name: 'gcloud' run: |- gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}" gcloud services list
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@f1e2d3c4b5a6f7e8d9c0b1a2c3d4e5f6a7b8c9d0'
with:
create_credentials_file: 'true'
workload_identity_provider: 'WORKLOAD-IDENTITY-PROVIDER'
service_account: 'SERVICE-ACCOUNT'
- id: 'gcloud'
name: 'gcloud'
run: |-
gcloud auth login --brief --cred-file="${{ steps.auth.outputs.credentials_file_path }}"
gcloud services list