Indicium Logo
Blog Indicium

AWS e Azure: computação em nuvem com integração segura e funcional

Diferentes provedores de computação em nuvem podem ter seus recursos integrados, o que é uma ótima solução para problemas de negócio.

Se você integrar, por exemplo, a Microsoft Azure e a Amazon Web Services (AWS), duas gigantes provedoras, certamente vai obter um melhor desempenho, reduzir custos e promover a transferência segura de informação. Para isso, um fluxo de autenticação deve ser usado na implementação dessa integração

E é exatamente sobre isso que falamos neste artigo. Veja agora, passo a passo, como você pode configurar essa integração com segurança.

Boa leitura!

Assumindo roles na AWS através de uma identidade web provisionada pela Azure

Diversos setores têm buscado soluções para integrar recursos entre diferentes provedores de computação em nuvem. Considerando que muitas vezes empresas parceiras utilizam clouds diferentes, soluções de integração seguras e funcionais tornam-se super importantes para resolver problemas de negócio.

Entre as principais plataformas de serviços em nuvem temos a Microsoft Azure e Amazon Web Services (AWS). Por mais que sejam concorrentes diretas, as duas provedoras também podem ser utilizadas em conjunto. Essa abordagem permite que empresas combinem recursos de diferentes nuvens para obter o melhor desempenho, reduzir custos ou promover transferência de informação.

Azure Active Directory

O Azure Active Directory (Azure AD) é um serviço de gerenciamento de identidade e acesso baseado em nuvem que permite o acesso a recursos internos ou externos, como o Microsoft 365, o portal do Azure ou APIs protegidas.

Uma das principais funcionalidades de uma plataforma de identidade é verificar ou autenticar as credenciais de um usuário, aplicativo ou serviço. E uma identidade gerenciada pelo Azure AD pode ser usada para acessar recursos concedidos a ela, como por exemplo: solicitar a API sts.amazonaws.com/?Action=AssumeRoleWithWebIdentity e assumir funções em uma conta AWS.

Tokens de acesso da plataforma de identidade Microsoft

Em um fluxo de autenticação, tokens são usados para garantir, verificar e autenticar uma entidade de segurança (usuário, host ou serviço) e conceder ou negar acesso aos recursos protegidos (autorização).

Os tokens na plataforma de identidade (Azure AD) são formatados como Tokens Web JSON (JWT), que contêm os seguintes parâmetros:

  • cabeçalho: fornece informações sobre como validar o token, incluindo informações sobre o tipo dele e seu método de assinatura;
  • payload: contém todos os dados importantes sobre o usuário ou aplicativo que está tentando chamar o serviço;
  • assinatura: é a matéria-prima usada para validar o token.

Existem algumas informações no payload que serão importantes para nossa proposta de autenticação entre clouds:

  • aud: especifica o público-alvo destinado ao token; é importante aceitar apenas tokens destinados ao seu público para evitar problemas de segurança;
  • exp: é usado para referir-se ao tempo de expiração do JWT token.

AWS AssumeRoleWithWebIdentity

O AssumeRoleWithWebIdentity (AWS) é um serviço que permite que uma pessoa autenticada em um provedor de identidade web, como Google, Facebook ou Azure Active Directory, assuma temporariamente um papel (role) de segurança em uma conta AWS para acessar recursos específicos desta conta.

Esse serviço é especialmente útil em cenários em que um aplicativo web precisa acessar recursos da AWS em nome de alguém autenticado externamente, sem que o aplicativo precise armazenar credenciais de segurança permanentes.

Em vez disso, o app solicita ao provedor de identidade da web um token de acesso que pode ser usado com o serviço AssumeRoleWithWebIdentity para temporariamente assumir o papel de segurança na conta AWS e acessar os recursos autorizados.

Entidades confiáveis

Nas funções da AWS, existe a possibilidade de configurar regras de autorização específicas. Através disso, você pode garantir que apenas as identidades escolhidas tenham permissão para assumir a função.

Combinando o conhecimento sobre o token Azure AD e o comportamento da política de confiança AWS, será possível configurar a integração com segurança.

Vamos a isso!


Setup Azure - Registrar um aplicativo no Azure AD

Você pode registrar um aplicativo usando o portal da Azure, o CLI da Azure ou o PowerShell. Siga o tutorial desta documentação da Microsoft para registrá-lo:

Atenção na hora da criação do segredo do cliente (itens 8, 9, 10), antes de sair ou atualizar a página: copie o segredo para algum lugar seguro, pois esse valor só será exibido no momento da criação e será necessário na recuperação do token.

Após seguir todos os passos, você vai ter um registro de aplicativo criado no Azure AD. E nessa entidade, você pode verificar algumas informações importantes, como:

  1. Client ID
  2. Tenant ID

Figura 1 - Interface Azure: canto superior da página referente ao aplicativo registrado no Azure AD

Esses IDs, aliados a outros valores, serão usados na conta AWS para que sua identidade gerenciada pela Azure seja reconhecida.

Setup AWS - Adicionando um provedor de identidade

Agora, vá para o console AWS e selecione o serviço IAM.

Clique em Provedores de identidade, depois em Adicionar provedor.

Escolha a opção OpenID Connect.

Na URL do provedor, insira https://sts.windows.net/[your-tenant-id]/.

O Tenant ID é o valor verificado na seção anterior, também é importante adicionar a barra ao final da URL para que o padrão esperado seja contemplado.

Clique em Obter impressão digital para que a AWS adicione o provedor da Azure como uma entidade confiável.

Em seguida, adicione o seu Client ID recuperado no registro de aplicativo como público (audience) e crie o provedor.

Figura 2 - Interface AWS: página dedicada à adição de um provedor de identidade

Agora, é necessário criar uma função na AWS e atribuí-la a esse provedor. Isso vai permitir o uso dos tokens (Azure AD) para assumir essa função.

No provedor de identidade criado, no canto superior direito, clique em Atribuir função, depois em Criar uma nova função.

Figura 3 - Interface AWS: página com informações sobre o provedor de identidade adicionado

Em Selecionar tipo de identidade confiável, selecione identidade da web.

Depois, escolha o provedor de identidade criado e também o público (audience) que foi configurado.

Figura 4 - Interface AWS: primeira seção da sequência de configurações referentes à atribuição de função, onde é possível selecionar qual entidade assumirá a função

Selecione quais permissões você deseja fornecer para a identidade web:

Figura 5 - Interface AWS mostra o segundo passo na atribuição de função, onde é possível escolher uma política de acesso já existente ou criar outra para atribuição

Se julgar interessante, atribua tags para cada função e, em seguida, nomeie-as. Depois, com tudo configurado, será possível selecionar o botão Criar função.

Hora do show!

Com ambas as partes configuradas, você pode partir para a ação e testar sua proposta.

A primeira coisa a fazer é recuperar o token a partir da sua identidade gerada no Azure AD. Existe um endpoint dedicado a isso, e ele pode ser verificado no console da Azure, na página do seu registro de aplicativo.

Em seguida, você deve enviar uma solicitação para a API da AWS com o token gerado (Azure AD) e o ARN (Amazon Resource Name) da role que será assumida temporariamente. E, como resposta, você vai receber três credenciais:

  1. AccessKeyId,
  2. SecretAccessKey,
  3. SessionToken.

Para fazer as solicitações às APIs, sugerimos que você use o comando cURL em um terminal Linux. Caso não conheça ou nunca tenha usado esse comando, leia este artigo que explica o que é, como usar e as principais funções do cURL.

Também é possível você usar qualquer ferramenta capaz de enviar solicitações HTTPs, basta seguir os padrões de requisição.

Solicitando token do aplicativo registrado no Azure AD

Vá até o recurso Azure Active Directory e, na barra lateral, selecione Registro de aplicativo.

Em seguida, selecione seu aplicativo criado nas seções anteriores.

Na extremidade superior, está o botão Endpoints. Note que uma aba será aberta com várias URLs. Copie o Endpoint: OAuth 2.0 token endpoint (v2). Essa URL tem o seguinte formato: https://login.microsoftonline.com/[your-tenant id]/oauth2/v2.0/token

Figura 6 - Interface Azure, página do aplicativo registrado referenciando a funcionalidade do botão: Endpoints, com ele pode-se verificar a URL para solicitação do token.

A requisição para recuperar o token deve seguir o seguinte padrão:

Note que foi usado um método POST para solicitar o Endpoint; que você passou como parâmetro de cabeçalho o Content-Type: application/x-www-form-urlencoded; e que, no corpo da requisição, foram enviados quatro valores:

  • client_id: ID de cliente pertencente ao aplicativo registrado no Azure AD; esse valor será o parâmetro aud do token gerado.
  • grant_type: tipo de token que você deve receber na resposta.
  • client_secret: secret gerada no aplicativo registrado no Azure AD.
  • scope: alcance da autenticação desse token; nesse caso, apenas para seu aplicativo registrado.

A partir de uma requisição construída corretamente, vai ser possível verificar a seguinte resposta:

Solicitando API da AWS para assumir uma Role através do AssumeRoleWithWebIdentity

Com o token (Azure) em mãos, será possível verificar as credenciais temporárias fornecidas pela AWS e acessar os recursos permissionados a essas credenciais.

Outro valor necessário é o Amazon Resource Name (ARN), referente à função atribuída ao provedor de identidade. Para verificar o ARN, vá até o IAM da sua conta AWS e, em Funções, selecione a função atribuída. Em seguida, copie o valor do ARN de acordo com a imagem seguinte:

Figura 7 - Interface AWS referente ao espaço da página onde se verifica o Amazon Resource Name (ARN)

A requisição para solicitar as credenciais temporárias deve seguir o seguinte padrão:

Note que você usou um método GET para solicitar o Endpoint, passou como parâmetro de cabeçalho o Accept: application/json, e, como parâmetros de consulta, passou seis valores:

  1. Version: versão da api solicitada.
  2. Action: ação requerida (AssumeRoleWithWebIdentity).
  3. DurationSeconds: tempo de expiração das credenciais temporárias em segundos.
  4. RoleSessionName: identificador para a sessão de função assumida (arbitrário).
  5. RoleArn: nome de recurso da Amazon (ARN) da função que o requerente está assumindo.
  6. WebIdentityToken: token recuperado a partir da identidade gerenciada pelo Azure AD.

A partir de uma requisição construída corretamente, será possível você verificar a seguinte resposta:

As credenciais de segurança temporárias AccessKeyId, SecretAccessKey e SessionToken, criadas pela action AssumeRoleWithWebIdentity, podem ser usadas para fazer chamadas de API para qualquer recurso permitido a função assumida.

Dessa forma, você tem uma identidade web gerenciada pela Azure assumindo uma função dentro de uma conta AWS.

Referências

  • Breno Augusto Milagres Ferreira
    Por Breno Augusto Milagres Ferreira

Assine nossa newsletter