如何调用AssumeRoleWithWebIdentity访问Amazon DynamoDB



场景:
我在亚马逊上创建了一个应用程序,并使用登录亚马逊,它返回一个"access_token"。然后我运行:

  AWS.config.credentials = new AWS.WebIdentityCredentials({
          RoleArn: 'arn:aws:iam::416942672???:role/???_amazon_role',
          ProviderId: 'www.amazon.com',
          WebIdentityToken:"?????????"
        });
  AWS.config.region = 'us-west-2';
  dynamodb =  new  AWS.DynamoDB()   dynamodb.listTables({}, function a(error,data){
    alert( "error: " +  JSON.stringify(error) );
    alert( JSON.stringify(data) );
    });

当我稍后运行ListTable函数时,它将返回:

error: {"message":"Missing credentials in config","code":"SigningError","name":"SigningError","statusCode":403,"retryable":false}

我发现我似乎不得不打电话给AssumeRoleWithWebIdentity。但是我如何在AWS SDK for JavaScript中调用它呢?或者还有其他我错过的过程吗?

获取临时凭据的过程确实需要调用AssumeRoleWithWebIdentity-此低级API调用隐含在更高级别的AWS SDK for JavaScript凭据提供程序调用new AWS.WebIdentityCredentials()中,请参见例如class:AWS.WebIdentityCredentials:

表示从STS Web标识联合检索的凭据支持

默认情况下,此提供程序使用AWS.STS.assumeRoleWithWebIdentity()服务操作。此操作要求RoleArn包含IAM信托政策的ARN将为其提供凭据的应用程序。此外WebIdentityToken必须设置为标识提供的令牌提供商。有关创建凭据的示例,请参见constructor()对象具有正确的RoleArn和WebIdentityToken值。

考虑到错误消息"配置中缺少凭据",您显然传递了不正确的WebIdentityToken,这并不奇怪,因为您只指定了一些?????????占位符;)-由于您已经使用Login with Amazon,返回access_token,因此您只需要传递该access_token的内容,而不是?????????占位符作为WebIdentityToken的值,并且应该全部设置。

  • 对于其他读者:第6节。在浏览器中配置Web身份联合会的提供了一个通过Facebook登录检索访问令牌的示例。如前所述,其他身份提供商将有类似的设置步骤,包括加载相应的SDK、登录和接收访问令牌,特别是如何处理亚马逊登录在Getting Started for Web中有详细说明

以这种方式使用AWS实例:

  var aws = AWS ;
  var region = aws.config.region = 'us-east-1';
  var cred = new aws.Credentials(<YOUR_ACCESS_KEY_ID>, 
            <YOUR_SECRET_ACCESS_KEY>, sessionToken = null);

要获取ACCESS KEY ID和SECRET ACCESS_KEY,请访问:

AWS IAM>用户>安全凭据>访问密钥

现在使用aws实例进行进一步操作。

相关内容

  • 没有找到相关文章