Skip to main content

Configurando o OpenID Connect no Amazon Web Services

Use o OpenID Connect dentro de seus fluxos de trabalho para efetuar a autenticação com Amazon Web Services.

Observação: Executores hospedados em GitHub não são atualmente compatíveis com GitHub Enterprise Server. Você pode ver mais informações sobre suporte futuro planejado no Itinerário público do GitHub.

Visão Geral

O OpenID Connect (OIDC) permite que seus fluxos de trabalho de GitHub Actions acessem os recursos na Amazon Web Services (AWS), sem precisar armazenar as credenciais AWS como segredos de GitHub de longa duração.

Este guia explica como configurar o AWS para confiar no OIDC de GitHub como uma identidade federada e inclui um exemplo de fluxo de trabalho para o aws-actions/configure-aws-credentials que usa tokens para efetuar a autenticação no AWS e acessar os 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 o provedor de identidade ao AWS

Para adicionar o provedor OIDC de GitHub ao IAM, consulte a documentação AWS.

  • Para o URL do provedor: Use https://HOSTNAME/_services/token
  • Para o "público": Use sts.amazonaws.com se você estiver usando a ação oficial.

Configurando a função e a política de confiança

Para configurar a função e confiar no IAM, consulte a documentação do AWS para "Assumindo uma função" e "Criando uma função para a identidade web ou federação de conexão do OpenID".

Edite o relacionamento de confiança para adicionar o campo sub às condições de validação. Por exemplo:

JSON
"Condition": {
  "StringEquals": {
    "HOSTNAME/_services/token:aud": "sts.amazonaws.com",
    "HOSTNAME/_services/token:sub": "repo:octo-org/octo-repo:ref:refs/heads/octo-branch"
  }
}

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:

  1. Adicionar configurações de permissões para o token.
  2. Use a ação aws-actions/configure-aws-credentials 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 e ACTIONS_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:

YAML
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 aws-actions/configure-aws-credentials recebe um JWT do provedor do OIDC GitHub e, em seguida, solicita um token de acesso do AWS. Para obter mais informações, consulte a documentação do AWS .

  • <example-bucket-name>: Adicione o nome do seu bucket S3 aqui.
  • <role-to-assume>: Substitua o exemplo pela sua função do AWS.
  • <example-aws-region>: Adicione o nome do seu AWS aqui.
YAML
# Sample workflow to access AWS resources when workflow is tied to branch
# The workflow Creates static website using aws s3
name: AWS example workflow
on:
  push
env:
  BUCKET_NAME : "<example-bucket-name>"
  AWS_REGION : "<example-aws-region>"
# permission can be added at job level or workflow level    
permissions:
      id-token: write
      contents: read    # This is required for actions/checkout
jobs:
  S3PackageUpload:
    runs-on: ubuntu-latest
    steps:
      - name: Git clone the repository
        uses: actions/checkout@v3
      - name: configure aws credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          role-to-assume: arn:aws:iam::1234567890:role/example-role
          role-session-name: samplerolesession
          aws-region: ${{ env.AWS_REGION }}
      # Upload a file to AWS s3
      - name:  Copy index.html to s3
        run: |
          aws s3 cp ./index.html s3://${{ env.BUCKET_NAME }}/