如何使用通过亚马逊Kendra中的saml2aws登录生成的凭据?

问题描述

我正在尝试使用亚马逊Kendra测试我的搜索应用程序。我利用了文档-> https://docs.aws.amazon.com/kendra/latest/dg/deploying.html随附的代码。 我正在使用saml2aws从我的计算机登录到AWS,这会生成以下密钥

aws_access_key_id = ***
aws_secret_access_key = ****
aws_session_token = ***
aws_security_token= ***
x_principal_arn=**
x_security_token_expires= **
region= ***

就像在aws提供的搜索应用程序代码中一样,它使用aws-sdk,而对于身份验证则使用以下代码,该代码仅使用三个值。当我在配置文件中插入由saml2aws生成的值时,它抱怨“请求中包含的安全令牌无效”。当我尝试添加上面生成的会话令牌时,它也不起作用。在这种情况下如何传递通过saml2aws登录生成的凭据。

export const Kendra = !hasErrors
? new Kendra({
   accessKeyId: config.accessKeyId,secretAccessKey : ...
   region : ..
})
: undefined

解决方法

在初始化Kendra客户端时,请同时包含会话令牌。您引用的代码示例仅演示了初始化Kendra客户端的不同方法之一。 AWS JS SDK允许您在初始化Kendra客户端时传递更多参数(读取this)作为选项(sessionToken是其中之一)。 如果即使在通过sessionToken之后,您的凭据仍然无法使用,则很可能是您使用过期的会话令牌(session tokens are valid for a max time of 12 hours)的情况。我可以推荐三种解决此问题的方法:

  1. 使用长期凭证来初始化Kendra客户端
  2. 您将自己的Web服务器放在UX和Kendra之间。后端中的此Web服务器可以使用长期存在的凭据来调用Kendra API。这样一来,您就不会泄漏UX代码中的凭据。
  3. 使用Cognito拨打Kendra服务。请refer on how Amplify可以帮助您

上面提到的所有三个选项都应该能够摆脱sessionToken过期限制。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...