我正在尝试编写一个简单的 JavaScript(在浏览器中运行),它将通过 describeApplications 函数获取有关我的 Beanstalk 应用程序的信息。我创建了带有未经身份验证的访问复选框的 Cognito 身份池,并将 AWSElasticBeanstalkReadOnlyAccess 策略附加到身份池的角色。
这是代码:
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.134.0.min.js"></script>
<script>
AWS.config.region = 'eu-west-1'; // Region
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'eu-west-1:....',
});
var elasticbeanstalk = new AWS.ElasticBeanstalk();
elasticbeanstalk.describeApplications({}, function (err, data) {
if (err) {
console.log(err);
console.log(err.stack);
} else {
console.log(data);
}
});
这是控制台中的输出:
{ResponseMetadata: {…}, Applications: Array(0)}
应用程序数组为空!但我肯定在 eu-west-1 地区有申请。
为了进行简单的测试,我创建了一个用户,附加了相同的策略和硬编码的用户凭据,而不是 CognitoIdentityCredentials:
<script src="https://sdk.amazonaws.com/js/aws-sdk-2.134.0.min.js"></script>
<script>
AWS.config.region = 'eu-west-1'; // Region
AWS.config.accessKeyId = '...';
AWS.config.secretAccessKey = '...';
var elasticbeanstalk = new AWS.ElasticBeanstalk();
elasticbeanstalk.describeApplications({}, function (err, data) {
if (err) {
console.log(err);
console.log(err.stack);
} else {
console.log(data);
}
});
瞧,我看到了我的 beanstalk 应用程序:
{ResponseMetadata: {…}, Applications: Array(1)}
我做过其他测试。我尝试使用 unauth 列出 S3 存储桶。访问和认知 - 它也有效。这意味着我的未授权。角色被正确附加和应用。但我不知道,为什么我在 beanstalk 中看不到任何应用程序!
我在未经身份验证的访问和 Cognito 上做错了什么?任何帮助将不胜感激!
更新!
感谢迈克帕特里克指出正确的方向!https://stackoverflow.com/a/46820122/1858818
我切换到基本身份验证流程,就是这样。这是代码的工作部分:
AWS.config = {
apiVersions: { elasticbeanstalk: '2010-12-01' },
region: 'eu-west-1',
credentials: new AWS.WebIdentityCredentials({
RoleArn: 'my role arn'
})
};
var cognitoidentity = new AWS.CognitoIdentity(),
elasticbeanstalk = new AWS.ElasticBeanstalk();
var params = {
IdentityPoolId: 'my cognito identity pool id', /* required */
};
cognitoidentity.getId(params, function(err, data) {
if (err){
console.log(err, err.stack); // an error occurred
} else {
var params = {
IdentityId: data.IdentityId
};
cognitoidentity.getOpenIdToken(params, function(err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
} else {
AWS.config.credentials.params.WebIdentityToken = data.Token;
//here we go, elasticbeanstalk functions work as expected
}
});
}
});