Como conceder acesso à API ou à AWS CLI para os usuários do Active Directory por meio do AD FS?

5 minuto de leitura
0

Eu configurei o acesso ao Console de Gerenciamento da AWS para meus usuários do Active Directory usando federação. Como dar aos usuários o mesmo acesso à AWS Command Line Interface (AWS CLI) usando os Serviços de Federação do Active Directory (AD FS)?

Breve descrição

Ao permitir que usuários federados do SAML 2.0 acessem o Console de Gerenciamento da AWS, os usuários que precisam de acesso programático ainda devem ter uma chave de acesso e uma chave secreta.

Para obter o ID da chave de acesso e a chave de acesso secreta para um usuário do AWS Identity and Access Management (IAM), é possível:

Configurar a AWS CLI.

-ou-

Obter credenciais temporárias para que usuários federados acessem a AWS CLI.

Antes de conceder acesso a um usuário federado, é necessário:

Observação: essa solução não é compatível se você tem autenticação multifator (MFA) ativada para os usuários do seu diretório.

Resolução

Se o provedor de identidades (IdP) estiver configurado para funcionar com Integrated Windows Authentication (IWA), NTLM ou Kerberos (padrão para AD FS 2.0), consulte a Solução 1. Se o IdP estiver configurado para funcionar com a autenticação baseada em formulário (padrão para AD FS 3.0 e 4.0), consulte a Solução 2.

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar utilizando a versão mais recente da AWS CLI.

Solução 1: PowerShell para AD FS usando IWA (PowerShell 2.0)

1.    Importe o módulo Windows PowerShell executando o seguinte comando:

> Import-Module "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.psd1"

2.    Defina uma variável para O endpoint do AD FS executando um comando semelhante ao seguinte:

> $Endpoint = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

Observação: isso inclui o URL completo da sua página de login do AD FS e o nome de recurso uniforme (URN) de login da AWS. 3.    Defina o endpoint SAML executando um comando semelhante ao seguinte:

> $EndpointName = Set-AWSSamlEndpoint -Endpoint "$Endpoint" -StoreAs 'ADFS-Login' -AuthenticationType NTLM

Observação: por padrão, o AuthenticationType (Tipo de autenticação) do AD FS 2.0 está definido como NTLM. Se não for especificado um valor para o AuthenticationType (Tipo de autenticação) no exemplo anterior do Cmdlet das ferramentas da AWS, o Kerberos será usado por padrão.

4.    Use as configurações de endpoint armazenadas para se autenticar com o AD FS IdP para obter uma lista de funções que o usuário pode assumir usando um dos seguintes métodos:

Use as credenciais do usuário que está atualmente conectado à estação de trabalho.

> Set-AWSSamlRoleProfile -StoreAs 'SAMLUser' -EndpointName $EndpointName

-ou-

Especifique as credenciais de um usuário do Active Directory.

> $Credential = Get-Credential -Message "Enter the domain credentials for the endpoint"
> Set-AWSSamlRoleProfile -EndpointName $EndpointName -NetworkCredential $credential -StoreAs 'SAMLUser'

5.    Se várias funções estiverem disponíveis, você deverá selecionar a função que deseja assumir. Insira o caractere alfabético na sessão do terminal semelhante ao seguinte:

SAMLUser[A] A - 123456789012:role/ADFS-DevAdmin [B] B - 123456789012:role/ADFS-DevReadOnly [?] Help (default is "A"): A

6.    Confirme se os usuários podem acessar a AWS CLI usando as credenciais federadas e o perfil especificado executando um comando semelhante ao seguinte:

Get-IAMSAMLProviderList -ProfileName SAMLUser

Solução 2: Python para AD FS com autenticação baseada em formulário (padrão para AD FS 3.0 e 4.0)

1.    Instale os seguintes módulos no Python:

pip install --upgrade boto beautifulsoup4 requests

2.    Implemente uma solução geral para acesso federado à API/CLI usando SAML 2.0 e, em seguida, baixe o script da etapa 4 desta publicação do blog vinculada.

3.    Abra o script e defina a região e o formato de saída preferidos. Substitua adfs.example.com por seu URL e, em seguida, insira o nome de domínio totalmente qualificado (FQDN) do servidor AD FS.

region = 'eu-west-1'
    outputformat = 'json'
    awsconfigfile = '/.aws/credentials'
    idpentryurl = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'

Observação: se você tiver um caminho de arquivo diferente para o arquivo de credenciais da AWS, especifique o caminho do arquivo.

4.    Salve as alterações, execute o arquivo e, em seguida, preencha os seguintes campos, à medida que aparecerem:

bob@Ubuntu64:~$ ./working_samlapi.py
   Username: bob@example.com
   Password: ***********

   Please choose the role you would like to assume:
   [ 0 ]:  arn:aws:iam::123456789012:role/ADFS-DevAdmin
   [ 1 ]:  arn:aws:iam::123456789012:role/ADFS-DevReadOnly

   Selection:  0

   ----------------------------------------------------------------
   Your new access key pair has been stored in the AWS configuration file /home/ec2-user/.aws/credentials under the saml profile.
   Note that it will expire at 2018-03-14T14:57:45Z.
   After this time, you may safely rerun this script to refresh your access key pair.
   To use this credential, call the AWS CLI with the --profile option (e.g. aws --profile saml ec2 describe-instances).
   ----------------------------------------------------------------

5.    Depois de federar com êxito, execute comandos usando o perfil SAML recém-configurado usando o parâmetro -- profile em seus comandos.

bob@Ubuntu64:~$ aws iam list-saml-providers --profile saml

{
  "SAMLProviderList": [
    {
      "CreateDate": "2018-03-14T13:28:24Z",
      "ValidUntil": "2118-03-14T13:28:23Z",
      "Arn": "arn:aws:iam::123456789012:saml-provider/adfs"
    }
  ]
}

Informações relacionadas

Como configurar a identidade federada com ferramentas da AWS para PowerShell

Login único