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.

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

  • To learn the basic concepts of how GitHub uses OpenID Connect (OIDC), and its architecture and benefits, see "About security hardening with OpenID Connect."

  • Before proceeding, you must plan your security strategy to ensure that access tokens are only allocated in a predictable way. To control how your cloud provider issues access tokens, you must define at least one condition, so that untrusted repositories can’t request access tokens for your cloud resources. For more information, see "Configuring the OIDC trust with the cloud."

Adicionando o provedor de identidade ao AWS

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

  • Para a URL do provedor: Use https://token.actions.githubusercontent.com
  • 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": {
    "token.actions.githubusercontent.com: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

O fluxo de trabalho exigirá uma configuração permissões com um valor de id-token definido. If you only need to fetch an OIDC token for a single job, then this permission can be set within that job. 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@v2
jobs:
  S3PackageUpload:
    runs-on: ubuntu-latest
    steps:
      - name: Git clone the repository
        uses: actions/checkout@v2
      - name: configure aws credentials
        uses: aws-actions/configure-aws-credentials@master
        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 }}/

Esse documento ajudou você?

Política de Privacidade

Ajude-nos a tornar esses documentos ótimos!

Todos os documentos do GitHub são de código aberto. Você percebeu que algo que está errado ou não está claro? Envie um pull request.

Faça uma contribuição

Ou, aprenda como contribuir.