Я пытаюсь написать простой JavaScript (работающий в браузере), который будет получать информацию о моих приложениях Beanstalk с помощью функции descriptionApplications. Я создал Cognito Identity Pool с установленным флажком доступа без проверки подлинности и присоединил политику AWSElasticBeanstalkReadOnlyAccess к роли Identity Pool.
Вот код:
<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);
}
});
Here is the output in console:
{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);
}
});
And voila, I see my beanstalk applications:
{ResponseMetadata: {…}, Applications: Array(1)}
Я сделал другие тесты. Я попытался перечислить ведра S3 с помощью unauth. доступ и Cognito - тоже работает. Это означает мою неавторизацию. роль правильно прикреплена и применена. Но я понятия не имею, почему я не вижу приложений в 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
}
});
}
});
Resource
. - person arjabbar   schedule 17.10.2017