lex*_*ore 6 amazon-web-services openid-connect amazon-cognito
我已经使用通过 Cognito 用户池连接的 OIDC 身份提供商 (SalesForce) 设置了 ALB 内置身份验证,或多或少遵循本指南。
有了这个设置我的web应用程序(Java /弹簧引导为主)接收头x-amzn-oidc-accesstoken,x-amzn-oidc-identity并 x-amzn-oidc-data用ALB转发。
我可以解析和验证这些标头中包含的 JWT 令牌,例如,从那里获取用户的电子邮件。
现在我的目标是让这个经过身份验证的用户通过 AWS JavaScript SDK 直接从客户端访问某些 AWS 资源或服务。例如,我希望用户能够列出 S3 存储桶上的对象或调用某些 lambda 函数。
我的理解是我需要为这个经过身份验证的用户生成临时凭证。但是我找不到有关如何执行此操作的特定文档。最接近的热门歌曲是:
但我无法连接那里的点。我的期望是我可能应该以某种方式使用x-amzn-oidc-accesstoken,x-amzn-oidc-identity和 x-amzn-oidc-data标头,但我没有找到任何可以做到这一点的代码。
所以我的问题是:如何为通过 Cognito 和 OIDC 身份提供者使用内置 ALB 身份验证进行身份验证的用户生成临时凭证?
您需要采取多个步骤才能实现这一目标。
首先是创建一个适当的 IAM 角色,您将让您的用户代入。如果您想为您的用户提供 S3 访问权限,那么您需要以这种方式定制 IAM 角色,并设置该角色之间的信任关系WebIdentity(如果您转到控制台 -> IAM -> 角色 -> 创建角色,您将看到此选项位于屏幕顶部 -Select type of trusted entity并根据您实际的 OIDC 提供商配置提供商)。
一旦您拥有该角色,您将需要将当前拥有的 WebIdentity 令牌交换为 STS 令牌。在您的情况下,您需要调用sts.assume_role_with_web_identity函数(这是 SDK 的一部分),您需要在其中指定
RoleArn- 上面创建的角色的 arn,该角色将由您的用户承担RoleSessionName- 会话用户的名称(可以是任意字符串)WebIdentityToken- 符合 OIDC 的代币(您当前拥有的代币)Duration- 返回的凭据的有效期限是多长时间拨打电话后,您将收到包含以下内容的回复:
'Credentials': {
'AccessKeyId': 'string',
'SecretAccessKey': 'string',
'SessionToken': 'string',
'Expiration': datetime(2015, 1, 1)
},
...
Run Code Online (Sandbox Code Playgroud)
重要的部分是AccessKeyId、SecretAccessKey和SessionToken。这些临时凭证可用于从您的代码直接调用 S3、Lambda 或任何其他 AWS 服务,但您需要配置当前使用的 SDK 来包含它们。完成所有这些后,您应该可以顺利进行,没有任何问题。
| 归档时间: |
|
| 查看次数: |
1903 次 |
| 最近记录: |