Eu configurei o acesso ao Console de Gerenciamento da AWS para meus usuários do Active Directory usando federação. Quero dar aos usuários o mesmo acesso à AWS Command Line Interface (AWS CLI) usando o Active Directory Federation Services (AD FS).
Breve descrição
Se você permitir que usuários federados do SAML 2.0 acessem o Console de Gerenciamento da AWS, então, 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 (AWS IAM), faça um das seguintes opções:
Antes de conceder acesso a um usuário federado, faça o seguinte:
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, verifique se está utilizando a versão mais recente da AWS CLI.
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
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
Configurar a identidade federada com ferramentas da AWS para PowerShell
Ativar o Single Sign-On para o AWS Managed Microsoft AD