3

我有一个用例,我需要为每个经过身份验证的用户提供临时 AWS STS 令牌(使用公司 IDP 进行身份验证)。这些令牌将用于在 AWS S3 中推送一些数据。通过在 IDP 响应中使用 SAML 断言并与 AWS 作为 SP(IDP 发起的登录)集成,我能够获得此流程,类似于此处显示的。

https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml.html#CreatingSAML-configuring

但由于 STS 允许令牌有效期最长为 1 小时,我想在到期前刷新这些令牌,这样我就不必提示用户再次提供凭据(糟糕的用户体验)。此外,由于这些是公司登录凭据,我无法将它们存储在应用程序中。

我正在查看 AWS IAM 信任策略,一种方法是将“AssumeRole”条目添加到现有 SAML 信任策略中,如下所示(策略中的第二个条目)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::xxxxxxxxxxxx:saml-provider/myidp.com"
      },
      "Action": "sts:AssumeRoleWithSAML",
      "Condition": {
        "StringEquals": {
          "SAML:aud": "https://signin.aws.amazon.com/saml"
        }
      }
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::xxxxxxxxxxxx:assumed-role/testapp/testuser"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

因此,当 testuser 第一次使用 AssumeRoleWithSAML API/CLI 登录时,他将获得临时凭证。接下来,他可以将“AssumeRole”API/CLI 与这些凭据一起使用,这样他就可以在不需要 IDP 凭据的情况下继续刷新令牌。

可以看出,这仅适用于 ARN 为“arn:aws:sts::xxxxxxxxxxxx:assumed-role/testapp/testuser”的 STS 用户,用于刷新令牌,因为他/她可以担任该角色。但我需要一种通用方式,对于任何登录用户,他都可以生成 STS 令牌。

一种方法是在委托人的信任策略中使用通配符,但看起来它不受支持。因此,每次令牌过期时,我都会坚持使用凭据。有没有办法解决这个问题?

谢谢,罗汉。

4

3 回答 3

2

我已经能够通过在 IAM 信任策略中指定一个角色而不是假定角色来完成这项工作。现在,如果我的用户担任了​​该testapp角色,他们可以无限期地刷新他们的令牌。

"Principal": {
  "AWS": "arn:aws:sts::xxxxxxxxxxxx:role/testapp"
},
于 2020-01-08T14:06:27.897 回答
0

AWS STS 支持 AssumeRole* API 的更长角色会话(最长 12 小时)。这是于 2018 年 3 月 28 日推出的,这里是 AWS whats-new 链接:https ://aws.amazon.com/about-aws/whats-new/2018/03/longer-role-sessions/ 。因此,您无需刷新,因为我假设典型的工作日小于 12 小时 :-)

于 2018-06-08T19:04:07.983 回答
0

您的问题是我自己正在解决的问题,我们有一个 WPF 桌面应用程序,它试图通过 Okta 登录 AWS,然后使用AssumeRoleWithSaml API 获取 STS 令牌。

使用此流程调用角色链接规则,因此我们的令牌将每小时过期。

我为克服这个问题所做的是缓存来自 Okta 的初始 SAMLResponse 数据(在用户执行 MFA 之后),并使用该信息每 55 分钟请求一个新令牌。然后,我将该新令牌用于任何未来的 AWS 资源调用。

12 小时过去后,我要求用户再次使用 Okta 进行身份验证。

对于那些想知道如何实施自己的 WPF 应用程序的人,我们使用Okta 中的AWS Account Federation 应用程序。

该应用程序使用 2 个包:

在 Okta 中设置您的 AWS Account Federation 应用程序后,在您的应用程序中使用 AWS Embed Url 和 SAML Redirect Url 来获取您的 SAMLResponse 数据。

于 2021-10-20T22:48:57.070 回答