Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何使用 AD FS 向我的 Active Directory 用户授予对 API 或 AWS CLI 的访问权限?
我已经使用联合身份验证为我的 Active Directory 用户配置了对 AWS 管理控制台的访问权限。我想使用 Active Directory 联合身份验证服务 (AD FS) 为用户授予对 AWS 命令行界面 (AWS CLI) 的相同访问权限。
简短描述
如果您允许 SAML 2.0 联合用户访问 AWS 管理控制台,则需要以编程方式进行访问的用户仍然必须具有访问密钥和秘密密钥。
要获取 AWS Identity and Access Management (IAM) 用户的访问密钥 ID 和秘密访问密钥,请执行以下操作之一:
- 配置 AWS CLI。
- 为联合用户获取临时凭证以访问 AWS CLI。
在向联合用户授予访问权限之前,请执行以下操作:
- 使用 Windows Active Directory、AD FS 和 SAML 2.0 启用对 AWS 的联合身份验证。
- 使用 AWS Tools for PowerShell 3.1.31.0 或更高版本。您还可以在工作站上安装适用于 Python 的 AWS SDK v2.36 或更高版本(稳定版本)。
- 使用最小的凭证文件 .aws/credentials。
**注意:**如果您为目录用户启用了多重身份验证 (MFA),则此解决方案不兼容。
解决方法
如果您的身份提供者 (IdP) 配置为使用集成 Windows 身份验证 (IWA)、NTLM 或 Kerberos(AD FS 2.0 的默认设置),请参阅解决方案 1。如果您的 IdP 配置为使用基于表单的身份验证(AD FS 3.0 和 4.0 的默认设置),请参阅解决方案 2。
**注意:**如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI。
适用于使用 IWA 的 AD FS 的 PowerShell (PowerShell 2.0)
1.通过运行以下命令导入 Windows PowerShell 模块:
> Import-Module "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.psd1"
2.通过运行类似于以下的命令,为您的 AD FS 端点设置变量:
> $Endpoint = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'
**注意:**这包括您的 AD FS 登录页面的完整 URL 和 AWS 的登录统一资源名称 (URN)。
3.通过运行类似于以下的命令设置 SAML 端点:
> $EndpointName = Set-AWSSamlEndpoint -Endpoint "$Endpoint" -StoreAs 'ADFS-Login' -AuthenticationType NTLM
**注意:**默认情况下,AD FS 2.0 AuthenticationType 设置为 NTLM。如果您没有在前面的 AWS Tools Cmdlet 示例中为 AuthenticationType 指定值,则 AWS Tools 将默认使用 Kerberos。
4.使用存储的端点设置向 AD FS IdP 进行身份验证,以获取角色列表,随后用户可以使用以下方法之一代入这些角色:
使用当前登录工作站的用户的凭证。
> Set-AWSSamlRoleProfile -StoreAs 'SAMLUser' -EndpointName $EndpointName
-or-
指定 Active Directory 用户的凭证。
> $Credential = Get-Credential -Message "Enter the domain credentials for the endpoint" > Set-AWSSamlRoleProfile -EndpointName $EndpointName -NetworkCredential $credential -StoreAs 'SAMLUser'
5.如果有多个角色可用,系统会提示您选择要代入的角色。在终端会话中输入字母字符,类似于以下内容:
SAMLUser[A] A - 123456789012:role/ADFS-DevAdmin [B] B - 123456789012:role/ADFS-DevReadOnly [?] Help (default is "A"): A
6.通过运行类似于以下的命令,确认用户可以使用联合凭证和指定的配置文件访问 AWS CLI:
Get-IAMSAMLProviderList -ProfileName SAMLUser
适用于使用基于表单的身份验证(AD FS 3.0 和 4.0 的默认设置)的 AD FS 的 Python 模块
1.将以下模块安装到 Python:
pip install --upgrade boto beautifulsoup4 requests
2.使用 SAML 2.0 实施针对联合 API/CLI 访问的通用解决方案,然后从此链接的博客文章的第 4 步下载脚本。
3.打开脚本并设置您的首选区域和输出格式。将 adfs.example.com 替换为您的 URL,然后输入 AD FS 服务器的完全限定域名 (FQDN)。
region = 'eu-west-1' outputformat = 'json' awsconfigfile = '/.aws/credentials' idpentryurl = 'https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices'
**注意:**如果您的 AWS 凭证文件具有不同的文件路径,请指定文件路径。
4.保存您的更改并运行该文件,然后填充以下显示的字段:
bob@Ubuntu64:~$ ./working_samlapi.py Username: bob@example.com Password: *********** Please choose the role you would like to assume: [ 0 ]: arn:aws:iam::123456789012:role/ADFS-DevAdmin [ 1 ]: arn:aws:iam::123456789012:role/ADFS-DevReadOnly Selection: 0 ---------------------------------------------------------------- Your new access key pair has been stored in the AWS configuration file /home/ec2-user/.aws/credentials under the saml profile. Note that it will expire at 2018-03-14T14:57:45Z. After this time, you may safely rerun this script to refresh your access key pair. To use this credential, call the AWS CLI with the --profile option (e.g. aws --profile saml ec2 describe-instances). ----------------------------------------------------------------
5.成功进行联合身份验证后,使用通过命令中的 --profile 参数新配置的 SAML 配置文件运行命令。
bob@Ubuntu64:~$ aws iam list-saml-providers --profile saml { "SAMLProviderList": [ { "CreateDate": "2018-03-14T13:28:24Z", "ValidUntil": "2118-03-14T13:28:23Z", "Arn": "arn:aws:iam::123456789012:saml-provider/adfs" } ] }
相关信息
- 语言
- 中文 (简体)
