Visão geral do OIDC (OpenID Connect)
Os fluxos de trabalho das GitHub Actions costumam ser projetados para acessar um provedor de nuvem (como AWS, Azure, GCP, HashiCorp Vault, entre outros) para implantar o software ou usar os serviços da nuvem. Antes que o fluxo de trabalho possa acessar esses recursos, ele fornecerá credenciais para o provedor da nuvem, como uma senha ou token. Estas credenciais geralmente são armazenadas como um segredo em GitHub, e o fluxo de trabalho apresenta esse segredo para o provedor da nuvem toda vez que é executado.
No entanto, usar segredos codificados exige que você crie credenciais no provedor de nuvem e, em seguida, duplique-as em GitHub como segredo.
Depois de estabelecer uma conexão de confiança com um provedor de nuvem que dá suporte ao OIDC, você pode configurar seu fluxo de trabalho para solicitar um token de acesso de curta duração diretamente do provedor de nuvem.
Benefícios de usar o OIDC
Ao atualizar seus fluxos de trabalho para usar tokens do OIDC, você pode adotar as seguintes práticas recomendadas de segurança:
- Sem segredos na nuvem: você não vai precisar duplicar suas credenciais da nuvem como segredos de longa duração do GitHub. Em vez disso, você pode configurar a confiança do OIDC no seu provedor de nuvem, e, em seguida, atualizar seus fluxos de trabalho para solicitar um token de acesso curto do provedor de nuvem por meio do OIDC.
- Gerenciamento de autenticação e de autorização: você tem um mais controle granular sobre como os fluxos de trabalho podem usar as credenciais usando a autenticação do seu provedor de nuvem (authN) e as ferramentas de autorização (authZ) para controlar o acesso aos recursos na nuvem.
- Rotação de credenciais: com o OIDC, seu provedor de nuvem emite um token de acesso de curta duração que só é válido para uma execução de trabalho individual e, posteriormente, vence de modo automático.
Como o OIDC se integra às GitHub Actions
O diagrama a seguir fornece uma visão geral de como o provedor OIDC do GitHub integra-se aos seus fluxos de trabalho e ao provedor de nuvem:
- Você estabelece uma relação de confiança do OIDC no provedor de nuvem, permitindo que fluxos de trabalho específicos do GitHub solicitem tokens de acesso à nuvem em nome de uma função de nuvem definida.
- Toda vez que o seu trabalho é executado, o provedor OIDC do GitHub gera um token do OIDC automaticamente. Esse token contém várias reivindicações para estabelecer uma identidade de segurança reforçada e verificável sobre o fluxo de trabalho específico que está tentando autenticar.
- Uma etapa ou ação no trabalho do fluxo de trabalho pode solicitar um token do provedor OIDC do GitHub, que pode ser apresentado ao provedor de nuvem como prova da identidade do fluxo de trabalho.
- Uma vez que o provedor de nuvem valida as reivindicações apresentadas no token, ele irá fornecer, posteriormente, um token de acesso à nuvem de curta duração que está disponível apenas para a duração do trabalho.
Entendendo o token do OIDC
Cada trabalho solicita um token do OIDC de GitHub, que responde com um token web do JSON gerado automaticamente (JWT) que é único para cada trabalho de fluxo de trabalho em que é gerado. Quando o trabalho é executado, o token de OIDC é apresentado ao provedor de nuvem. Para validar o token, o provedor de nuvem verifica se o assunto do token do OIDC e outras reivindicações correspondem às condições que foram pré-configuradas na definição de confiança do OIDC da função da nuvem.
O exemplo de token OIDC a seguir usa uma entidade (sub
) que referencia um ambiente de trabalho chamado prod
no repositório octo-org/octo-repo
.
{
"typ": "JWT",
"alg": "RS256",
"x5t": "example-thumbprint",
"kid": "example-key-id"
}
{
"jti": "example-id",
"sub": "repo:octo-org/octo-repo:environment:prod",
"environment": "prod",
"aud": "https://HOSTNAME/octo-org",
"ref": "refs/heads/main",
"sha": "example-sha",
"repository": "octo-org/octo-repo",
"repository_owner": "octo-org",
"actor_id": "12",
"repository_visibility": "private",
"repository_id": "74",
"repository_owner_id": "65",
"run_id": "example-run-id",
"run_number": "10",
"run_attempt": "2",
"runner_environment": "github-hosted",
"actor": "octocat",
"workflow": "example-workflow",
"head_ref": "",
"base_ref": "",
"event_name": "workflow_dispatch",
"enterprise": "avocado-corp",
"enterprise_id": "2",
"ref_type": "branch",
"job_workflow_ref": "octo-org/octo-automation/.github/workflows/oidc.yml@refs/heads/main",
"iss": "https://HOSTNAME/_services/token",
"nbf": 1632492967,
"exp": 1632493867,
"iat": 1632493567
}
Autenticar ações personalizadas usando o OIDC
As ações personalizadas usam o método getIDToken()
do kit de ferramentas do Ações ou de um comando curl
para autenticar usando o OIDC.
Para saber mais, confira Referência do OpenID Connect.
Atualizando seus fluxos de trabalho para o OIDC
Os fluxos de trabalho do GitHub Actions podem usar tokens OIDC em vez de segredos para autenticar com provedores de nuvem. Muitos provedores de nuvem populares oferecem ações de logon oficiais que simplificam o processo de uso do OIDC em seus fluxos de trabalho. Para obter mais informações sobre como atualizar seus fluxos de trabalho com provedores de nuvem específicos, consulte Segurança que enrijece as suas implentações.
Próximas etapas
Para saber mais sobre como configurar OIDC, confira Segurança que enrijece as suas implentações.
Para obter informações de referência sobre o OIDC, consulte Referência do OpenID Connect.