我正在嘗試編寫一個簡單的JavaScript(在瀏覽器中運行),它將通過describeApplications函數獲取有關我的Beanstalk應用程序的信息。我創建了具有未經身份驗證的訪問複選框集的Cognito身份池,並將AWSElasticBeanstalkReadOnlyAccess策略附加到身份池的角色。使用Cognito對AWS服務的未經身份驗證的訪問
下面是代碼:
<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)}
應用陣列是空的!但我在歐盟西部地區肯定有應用。
爲了做一個簡單的測試,我創建了一個用戶,附着相同的策略和硬編碼的用戶憑據,而不是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);
}
});
瞧,我看到我的魔豆的應用:
{ResponseMetadata: {…}, Applications: Array(1)}
我做過其他測試。我試圖列出S3 bucket with unauth。訪問和Cognito - 它也可以。這意味着我的不道德。角色被正確地附加和應用。但我不知道,爲什麼我看不到豆莢裏的應用程序!
我在做什麼錯誤的未經認證的訪問和Cognito?任何幫助將非常感激!
更新!
感謝Mike Patrick指出正確的方向! 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
}
});
}
});
您對該角色的IAM策略是什麼樣的?看起來你可能在'Resource'的某處丟失了一個通配符。 – arjabbar
這是缺省AWS策略AWSElasticBeanstalkReadOnlyAccess,其中「Resource」爲「*」。爲測試用戶和認證角色附加相同的策略。 –
事實上,你看到一個響應,儘管它有一個空的數組,這是一個跡象表明它正在工作。否則,你會看到一個異常。雙重和三重檢查區域? – jarmod