Configurar a identidade federada com o AWS Tools for PowerShell - AWS Tools for PowerShell

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar a identidade federada com o AWS Tools for PowerShell

Para permitir que os usuários na sua organização acessem os recursos da AWS, você deverá configurar um método de autenticação padrão e reproduzível para fins de segurança, auditabilidade, conformidade e a capacidade de oferecer suporte à separação de contas e funções. Embora seja comum fornecer aos usuários a capacidade de acessar APIs da AWS, sem acesso a uma API federada, também é necessário criar usuários do AWS Identity and Access Management (IAM), o que anula a finalidade de usar a federação. Este tópico descreve o suporte ao SAML (Security Assertion Markup Language) no AWS Tools for PowerShell que facilita sua solução de acesso federado.

O suporte ao SAML no AWS Tools for PowerShell permite que você forneça aos usuários acesso federado aos produtos da AWS. O SAML é um formato padrão aberto, baseado em XML, para a transmissão de dados de autorização e autenticação de usuários entre serviços; especificamente, entre um provedor de identidade (como o Active Directory Federation Services) e um provedor de serviços (como a AWS). Para obter mais informações sobre SAML e como ele funciona, consulte SAML na Wikipédia ou Especificações técnicas do SAML no site da OASIS (Organization for the Advancement of Structured Information Standards). O suporte ao SAML no AWS Tools for PowerShell é compatível com o SAML 2.0.

Pré-requisitos

Você deve ter o seguinte antes de tentar usar o suporte a SAML pela primeira vez.

  • Uma solução de identidade federada corretamente integrada com sua conta da AWS para acesso ao console usando apenas as credenciais da sua organização. Para obter mais informações sobre como fazer isso especificamente para o Serviços de Federação do Active Directory (AD FS), consulte Sobre a federação SAML 2.0 no Manual do usuário do IAM e a postagem do blog Como habilitar a federação para a AWS usando Windows Active Directory, AD FS e SAML 2.0). Embora a publicação do blog aborde o AD FS 2.0, as etapas serão semelhantes se você estiver executando o AD FS 3.0.

  • Versão 3.1.31.0 ou mais recente do AWS Tools for PowerShell instalada em sua estação de trabalho local.

Como um usuário com federação de identidade obtém acesso federado a APIs de serviço da AWS

O processo a seguir descreve, em alto nível, como um usuário do Active Directory (AD) é federado pelo AD FS para obter acesso aos recursos da AWS.

  1. O cliente no computador do usuário federado autentica em relação ao AD FS.

  2. Se a autenticação for bem-sucedida, o AD FS enviará ao usuário uma declaração do SAML.

  3. O cliente do usuário envia a declaração do SAML para o AWS Security Token Service (STS) como parte de uma solicitação de federação do SAML.

  4. O STS retorna uma resposta SAML que contém credenciais temporárias da AWS para uma função que o usuário pode assumir.

  5. O usuário acessa as APIs do produtos da AWS ao incluir essas credenciais temporárias na solicitação feita pelo AWS Tools for PowerShell.

Como funciona o suporte ao SAML no AWS Tools for PowerShell

Esta seção descreve como os cmdlets do AWS Tools for PowerShell permitem a configuração de federação de identidades com base em SAML para os usuários.

  1. O AWS Tools for PowerShell faz a autenticação no AD FS usando as credenciais atuais do usuário do Windows, ou de forma interativa, quando o usuário tenta executar um cmdlet que requer credenciais para chamar a AWS.

  2. O AD FS autentica o usuário.

  3. O AD FS gera uma resposta de autenticação do SAML 2.0 que inclui uma declaração. A finalidade da declaração é identificar e fornecer informações sobre o usuário. O AWS Tools for PowerShell extrai a lista de funções autorizadas do usuário da declaração do SAML.

  4. O AWS Tools for PowerShell encaminha a solicitação do SAML, incluindo os nomes de recurso da Amazon (ARN) da função solicitada, para o STS, fazendo a chamada à API AssumeRoleWithSAMLRequest.

  5. Se a solicitação do SAML for válida, o STS retornará uma resposta que contém AWS, AccessKeyId e SecretAccessKey da SessionToken. Essas credenciais duram 3.600 segundos (1 hora).

  6. O usuário agora tem credenciais válidas para trabalhar com quaisquer APIs de produto da AWS às quais a função do usuário está autorizada a acessar. O AWS Tools for PowerShell aplica automaticamente essas credenciais para quaisquer chamadas subsequentes de API da AWS e as renova automaticamente quando expiram.

    nota

    Quando as credenciais expiram e novas credenciais são necessárias, o AWS Tools for PowerShell reautentica automaticamente com o AD FS e obtém novas credenciais para a próxima hora. Para usuários de contas associadas a um domínio, esse processo ocorre silenciosamente. Para contas que não estão associadas a um domínio, o AWS Tools for PowerShell solicita que os usuários insiram suas credenciais para que possam reautenticar.

Como usar cmdlets de configuração de SAML do PowerShell

O AWS Tools for PowerShell inclui dois novos cmdlets que oferecem suporte ao SAML.

  • O Set-AWSSamlEndpoint configura o endpoint do AD FS, atribui um nome amigável ao endpoint e, opcionalmente, descreve o tipo de autenticação do endpoint.

  • O Set-AWSSamlRoleProfile cria ou edita um perfil de conta de usuário que você deseja associar a um endpoint do AD FS, identificado ao especificar o nome amigável fornecido ao cmdlet Set-AWSSamlEndpoint. Cada perfil de função é mapeado para uma única função que um usuário está autorizado a executar.

    Assim como com perfis de credenciais da AWS, você atribui um nome amigável ao perfil de função. Você pode usar o mesmo nome amigável com o cmdlet Set-AWSCredential ou como o valor do parâmetro -ProfileName para qualquer cmdlet que chame APIs de serviço da AWS.

Abra uma nova sessão do AWS Tools for PowerShell. Se estiver executando o PowerShell 3.0 ou mais recente, o módulo do AWS Tools for PowerShell será automaticamente importado quando você executar qualquer um de seus cmdlets. Se estiver executando o PowerShell 2.0, você deverá importar o módulo manualmente executando o cmdlet ``Import-Module``, conforme mostrado no exemplo a seguir.

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

Como executar os cmdlets Set-AWSSamlEndpoint e Set-AWSSamlRoleProfile

  1. Primeiro, defina as configurações de endpoint para o sistema do AD FS. A maneira mais simples de fazer isso é armazenar o endpoint em uma variável, como mostrado nesta etapa. Certifique-se de substituir os IDs de contas de espaço reservado e o nome de host do AD FS com os seus próprios IDs de contas e nome de host do AD FS. Especifique o nome de host do AD FS no parâmetro Endpoint.

    PS > $endpoint = "https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices"
  2. Para criar as configurações de endpoint, execute o cmdlet Set-AWSSamlEndpoint, especificando o valor correto para o parâmetro AuthenticationType. Os valores válidos incluem Basic, Digest, Kerberos, Negotiate e NTLM. Se você não especificar esse parâmetro, o valor padrão será Kerberos.

    PS > $epName = Set-AWSSamlEndpoint -Endpoint $endpoint -StoreAs ADFS-Demo -AuthenticationType NTLM

    O cmdlet retorna o nome amigável atribuídos usando o parâmetro -StoreAs, para que você possa usá-lo ao executar Set-AWSSamlRoleProfile na próxima linha.

  3. Agora, execute o cmdlet Set-AWSSamlRoleProfile para fazer a autenticação com o provedor de identidade do AD FS e obter o conjunto de funções (na declaração do SAML) que o usuário está autorizado a executar.

    O cmdlet Set-AWSSamlRoleProfile usa o conjunto retornado de funções para solicitar que o usuário selecione uma função a ser associada ao perfil especificado ou confirme que os parâmetros de dados fornecidos nos parâmetros estão presentes (se não estiverem, será solicitado que o usuário escolha). Se o usuário estiver autorizado para apenas uma função, o cmdlet associará a função ao perfil automaticamente, sem fazer a solicitação ao usuário. Não há necessidade de fornecer uma credencial para configurar um perfil para uso associado a um domínio.

    PS > Set-AWSSamlRoleProfile -StoreAs SAMLDemoProfile -EndpointName $epName

    Como alternativa, para contas não associadas a um domínio, você pode fornecer credenciais do Active Directory e, em seguida, selecionar uma função da AWS à qual o usuário tem acesso, como mostrado na linha a seguir. Isso será útil se você tiver contas de usuário diferentes do Active Directory para diferenciar funções em sua organização (por exemplo, funções administrativas).

    PS > $credential = Get-Credential -Message "Enter the domain credentials for the endpoint" PS > Set-AWSSamlRoleProfile -EndpointName $epName -NetworkCredential $credential -StoreAs SAMLDemoProfile
  4. Em qualquer um dos casos, o cmdlet Set-AWSSamlRoleProfile solicita que você escolha a função que deve ser armazenada no perfil. O exemplo a seguir mostra duas funções disponíveis: ADFS-Dev e ADFS-Production. As funções do IAM são associadas às credenciais de login do AD pelo administrador do AD FS.

    Select Role Select the role to be assumed when this profile is active [1] 1 - ADFS-Dev [2] 2 - ADFS-Production [?] Help (default is "1"):

    Como alternativa, é possível especificar uma função sem o prompt, inserindo o RoleARN, o PrincipalARN e os parâmetros opcionais NetworkCredential. Se a função especificada não estiver listada na declaração retornada pela autenticação, o usuário será solicitado a escolher entre as funções disponíveis.

    PS > $params = @{ "NetworkCredential"=$credential, "PrincipalARN"="{arn:aws:iam::012345678912:saml-provider/ADFS}", "RoleARN"="{arn:aws:iam::012345678912:role/ADFS-Dev}" } PS > $epName | Set-AWSSamlRoleProfile @params -StoreAs SAMLDemoProfile1 -Verbose
  5. Você pode criar perfis para todas as funções em um único comando ao adicionar o parâmetro StoreAllRoles, conforme mostrado no código a seguir. Observe que o nome da função é usado como o nome do perfil.

    PS > Set-AWSSamlRoleProfile -EndpointName $epName -StoreAllRoles ADFS-Dev ADFS-Production

Como usar perfis de função para executar cmdlets que exigem credenciais da AWS

Para executar cmdlets que exigem credenciais da AWS, use perfis de função definidos no arquivo de credenciais compartilhadas da AWS. Forneça o nome de um perfil de função para Set-AWSCredential (ou como o valor para qualquer parâmetro ProfileName no AWS Tools for PowerShell) para obter credenciais temporárias da AWS automaticamente para a função que está descrita no perfil.

Embora você use apenas um perfil de função por vez, pode alternar entre os perfis em uma sessão de shell. O cmdlet Set-AWSCredential não faz a autenticação e não obtém credenciais quando você o executa sozinho; o cmdlet registra que você deseja usar um perfil de função especificado. Até que você execute um cmdlet que exija credenciais da AWS, não ocorrerá nenhuma autenticação ou solicitação de credenciais.

Agora é possível usar as credenciais temporárias da AWS obtidas com o perfil SAMLDemoProfile para funcionar com APIs de produtos da AWS. As seções a seguir mostram exemplos de como usar os perfis de função.

Exemplo 1: Definir uma função padrão com Set-AWSCredential

Este exemplo define uma função padrão para uma sessão do AWS Tools for PowerShell usando Set-AWSCredential. Em seguida, você pode executar cmdlets que exijam credenciais e sejam autorizados pela função especificada. Este exemplo lista todas as instâncias do Amazon Elastic Compute Cloud na região Oeste dos EUA (Oregon) que estão associadas ao perfil especificado com o cmdlet Set-AWSCredential.

PS > Set-AWSCredential -ProfileName SAMLDemoProfile PS > Get-EC2Instance -Region us-west-2 | Format-Table -Property Instances,GroupNames Instances GroupNames --------- ---------- {TestInstance1} {default} {TestInstance2} {} {TestInstance3} {launch-wizard-6} {TestInstance4} {default} {TestInstance5} {} {TestInstance6} {AWS-OpsWorks-Default-Server}

Exemplo 2: Alterar perfis de função durante uma sessão do PowerShell

Este exemplo lista todos os buckets do Amazon S3 disponíveis na conta da AWS da função associada ao perfil SAMLDemoProfile. O exemplo mostra que, embora você possa ter usado outro perfil anteriormente em sua sessão do AWS Tools for PowerShell, é possível alterar os perfis especificando um valor diferente para o parâmetro -ProfileName com cmdlets que ofereçam suporte a ele. Esta é uma tarefa comum para administradores que gerenciam o Amazon S3 a partir da linha de comando do PowerShell.

PS > Get-S3Bucket -ProfileName SAMLDemoProfile CreationDate BucketName ------------ ---------- 7/25/2013 3:16:56 AM mybucket1 4/15/2015 12:46:50 AM mybucket2 4/15/2015 6:15:53 AM mybucket3 1/12/2015 11:20:16 PM mybucket4

Observe que o cmdlet Get-S3Bucket especifica o nome do perfil criado executando o cmdlet Set-AWSSamlRoleProfile. Este comando poderá ser útil se você tiver configurado um perfil de função anteriormente em sua sessão (por exemplo, ao executar o cmdlet Set-AWSCredential) e quiser usar um perfil de função diferente para o cmdlet Get-S3Bucket. O gerenciador de perfil disponibiliza credenciais temporárias para o cmdlet Get-S3Bucket.

Embora as credenciais expirem após uma hora (um limite imposto pelo STS), o AWS Tools for PowerShell atualizará automaticamente as credenciais solicitando uma nova declaração do SAML quando a ferramenta detectar que as credenciais atuais expiraram.

Para usuários associados a um domínio, esse processo ocorre sem interrupção, porque a identidade do Windows do usuário atual é usada durante a autenticação. Para contas de usuário não associadas a um domínio, o AWS Tools for PowerShell mostra um prompt de credencial do PowerShell solicitando a senha do usuário. O usuário fornece credenciais que são usadas para autenticar novamente o usuário e obter uma nova asserção.

Exemplo 3: Obter instâncias em uma região

O exemplo a seguir lista todas as instâncias do Amazon EC2 na região Ásia-Pacífico (Sydney) associadas à conta usada pelo perfil ADFS-Production. Este é um comando útil para retornar todas as instâncias do Amazon EC2 em uma região.

PS > (Get-Ec2Instance -ProfileName ADFS-Production -Region ap-southeast-2).Instances | Select InstanceType, @{Name="Servername";Expression={$_.tags | where key -eq "Name" | Select Value -Expand Value}} InstanceType Servername ------------ ---------- t2.small DC2 t1.micro NAT1 t1.micro RDGW1 t1.micro RDGW2 t1.micro NAT2 t2.small DC1 t2.micro BUILD

Leitura adicional

Para obter informações gerais sobre como implementar o acesso federado à API, consulte How to Implement a General Solution for Federated API/CLI Access Using SAML 2.0 (Como implementar uma solução geral para acesso federado à CLI/API usando SAML 2.0).

Em caso de dúvidas ou comentários, acesse os fóruns de desenvolvedores da AWS para ler sobre Scripts do PowerShell ou Desenvolvimento em .NET.