使用配置联合身份 AWS Tools for PowerShell - AWS Tools for PowerShell

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用配置联合身份 AWS Tools for PowerShell

要允许组织中的用户访问 AWS 资源,您必须配置标准且可重复的身份验证方法,以实现安全性、可审计性、合规性以及支持角色和帐户分离的能力。尽管通常为用户提供访问权限,但如果没有联合API访问权限 AWS APIs,您还必须创建 AWS Identity and Access Management (IAM) 用户,这违背了使用联合身份验证的目的。本主题介绍简化联合访问解决方案的SAML(安全断言标记语言)支持。 AWS Tools for PowerShell

SAML中的支持 AWS Tools for PowerShell 允许您为用户提供对 AWS 服务的联合访问权限。SAML是一种XML基于开放标准的格式,用于在服务之间,特别是在身份提供者(例如 A ctive Directory 联合身份验证服务)和服务提供商(如 AWS)之间传输用户身份验证和授权数据。有关SAML其工作原理的更多信息,请参阅维基百科,或结构化信息标准促进组织 (OASIS) 网站SAML上的SAML技术规范。SAML中的支持与 SAML 2.0 兼容。 AWS Tools for PowerShell

先决条件

在首次尝试使用SAML支持之前,您必须准备好以下内容。

  • 与您的 AWS 账户正确集成的联合身份解决方案,用于仅使用组织凭证进行控制台访问。有关如何专门针对 Active Directory 联合身份验证服务执行此操作的更多信息,请参阅《IAM用户指南》中的 “关于 SAML 2.0 联合”,以及博客文章 “为AWS 使用 Windows Active Directory、AD FS 和 SAML 2.0 启用联合”。尽管该博文涵盖 AD FS 2.0,但如果您运行的是 AD FS 3.0,其步骤与该文章中的步骤也是类似的。

  • 本地工作站上 AWS Tools for PowerShell 安装的 3.1.31.0 或更高版本。

联合身份用户如何获得对服务的联合访问权限 AWS APIs

以下过程简要介绍了 AD FS 如何联合活动目录 (AD) 用户以获得对 AWS 资源的访问权限。

Diagram showing federated user access flow to AWS resources via AD FS and Security Token Service.
  1. 联合用户计算机上的客户端将针对 AD FS 进行身份验证。

  2. 如果身份验证成功,AD FS 会向用户发送SAML断言。

  3. 用户的客户端将SAML断言作为SAML联合请求的一部分发送给 AWS Security Token Service (STS)。

  4. STS返回一个SAML响应,其中包含用户可以代入的角色的 AWS 临时证书。

  5. 用户通过在发APIs出的请求中包含这些临时证书来 AWS Tools for PowerShell访问 AWS 服务。

S SAML upport 在 AWS Tools for PowerShell

本节介绍 AWS Tools for PowerShell cmdlet 如何为用户启用SAML基于联合身份的配置。

Diagram showing SAML-based federation flow between organization, AD FS, AWS, and service APIs.
  1. AWS Tools for PowerShell 使用 Windows 用户的当前凭据对照 AD FS 进行身份验证,或者在用户尝试运行需要凭据才能调用的 cmdlet 时以交互方式进行身份验证。 AWS

  2. AD FS 会对该用户进行身份验证。

  3. AD FS 生成包含断言的 SAML 2.0 身份验证响应;断言的目的是识别和提供有关用户的信息。 AWS Tools for PowerShell 从SAML断言中提取用户的授权角色列表。

  4. AWS Tools for PowerShell 通过AssumeRoleWithSAMLRequestAPI调用将SAML请求(包括所请求角色的 Amazon 资源名称 (ARN))转STS发给。

  5. 如果SAML请求有效,则STS返回包含 AWS AccessKeyIdSecretAccessKey、和的响应SessionToken。这些凭证的有效期为 3,600 秒(1 小时)。

  6. 现在,用户拥有有效的凭证,可以使用APIs该用户角色有权访问的任何 AWS 服务。 AWS Tools for PowerShell 会自动将这些凭证应用于任何后续 AWS API呼叫,并在这些凭证到期后自动续订。

    注意

    如果凭证过期且需要新凭证, AWS Tools for PowerShell 将自动向 AD FS 重新进行身份验证,并在随后一小时内获得新凭证。对于加入域的账户用户,将以无提示方式执行此过程。对于未加入域的账户, AWS Tools for PowerShell 会提示用户输入凭证,然后才能重新进行身份验证。

如何使用 PowerShell SAML配置 Cmdlet

AWS Tools for PowerShell 包括两个提供SAML支持的新 cmdlet。

  • Set-AWSSamlEndpoint 配置 AD FS 终端节点,为终端节点分配易记名称,并选择性地描述终端节点的身份验证类型。

  • Set-AWSSamlRoleProfile 创建或编辑要与 AD FS 终端节点关联的用户账户配置文件,该终端节点通过指定您向 Set-AWSSamlEndpoint cmdlet 提供的易记名称加以标识。每个角色配置文件都映射到用户有权执行的一个角色。

    与 AWS 凭据配置文件一样,您可以为角色配置文件指定一个友好的名称。您可以在 Set-AWSCredential cmdlet 中使用相同的友好名称,也可以将其用作调用服务的任何 cmdlet 的-ProfileName参数值。 AWS APIs

打开一个新 AWS Tools for PowerShell 会话。如果您运行的是 PowerShell 3.0 或更高版本,则在运行其任何 cmdlet 时都会自动导入该 AWS Tools for PowerShell 模块。如果您运行的是 PowerShell 2.0,则必须通过运行 ``Import-Module`` cmdlet 来手动导入模块,如以下示例所示。

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

如何运行 Set-AWSSamlEndpointSet-AWSSamlRoleProfile Cmdlet

  1. 首先,为 AD FS 系统配置终端节点设置。该操作最简单的方法是将终端节点存储在变量中,如本步骤所示。请务必将占位符帐户IDs和 AD FS 主机名替换为您自己的帐户IDs和 AD FS 主机名。在 Endpoint 参数中指定 AD FS 主机名。

    PS > $endpoint = "https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices"
  2. 要创建终端节点设置,请运行 Set-AWSSamlEndpoint cmdlet,为 AuthenticationType 参数指定正确的值。有效值包括 BasicDigestKerberosNegotiateNTLM。如果未指定该参数,则默认值为 Kerberos

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

    cmdlet 返回您使用 -StoreAs 参数分配的易记名称,因此,在下一行中运行 Set-AWSSamlRoleProfile 时,您可以使用该名称。

  3. 现在,运行 Set-AWSSamlRoleProfile cmdlet 向 AD FS 身份提供商进行身份验证,并获取用户有权执行的角色集(在SAML断言中)。

    Set-AWSSamlRoleProfile cmdlet 使用返回的角色集提示用户选择要与所指定配置文件关联的角色,或者验证参数中提供的角色数据是否存在(如果不存在,则提示用户进行选择)。如果仅向用户授予了一个角色,cmdlet 会自动将该角色与配置文件关联,而不会提示用户。无需提供凭证即可设置配置文件,以便在加入域时使用。

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

    或者,对于 non-domain-joined 帐户,您可以提供 Active Directory 凭据,然后选择用户有权访问的 AWS 角色,如下行所示。如果您具有不同 Active Directory 用户账户来区分组织中的角色(例如,管理功能),此功能会很有用。

    PS > $credential = Get-Credential -Message "Enter the domain credentials for the endpoint" PS > Set-AWSSamlRoleProfile -EndpointName $epName -NetworkCredential $credential -StoreAs SAMLDemoProfile
  4. 在任一情况下,Set-AWSSamlRoleProfile cmdlet 都会提示您选择应存储在配置文件中的角色。以下示例显示了两个可用角色:ADFS-DevADFS-Production。这些IAM角色由 AD FS 管理员与您的 AD 登录凭据相关联。

    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"):

    或者,您可以通过输入 RoleARNPrincipalARN 和可选 NetworkCredential 参数来指定没有提示的角色。如果身份验证返回的断言中未列出指定的角色,则提示用户从可用角色中进行选择。

    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. 您可以通过添加 StoreAllRoles 参数在一个命令中为所有角色创建配置文件,如以下代码所示。请注意,角色名称用作配置文件名称。

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

如何使用角色配置文件运行需要凭证的 Cmdlet AWS

要运行需要 AWS 凭据的 cmdlet,您可以使用 AWS 共享凭据文件中定义的角色配置文件。将角色配置文件的名称提供给Set-AWSCredential(或作为中任何ProfileName参数的值 AWS Tools for PowerShell),以自动获取配置文件中描述的角色的临时 AWS 证书。

尽管一次只能使用一个角色配置文件,但是在一个 shell 会话中,您可以在多个配置文件之间切换。Set-AWSCredential cmdlet 本身不会在运行时执行身份验证并获取凭证;该 cmdlet 记录您想要使用指定的角色配置文件。在您运行需要 AWS 凭证的 cmdlet 之前,不会执行身份验证或者请求提供凭证。

现在,您可以使用通过SAMLDemoProfile配置文件获得的临时 AWS 证书来使用 AWS 服务APIs。以下各部分介绍如何使用角色配置文件的示例。

示例 1:使用 Set-AWSCredential 设置默认角色

此示例使用为 AWS Tools for PowerShell 会话设置默认角色Set-AWSCredential。然后,您可以运行需要凭证且由指定角色授权的 cmdlet。此示例列出美国西部(俄勒冈)区域中与您使用 Set-AWSCredential cmdlet 指定的配置文件关联的所有 Amazon Elastic Compute Cloud 实例。

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}

示例 2:在 PowerShell 会话期间更改角色配置文件

此示例列出了与SAMLDemoProfile个人资料关联的角色 AWS 账户中所有可用的 Amazon S3 存储桶。该示例显示,尽管您可能在 AWS Tools for PowerShell 会话的早期使用过其他配置文件,但您可以通过使用支持该配置文件的 cmdlet 为-ProfileName参数指定不同的值来更改配置文件。对于通过 PowerShell 命令行管理 Amazon S3 的管理员来说,这是一项常见的任务。

PS > Get-S3Bucket -ProfileName SAMLDemoProfile CreationDate BucketName ------------ ---------- 7/25/2013 3:16:56 AM amzn-s3-demo-bucket 4/15/2015 12:46:50 AM amzn-s3-demo-bucket1 4/15/2015 6:15:53 AM amzn-s3-demo-bucket2 1/12/2015 11:20:16 PM amzn-s3-demo-bucket3

请注意,Get-S3Bucket cmdlet 指定通过运行 Set-AWSSamlRoleProfile cmdlet 创建的配置文件的名称。如果以前您已在会话中设置角色配置文件(例如,通过运行 Set-AWSCredential cmdlet),并且您想要在 Get-S3Bucket cmdlet 中使用不同的角色配置文件,该命令可能会很有用。配置文件管理器向 Get-S3Bucket cmdlet 提供临时凭证。

尽管证书会在 1 小时后过期(该限制由强制执行STS),但当该工具检测到当前证书已过期时,会通过请求新的SAML断言来 AWS Tools for PowerShell 自动刷新证书。

对于加入域的用户,由于在身份验证期间使用了当前用户的 Windows 身份,因此执行该过程时不会中断。对于 non-domain-joined用户帐户, AWS Tools for PowerShell 会显示要求输入用户密码的 PowerShell 凭据提示。用户应提供凭证,用于重新验证用户以及获取新断言。

示例 3:获取区域中的实例

以下示例列出了亚太地区(悉尼)地区中与ADFS-Production配置文件使用的账户关联的所有 Amazon EC2 实例。这是返回某个区域内所有 Amazon EC2 实例的有用命令。

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

补充阅读

有关如何实现联合API访问的一般信息,请参阅如何使用 SAML 2.0 实现联合API/CLI访问的通用解决方案

如有支持问题或意见,请访问PowerShell 脚本 AWS 开发者论坛或。 NET发展。