本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用配置联合身份 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 联合身份验证服务
先决条件
在首次尝试使用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 资源的访问权限。
-
联合用户计算机上的客户端将针对 AD FS 进行身份验证。
-
如果身份验证成功,AD FS 会向用户发送SAML断言。
-
用户的客户端将SAML断言作为SAML联合请求的一部分发送给 AWS Security Token Service (STS)。
-
STS返回一个SAML响应,其中包含用户可以代入的角色的 AWS 临时证书。
-
用户通过在发APIs出的请求中包含这些临时证书来 AWS Tools for PowerShell访问 AWS 服务。
S SAML upport 在 AWS Tools for PowerShell
本节介绍 AWS Tools for PowerShell cmdlet 如何为用户启用SAML基于联合身份的配置。
-
AWS Tools for PowerShell 使用 Windows 用户的当前凭据对照 AD FS 进行身份验证,或者在用户尝试运行需要凭据才能调用的 cmdlet 时以交互方式进行身份验证。 AWS
-
AD FS 会对该用户进行身份验证。
-
AD FS 生成包含断言的 SAML 2.0 身份验证响应;断言的目的是识别和提供有关用户的信息。 AWS Tools for PowerShell 从SAML断言中提取用户的授权角色列表。
-
AWS Tools for PowerShell 通过
AssumeRoleWithSAMLRequest
API调用将SAML请求(包括所请求角色的 Amazon 资源名称 (ARN))转STS发给。 -
如果SAML请求有效,则STS返回包含 AWS
AccessKeyId
SecretAccessKey
、和的响应SessionToken
。这些凭证的有效期为 3,600 秒(1 小时)。 -
现在,用户拥有有效的凭证,可以使用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-AWSSamlEndpoint
和 Set-AWSSamlRoleProfile
Cmdlet
-
首先,为 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" -
要创建终端节点设置,请运行
Set-AWSSamlEndpoint
cmdlet,为AuthenticationType
参数指定正确的值。有效值包括Basic
、Digest
、Kerberos
、Negotiate
和NTLM
。如果未指定该参数,则默认值为Kerberos
。PS >
$epName = Set-AWSSamlEndpoint -Endpoint $endpoint -StoreAs
ADFS-Demo
-AuthenticationType NTLMcmdlet 返回您使用
-StoreAs
参数分配的易记名称,因此,在下一行中运行Set-AWSSamlRoleProfile
时,您可以使用该名称。 -
现在,运行
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
-
在任一情况下,
Set-AWSSamlRoleProfile
cmdlet 都会提示您选择应存储在配置文件中的角色。以下示例显示了两个可用角色:ADFS-Dev
和ADFS-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"):
或者,您可以通过输入
RoleARN
、PrincipalARN
和可选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
-
您可以通过添加
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 AMamzn-s3-demo-bucket1
4/15/2015 6:15:53 AMamzn-s3-demo-bucket2
1/12/2015 11:20:16 PMamzn-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 脚