方案:
我在亚马逊上创建了一个应用程序,并使用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中调用它呢?或者我错过了其他任何过程吗?
答案 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 实例进行进一步操作。