如何使用联合用户获取 AWS STS?

How to get AWS STS using Federated User?

我正在尝试通过联合用户通过公司帐户获取临时 STS 凭据。公司政策不允许使用 IAM 用户,身份验证是通过 AD 完成的。

我正在尝试使用 AWS Cli,但收到错误

aws sts assume-role --role-arn arn:aws:iam::<ID>:role/aws-service-role/ecs.amazonaws.com/<role> --role-session-name "Rolesession1" --external-id <federated user login> --debug

AWS 配置:

[default]
region = us-east-1
output = json

[default]
aws_access_key_id =
aws_secret_access_key =
aws_session_token =

堆栈跟踪:

调用 AssumeRole 操作时发生错误 (InvalidClientTokenId):请求中包含的安全令牌无效。 2019-01-29 09:15:54,986 - MainThread - awscli.clidriver - 调试 - 以 rc 255

退出

调用 AssumeRole 操作时发生错误 (InvalidClientTokenId):请求中包含的安全令牌无效。}

您需要在 Active Directory 上配置 SAML(使用 ADFS)并通过 SAML 联合 AWS CLI。

本文逐步说明了操作方法:https://aws.amazon.com/premiumsupport/knowledge-center/adfs-grant-ad-access-api-cli/

好的,我成功了。目前这是一个两步过程。

  1. 我使用了这个代码 Amazon Provided STS credential refresh。这会将您的凭据写入 ~/.aws/credentials。您的用户名和密码是您登录公司网络所使用的。
  2. 您现在可以使用 AWS_CLI 访问 AWS API。这也适用于 Ansible 剧本。您需要从 ~/.aws/credential 文件中查找凭据,方法是将它们放入 vars.yaml 文件中,或者直接在您的剧本中查找,如下所示:
ec2_access_key: "{{ lookup('ini', 'aws_access_key_id section=saml file=~/.aws/credentials') }}"
ec2_secret_key: "{{ lookup('ini', 'aws_secret_access_key section=saml file=~/.aws/credentials') }}"
ec2_security_token: "{{ lookup('ini', 'aws_session_token section=saml file=~/.aws/credentials') }}"