使用配置联合身份AmazonTools for PowerShell - Amazon Tools for PowerShell
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

使用配置联合身份AmazonTools for PowerShell

要让组织中的用户访问 Amazon 资源,您必须配置一种可重复的标准身份验证方法来提高安全性、可审核性、合规性,并能够支持角色和账户分离。虽然通常为用户提供访问Amazon如果没有联合 API 访问,您还必须创建 AWS Identity and Access Management (IAM) 用户,这样会无法达到使用联合验证的目的。本主题介绍 SAML(安全断言标记语言)支持Amazon用于简化联合访问解决方案的 PowerShell 工具。

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

Prerequisites

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

身份联合身份用户如何获取对Amazon服务 API

以下过程从较高层面介绍 Active Directory (AD) 用户如何由 AD FS 联合起来获取对Amazon资源的费用。

  1. 联合用户计算机上的客户端将针对 AD FS 进行身份验证。

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

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

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

  5. 用户访问Amazon服务 APIAmazonTools for PowerShell。

SAML 支持在中的工作原理AmazonTools for PowerShell

本节说明如何Amazon适用于 PowerShell cmdlet 的工具支持为用户配置基于 SAML 的联合身份。

  1. AmazonTools for PowerShell 使用 Windows 用户的当前凭证或者以交互方式向 AD FS 进行身份验证,当用户尝试运行需要凭证才能调用Amazon。

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

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

  4. AmazonTools for PowerShell 将 SAML 请求(包括请求的角色 Amazon 资源名称 (ARN))转发到 STS,方法是使AssumeRoleWithSAMLRequestAPI 调用。

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

  6. 用户现在具有有效凭证,可使用任何Amazon用户角色有权访问的服务 API。AmazonTools for PowerShell 会自动将这些凭据应用于任何后续AmazonAPI 调用,并在它们过期时自动更新。

    注意

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

如何使用 PowerShell SAML 配置 Cmdlet

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

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

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

    就像与Amazon凭证配置文件,您将为角色配置文件分配一个友好名称。您可以将相同的友好名称与Set-AWSCredential命令,或者作为-ProfileName参数,用于调用Amazon服务 API。

打开新的AmazonTools for PowerShell 会话的工具。如果您运行的是 PowerShell 3.0 或更新版本,Amazon适用于 PowerShell 模块的工具将在您运行其任何 cmdlet 时自动导入。如果您正在运行 PowerShell 2.0,则必须通过运行 “导入模块”cmdlet 手动导入模块,如以下示例所示。

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

如何运行 Set-AWSSamlEndpointSet-AWSSamlRoleProfile Cmdlet

  1. 首先,为 AD FS 系统配置终端节点设置。该操作最简单的方法是将终端节点存储在变量中,如本步骤所示。请确保将占位符账户 ID 和 AD FS 主机名替换为您自己的账户 ID 和 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

    或者,对于未加入域的帐户,您可以提供 Active Directory 凭证,然后选择Amazon角色,如下行所示。如果您具有不同 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

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

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

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

现在,您可以使用临时Amazon凭据,您通过SAMLDemoProfile配置文件使用Amazon服务 API。以下各部分介绍如何使用角色配置文件的示例。

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

该示例为AmazonTools for PowerShell 会话的工具Set-AWSCredential。然后,您可以运行需要凭证且由指定角色授权的 cmdlet。此示例列出了位于美国西部(俄勒冈)地区的所有 Amazon 弹性计算云实例。Set-AWSCredentialcmdlet。

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 会话期间更改角色配置文件

该示例列出Amazon与SAMLDemoProfile配置文件。该示例说明,尽管您以前可能在AmazonTools for PowerShell 会话的工具,您可以通过为-ProfileName参数与支持它的 cmdlet 一起使用。对于从 PowerShell 命令行管理 Amazon S3 的管理员而言,这是一项常见任务。

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

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

虽然凭证会在 1 小时后过期(STS 强制实施的限制),Amazon当检测到当前凭证已过期时,PowerShell 的工具会通过请求新的 SAML 断言来自动更新凭证。

对于加入域的用户,由于在身份验证期间使用了当前用户的 Windows 身份,因此执行该过程时不会中断。对于未加入域的用户账户,AmazonTools for PowerShell 会显示请求提供用户密码的 PowerShell 凭证提示。用户应提供凭证,用于重新验证用户以及获取新断言。

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

以下示例列出了位于亚太区域(悉尼)的所有 Amazon EC2 实例。ADFS-Production配置文件。该命令对返回某个区域中的所有 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 访问常规解决方案

有关支持问题或意见,请访问Amazon开发人员论坛PowerShell 脚本或者.NET 开发