O blog da AWS
Protegendo pipelines de CI/CD com AWS SAM Pipelines e OIDC
Por Rahman Syed, Sr. Solutions Architect, State & Local Government e Brian Zambrano, Sr. Specialist Solutions Architect, Serverless.
Desenvolvedores de aplicações Serverless usam a AWS Serverless Application Model (AWS SAM) CLI para gerar pipelines de integração e implantação contínuas (CI/CD). Em outubro de 2022, a AWS lançou suporte ao OpenID Connect (OIDC) para AWS SAM Pipelines. Isso melhora sua postura de segurança ao criar integrações que usam credenciais de curta duração do seu provedor de CI/CD.
OIDC é uma camada de autenticação baseada em padrões abertos que facilita a troca de informações entre um cliente e um provedor de identidade. Ferramentas de CI/CD como GitHub, GitLab e Bitbucket fornecem suporte para OIDC, o que garante que você possa integrar com a AWS para implantações seguras.
Esta publicação de blog mostra como criar um fluxo de trabalho do GitHub Actions que se integra de forma segura com a AWS usando o GitHub como provedor de identidade.
Protegendo sistemas de CI/CD que interagem com a AWS
AWS SAM Pipelines é um recurso da AWS SAM CLI que gera configurações de pipeline de CI/CD para seis sistemas de CI/CD. Estes incluem AWS CodePipeline, Jenkins, GitHub Actions, GitLab CI/CD e BitBucket. Você pode começar com essas definições de pipeline curadas pela AWS ou criar suas próprias para suportar os padrões da sua organização.
Pipelines de CI/CD hospedados fora da AWS requerem credenciais para implantar no seu ambiente AWS. Uma forma de integração é usar um usuário do AWS Identity and Access Management (IAM), que requer que você armazene a chave de acesso e a chave de acesso secreta dentro do seu provedor de CI/CD. Chaves de acesso de longo prazo permanecem válidas a menos que você as revogue, ao contrário de credenciais de segurança temporárias que são válidas por períodos mais curtos de tempo.
É uma prática recomendada usar credenciais de segurança temporárias e com escopo definido geradas pelo AWS Security Token Service (AWS STS) para reduzir seu risco se as credenciais forem expostas. Tokens temporários são gerados dinamicamente em vez de serem armazenados. Como eles expiram após minutos ou horas, tokens temporários limitam a duração de qualquer comprometimento potencial. Um token com escopo de privilégio mínimo limita permissões a um conjunto de recursos e impede acesso mais amplo dentro do seu ambiente. AWS SAM Pipelines suporta credenciais de curto prazo com três provedores OIDC: GitHub, GitLab e Bitbucket.
Esta publicação mostra como AWS SAM Pipelines pode integrar GitHub Actions com seu ambiente AWS usando essas credenciais de curto prazo e com escopo definido alimentadas pelo padrão aberto OIDC. Ele usa um pipeline de dois estágios, representando um ambiente de desenvolvimento e produção.
Este exemplo usa o GitHub como provedor de identidade. Quando a tarefa dev no fluxo de trabalho do GitHub Actions tenta assumir a função de execução do pipeline dev na conta AWS, o IAM valida que o token OIDC fornecido se origina de uma fonte confiável. A configuração no IAM permite a assunção de função de repositórios e branches específicos do GitHub. AWS SAM Pipelines realiza o trabalho pesado inicial de configurar tanto o GitHub Actions quanto o IAM usando o princípio de privilégio mínimo.
Pré-requisitos
- AWS SAM CLI, versão 1.60.0 ou superior
- Conta do GitHub: Você deve ter as permissões necessárias para configurar projetos do GitHub e criar pipelines.
- Criar um novo repositório do GitHub, usando o nome “sam-app”.
Criando uma nova aplicação Serverless
Para criar uma nova aplicação Serverless:
- Crie uma nova aplicação AWS SAM localmente:
sam init --name sam-app --runtime python3.9 --app-template hello-world --no-tracing - Inicialize um repositório git:
cd sam-app git init -b main git add . git commit -m "Creating a new SAM application" - Envie o novo repositório para o GitHub:
git remote add origin <REMOTE_URL> # e.g. https://github.com/YOURUSER/sam-app.git git push -u origin main
O GitHub oferece múltiplos mecanismos de autenticação. Independentemente de como você se autentica, certifique-se de ter o escopo “workflow”. GitHub Actions só permite alterações no seu pipeline quando você envia com credenciais que têm este escopo anexado.
Criando destinos de implantação da aplicação
Uma vez que a aplicação AWS SAM esteja hospedada em um repositório do GitHub, você pode criar recursos de CI/CD na AWS que suportam dois estágios de implantação para o ambiente da aplicação Serverless. Esta é uma operação única.
Passo 1: Criando o pipeline para o primeiro estágio.
Execute o comando para o primeiro estágio, respondendo às perguntas interativas:
sam pipeline bootstrap --stage dev
Quando solicitado a escolher um “provedor de permissões de usuário”, certifique-se de selecionar OpenID Connect (OIDC). Na próxima pergunta, selecione GitHub Actions como o provedor OIDC. Essas seleções resultam em solicitações adicionais de informações que posteriormente resultam em uma integração de privilégio mínimo com o GitHub Actions.
A captura de tela a seguir mostra a interação com a AWS SAM CLI (alguns valores podem aparecer de forma diferente para você):
Passo 2: Criar recursos de implantação para o segundo estágio.
Execute o seguinte comando e responda às perguntas interativas:
sam pipeline bootstrap --stage prod
Com esses comandos, a AWS SAM CLI inicializa os recursos AWS que o fluxo de trabalho do GitHub Actions posteriormente usa para implantar os dois estágios da aplicação Serverless. Isso inclui buckets do Amazon S3 para artefatos e logs, e funções IAM para implantações. A AWS SAM CLI também cria o provedor de identidade IAM para estabelecer o GitHub Actions como um provedor OIDC confiável.
A captura de tela a seguir mostra esses recursos dentro do console do AWS CloudFormation. Esses recursos não representam uma aplicação Serverless, mas os recursos AWS que um fluxo de trabalho do GitHub Actions deve realizar implantações. A pilha aws-sam-cli-managed-dev-pipeline-resources cria um provedor de identidade OIDC do IAM usado para estabelecer confiança entre sua conta AWS e o GitHub.
Gerando e implantando um fluxo de trabalho do GitHub Actions
O passo final para criar um pipeline de CI/CD no GitHub Actions é usar um repositório de origem do GitHub e dois destinos de implantação em um fluxo de trabalho do GitHub Actions.
Para gerar uma configuração de pipeline com AWS SAM Pipelines, execute o seguinte comando e responda às perguntas interativas:
sam pipeline init
A captura de tela a seguir mostra a interação com a AWS SAM CLI (alguns valores podem aparecer de forma diferente para você):
A AWS SAM CLI criou um arquivo local chamado pipeline.yaml que é a definição do fluxo de trabalho do GitHub Actions. Inspecione o arquivo pipeline.yaml para ver como o fluxo de trabalho do GitHub Actions implanta dentro da sua conta AWS:
Nesta tarefa de exemplo, o GitHub Actions inicia uma Action chamada configure-aws-credentials que usa OIDC como método para assumir uma função IAM da AWS para atividade de implantação. As credenciais são válidas por 3600 segundos (uma hora).
Para implantar o fluxo de trabalho do GitHub Actions, faça commit do novo arquivo e envie para o GitHub:
git add .
git commit -m "Creating a CI/CD Pipeline"
git push origin main
Uma vez que o GitHub recebe este commit, o repositório cria um novo fluxo de trabalho do GitHub Actions, conforme definido pelo novo arquivo de configuração pipeline.yaml.
Inspecionando o fluxo de trabalho do GitHub Actions
1. Navegue até a visualização de Actions do repositório do GitHub para ver a primeira execução do fluxo de trabalho em andamento.
2. Escolhendo a execução do fluxo de trabalho, você pode ver detalhes sobre a implantação.
3. Uma vez que o passo deploy-testing inicia, abra o console do CloudFormation para ver a pilha sam-app-dev sendo implantada.
4. O pipeline do GitHub Actions eventualmente alcança o passo deploy-prod, que implanta o ambiente de produção da sua aplicação AWS SAM. No final da execução do pipeline, você tem duas aplicações AWS SAM na sua conta implantadas pelo CloudFormation via GitHub Actions. Cada alteração enviada para o repositório do GitHub agora aciona seu novo pipeline de CI/CD de múltiplos estágios.
Você criou com sucesso um pipeline de CI/CD para um sistema localizado fora da AWS que pode implantar no seu ambiente AWS sem o uso de credenciais de longa duração.
Limpeza
Para limpar seus recursos baseados na AWS, execute os seguintes comandos da AWS SAM CLI, respondendo “y” a todas as perguntas:
sam delete --stack-name sam-app-prod
sam delete --stack-name sam-app-dev
sam delete --stack-name aws-sam-cli-managed-dev-pipeline-resources
sam delete --stack-name aws-sam-cli-managed-prod-pipeline-resources
Você também pode retornar ao GitHub e excluir o repositório que você criou.
Conclusão
O suporte do AWS SAM Pipeline para OIDC é um novo recurso da AWS SAM CLI que simplifica a integração de pipelines de CI/CD hospedados fora da AWS. Usar credenciais de curto prazo e definir o escopo de ações da AWS para tarefas específicas do pipeline reduz o risco para sua organização. Esta publicação mostra como começar com AWS SAM Pipelines para criar um pipeline de CI/CD baseado no GitHub Actions com dois estágios de implantação.
O Workshop Completo de AWS SAM fornece experiência prática com muitos recursos do AWS SAM, incluindo CI/CD com GitHub Actions.
Assista a tutoriais em vídeo guiados para aprender como criar pipelines de implantação para GitHub Actions, GitLab CI/CD e Jenkins.
Para mais recursos de aprendizado, visite https://serverlessland.com/explore/sam-pipelines.
Este conteúdo foi traduzido do post original do blog, que pode ser encontrado aqui.
Tradutores
![]() |
Nicolas Tarzia é Senior Technical Account Manager na AWS, com mais de 13 anos de experiência, com ampla experiência em arquitetura cloud, engenharia e design de software. Sua área de interesse são tecnologias serverless.
https://www.linkedin.com/in/nicolastarzia |
![]() |
Daniel Abib é Arquiteto de Soluções Sênior e Especialista em Amazon Bedrock na AWS, com mais de 25 anos trabalhando com gerenciamento de projetos, arquiteturas de soluções escaláveis, desenvolvimento de sistemas e CI/CD, microsserviços, arquitetura Serverless & Containers e especialização em Machine Learning. Ele trabalha apoiando Startups, ajudando-os em sua jornada para a nuvem.
https://www.linkedin.com/in/danielabib/ |










