O blog da AWS
Configurando federação na AWS a partir do Azure DevOps usando OpenID Connect
Por Mathieu Bruneau, arquiteto de soluções especializado em containers na Amazon Web Services (AWS) Canada.
Nest blog post, demonstrarei como usar as opções do OpenID Connect (OIDC) no AWS Toolkit for Azure DevOps versão 1.15.0+ para federar com AWS Accounts e obter credenciais temporárias sem gerenciar credenciais estáticas do AWS Identity and Access Management (IAM).
Introdução
O Azure DevOps Pipelines permite de forma contínua a criação, teste e a implantação em plataformas e nuvens. O AWS Toolkit for Azure DevOps, uma extensão gratuita para ambientes hospedados e on-premises, simplifica o gerenciamento de recursos da AWS. O kit de ferramentas se integra aos principais serviços da AWS, como Amazon Simple Storage Service (Amazon S3), AWS CodeDeploy, AWS Lambda, AWS CloudFormation e Amazon SQS.
O Azure DevOps agora oferece suporte à federação de identidade de carga de trabalho. Combinado com os recursos de OIDC do AWS Toolkit, equipes podem aproveitar o gerenciamento de identidade nativo para implantar e acessar recursos da AWS usando controles padrões do IAM. O processo usa um token fornecido pelo Azure DevOps para chamar o AWS Security Token Service (STS), que gera credenciais de segurança temporárias e com privilégios limitados, alinhando-se às melhores prática dos princípios de segurança. A Figura 1 ilustra o fluxo de obtenção e uso de credenciais do serviço AWS STS por meio da federação.

Figura 1 — Credenciais do Azure DevOps por meio do fluxo do AWS STS
Visão geral de alto nível
Nota: como este post usa o IAM como parte da solução, será exigido permissão, no mínimo, para CreateRole, ListOpenIdConnectProviders e CreateOpenIdConnectProvider. Na maioria dos casos, você precisaria anexar permissões à role, mas isso não é necessário em nosso exemplo.
- Crie um pipeline YAML no Azure DevOps e obtenha o GUID da organização.
- Configure um provedor de identidade na AWS para a federação OIDC.
- Crie uma IAM role na AWS que possa ser assumida pelo provedor de identidade.
- Execute o pipeline do Azure DevOps para confirmar o funcionamento da federação.
Pré-requisitos
- Uma AWS Account com permissões suficientes para criar IAM Providers, roles e políticas do IAM.
- Um projeto do Azure DevOps com acesso para configurar conexões de serviço. Essas são conexões autenticadas entre o Azure Pipelines e serviços externos ou remotos.
- AWS Toolkit for Azure DevOps versão 1.15+ instalado para esse projeto. Consulte AWS Toolkit for Azure DevOps na Visual Studio Marketplace para obter instruções de instalação.
Crie um pipeline YAML no Azure DevOps e obtenha o GUID da organização
Para a configuração do provedor de identidade na AWS, precisaremos do GUID da organização do Azure DevOps. Primeiro, precisamos criar uma conexão de serviço que faça referência a uma IAM role chamada azdo-federation, que criaremos posteriormente.
Nas configurações do seu projeto do Azure DevOps:
- Em Pipelines, selecione Service Connections.
- Selecione New service connection.
- Escolha AWS, selecione Next.
- Em Role to assume, use o ARN da role. Para nosso exemplo, usaremos uma role chamada azdo-federation. Substitua o ID da sua AWS Account da seguinte forma: arn:aws:iam::123456789012:role/azdo-federation.
- (Opcional) O campo Role Session Name, se deixado em branco, será padronizado para aws-vsts-tools. Você pode inserir outro valor aqui.
- Marque a opção use OIDC.
- Para o Service Connection Name, use aws-oidc-federation.
- Selecione Save.
Obtenha o GUID da organização do Azure DevOps executando o pipeline
Nota: como a configuração está incompleta, nosso pipeline falhará, mas as informações necessárias para configurar um provedor de identidade estarão disponíveis nos registros.
Nos seus pipelines dos projetos no Azure DevOps:
- Selecione New pipeline.
- Escolha Azure Repos Git.
- Selecione Starter pipeline.
- Copie e cole o seguinte YAML, ajustando AWS Credentials para o nome da conexão de serviço e o regionName, se necessário.
5. Selecione Save and run.
Depois de alguns segundos, seu pipeline solicitará permissão para usar a conexão de serviço (Figura 2).

Figura 2 — Pipeline do Azure DevOps requer permissão para usar a conexão de serviço
Selecione View e revise as informações para conceder permissão usando o botão Permit.
Depois que o pipeline for executado, verifique os logs da tarefa chamada Running aws-cli get-caller-identity para ver se há uma linha que comece com OIDC Token generated. A partir disso, você terá o issuer, audience e a subject line necessários para o restante da configuração (Figura 3).

Figura 3 — Logs da tarefa Running aws-cli get-caller-identity
Com essas informações, podemos criar o provedor de identidade em nossa AWS Account.
Configurar um provedor de identidade na AWS para a federação OIDC
Nesta etapa, usaremos o issuer obtido dos logs.
No console do AWS IAM, siga estas etapas.
- Em Access management, selecione Identity providers no menu à esquerda.
- Selecione Add Provider.
- Escolha OpenID Connect como o Provider type.
- Em Provider URL, use a URL do issuer obtido na seção anterior. Cada tenant do Azure DevOps terá um OrganizationGUID exclusivo; o formato esperado é https://vstoken.dev.azure.com/{OrganizationGUID}.
- No campo Audience, use api://AzureAdTokenExchange. Esse é um valor fixo para o Azure DevOps. Também encontrado nos logs da execução do pipeline.
- Selecione Add Provider.
- Anote o ARN do provedor recém-criado, pois será necessário na próxima etapa.
Crie uma IAM role na AWS que possa ser assumida pelo provedor de identidade
Uma IAM role é uma entidade que permite atribuir permissões específicas. Para controlar quem pode usar essa role e sob quais condições, usamos uma política de confiança. Para seguir o princípio de menor privilégio, adicionaremos uma condição na política de confiança para que somente uma conexão de serviço específica do Azure DevOps possa usar a IAM role que estamos criando. O Azure DevOps passa a conexão de serviço no campo subject da seguinte forma: “sc://{organizationName}/{projectName}/{serviceConnectionName}”.
Continue a partir do console do AWS IAM.
Nesta etapa, usaremos o subject que obtivemos dos logs em nossa primeira execução. O formato esperado é sc://{organizationName}/{projectName}/{serviceConnectionName}.
- Em Access management, selecione Roles.
- Selecione Create role.
- Em Trusted entity type, selecione Web Identity.
- Selecione o provedor de identidade correto no menu suspenso, que começa com vstoken.dev.azure.com/{OrganizationGUID}.
- No menu suspenso Audience, selecione api://AzureAdTokenExchange.
- Para limitar essa role a apenas uma conexão de serviço, adicionaremos uma condição. Em Condition, selecione Add condition, em Key, selecione vstoken.dev.azure.com/{OrganizationGUID}:sub. Em Condition, selecione StringEquals. Para Value, use o subject obtido dos logs, que deve ter este formato: sc://{organizationName}/{projectName}/{serviceConnectionName}.
- Selecione Next. Você pode deixar a permissão vazia, pois nosso pipeline apenas valida nossa identidade, mas em um pipeline real, é aqui que você anexaria a política necessária.
- Selecione Next, insira azdo-federation como o nome da role e revise os detalhes. Aqui está a política de confiança completa. Substitua o texto em negrito e itálico pelos IDs corretos.
9. Selecione Create role.
Execute o pipeline do Azure DevOps para confirmar o funcionamento da federação
Nesse ponto, se executarmos novamente o pipeline que criamos, a federação agora deverá estar funcional e nos fornecer um resultado semelhante no log da tarefa (Figura 4).

Figura 4 — Output da tarefa aws-cli get-caller-identity
Mudanças necessárias nos pipelines/tarefas atuais existentes
Você acabou de aprender a usar o OIDC em seus pipelines. A opção não exige alterações na sua tarefa atual. Para atualizar seus pipelines, você precisa reconfigurar a conexão de serviço para ativar a opção use OIDC, a role a ser assumida e remover as access/secret keys estáticas (se definidas). Verifique este comentário do GitHub para saber como fazer isso por meio de CLI ou de API. A tarefa tentará primeiro o método assume role, garantindo o mínimo de alterações no pipeline existente.
Usando a federação com outras ferramentas
Embora o AWS Toolkit for Azure DevOps forneça tarefas para muitos serviços da AWS, ele não cobre todos os casos de uso. Essa técnica de federação pode ser usada com qualquer ferramenta de terceiros, pois fornece credenciais temporárias, como o provedor básico padronizado dos SDKs da AWS.
Aqui está um exemplo de uso do Terraform. Usando a tarefa AWSShellScript, configuraremos as credenciais da AWS para que elas possam ser usadas pelas ferramentas no pipeline. Além disso, se você tiver processos de longa execução, poderá ajustar a variável aws.rolecredential.maxduration dentro do pipeline para garantir que suas credenciais sejam válidas durante a tarefa (de 900 a 43200 segundos).
Aqui está um exemplo de pipeline que consegue isso com o Terraform:
E o output correspondente chamando a fonte de dados aws_caller_identity do provedor de dados (Figura 5).

Figura 5 — Output da tarefa terraform usando a fonte de dados aws_caller_identity
Se precisar de ajuda na configuração do terraform state para usar um bucket do Amazon S3, consulte a documentação do Terraform para armazenamento de back-end do S3.
Limpeza
Na sua AWS Account, exclua a IAM role e o provedor de identidade que foi criado para remover qualquer acesso diretamente do Azure DevOps. No Azure DevOps, remova a conexão de serviço, o pipeline criado e os arquivos que tiveram commit no repositório.
Conclusão
Com esse novo recurso do AWS Toolkit for Azure DevOps, agora você pode confiar nas melhores práticas de uso de credenciais temporárias e não precisar provisionar e alternar chaves estáticas ou usuários do IAM. Isso permitirá que você use uma IAM role com credenciais temporárias, minimizando a necessidade de rotação de credenciais e reduzindo as necessidades operacionais. Você pode controlar a duração da sessão para as credenciais, permitindo a máxima flexibilidade na proteção do seu ambiente.
Links:
AWS Toolkit for Azure DevOps Marketplace
Esse artigo foi originalmente publicado em inglês no AWS Blog (link aqui).
Autor
![]() |
Mathieu Bruneau é arquiteto de soluções especializado em containers na Amazon Web Services (AWS) Canada. Ele estava conectando discussões entre equipes de Operações e Desenvolvedores muito antes de o termo DevOps se tornar popular. Math está localizado em Montreal, Canadá, e gosta de passar tempo com a esposa e seus 3 filhos, jogando videogame ou jogando frisbees. |
Tradutor
![]() |
Luciano Bernardes trabalha atualmente como Sr Solutions Architect na AWS, especializado em workloads Microsoft. Com 18 anos de experiência no mercado, trabalhou a maior parte em consultoria técnica especializada em Microsoft, em clientes de várias verticais, com demandas voltadas para infraestrutura on-premises e em nuvem. Como SA, trabalha próximo a clientes e parceiros de consultoria em U.S. e LATAM, para apoiá-los em tomadas de decisão e revisão de arquitetura de workoads Microsoft na nuvem AWS. |
Revisor
![]() |
Bruno Lopes é Sr. Specialist Solutions Architect na AWS LATAM. Com mais de 17 anos de experiência em TI, é especialista na modernização de aplicações legadas. Sua experiência abrange ambientes híbridos e capacitação técnica como Technical Trainer e Evangelista. Como Arquiteto de Soluções, simplifica a adoção de tecnologias avançadas, auxiliando clientes a superar desafios diários com soluções inovadoras. |