如何调用AssumeRoleWithWebIdentity来访问Amazon DynamoDB?

时间:2013-12-13 02:17:34

标签: amazon-web-services amazon-dynamodb amazon-iam

方案:
我在亚马逊上创建了一个应用程序,并使用Login with Amazon,它返回“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中调用它呢?或者我错过了其他任何过程吗?

2 个答案:

答案 0 :(得分:1)

Getting Temporary Credentials的过程确实需要拨打AssumeRoleWithWebIdentity - 这个低级API调用隐含在更高级AWS SDK for JavaScript凭据提供商调用new AWS.WebIdentityCredentials()中,例如,请参阅Class: AWS.WebIdentityCredentials

  

表示从STS Web Identity Federation检索到的凭据   支持。

     

默认情况下,此提供程序使用   AWS.STS.assumeRoleWithWebIdentity()服务操作。这个操作   需要一个RoleArn,其中包含IAM信任策略的ARN   将提供凭证的申请。除此之外   必须将WebIdentityToken设置为标识提供的标记   供应商。有关创建凭据的示例,请参阅constructor()   具有适当RoleArn和WebIdentityToken值的对象。

鉴于错误消息“配置中缺少凭据”,您显然传递了错误的WebIdentityToken,鉴于您刚刚指定了一些?????????占位符,这并不奇怪;) - 因为你已经使用Login with Amazon,它返回一个access_token ,你只需要传递该ACCESS_TOKEN的内容而不是那些?????????占位符作为{{1}的值并且应该全部设置。

答案 1 :(得分:0)

以这种方式使用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&gt;用户&gt;安全凭证&gt;访问密钥

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