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

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

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

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

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

先决条件

首次尝试使用 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 Tools for PowerShell 发出的请求中包括这些临时凭证来访问Amazon服务 API。

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

此部分介绍Amazon Tools for PowerShell cmdlet 如何支持为用户配置基于 SAML 的联合身份。

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

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

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

  4. Amazon Tools for PowerShell 通过执行 AssumeRoleWithSAMLRequest API 调用将 SAML 请求(包括请求的角色 Amazon 资源名称 (ARN))转发到 STS。

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

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

    注意

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

如何使用 PowerShell SAML 配置 Cmdlet

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

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

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

    与Amazon凭证配置文件相同,您还将为角色配置文件分配一个易记名称。您可以使用与 Set-AWSCredential cmdlet 相同的易记名称,或与调用Amazon服务 API 的任何 cmdlet 的 -ProfileName 参数值相同的易记名称。

打开新的Amazon Tools for PowerShell会话。如果您运行的是 PowerShell 3.0 或更新版本,Amazon Tools for 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

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

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

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

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

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

该示例使用 Set-AWSCredential 为Amazon Tools for PowerShell会话设置默认角色。然后,您可以运行需要凭证且由指定角色授权的 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 配置文件关联的角色的Amazon账户中的所有可用的 Amazon S3 存储桶。该示例说明,尽管您以前可能在Amazon Tools for PowerShell会话中使用其他配置文件,您仍然可以在支持它的 cmdlet 中为 -ProfileName 参数指定不同的值以更改配置文件。对于从 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 Tools for PowerShell在检测到当前凭证已过期时,会通过请求新的 SAML 断言来自动更新凭证。

对于加入域的用户,由于在身份验证期间使用了当前用户的 Windows 身份,因此执行该过程时不会中断。对于未加入域的用户账户,Amazon 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 访问常规解决方案

如果您有任何支持问题或意见,请访问Amazon开发人员论坛中的编写 PowerShell 脚本.NET 开发