我有一个用例,我需要为每个经过身份验证的用户提供临时 AWS STS 令牌(使用公司 IDP 进行身份验证)。这些令牌将用于在 AWS S3 中推送一些数据。通过在 IDP 响应中使用 SAML 断言并与 AWS 作为 SP(IDP 发起的登录)集成,我能够获得此流程,类似于此处显示的。
但由于 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 令牌。
一种方法是在委托人的信任策略中使用通配符,但看起来它不受支持。因此,每次令牌过期时,我都会坚持使用凭据。有没有办法解决这个问题?
谢谢,罗汉。