使用从AssumeRoleWithSAML收到的现有令牌刷新AWS STS令牌

时间:2018-03-16 08:59:38

标签: amazon-web-services amazon-s3 aws-sts

我有一个用例,我需要为每个经过身份验证的用户提供临时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信任策略,其中一种方法是在现有SAML信任策略中添加“AssumeRole”条目,如下所示(策略中的第二项)

{
  "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:assume-role / testapp / testuser”的STS用户,因为他/她可以担任该角色,因此可以刷新令牌。但我需要一种通用的方式,对于任何登录用户,他都可以生成STS令牌。

一种方法是在Principal的Trust策略中使用通配符,但看起来它不受支持。所以每次令牌到期时我都会坚持使用凭证。有办法解决这个问题吗?

感谢, 罗汉。

2 个答案:

答案 0 :(得分:1)

我已经能够通过在IAM信任策略中指定角色而不是假定角色来使其正常工作。现在,如果我的用户已经扮演testapp角色,则可以无限刷新其令牌。

"Principal": {
  "AWS": "arn:aws:sts::xxxxxxxxxxxx:role/testapp"
},

答案 1 :(得分:0)

AWS STS支持AssumeRole * API更长的角色会话(最多12小时)。这是在3/28/18发布的,这是AWS whats-new链接:https://aws.amazon.com/about-aws/whats-new/2018/03/longer-role-sessions/。因此,我不需要进行刷新,因为我假设一个典型的工作日是< 12小时: - )