我正在為我的nodejs應用程式使用elasticbeanstalk。我試圖將物件上傳到S3 Bucket,也試圖讀取物件,但我得到了AccessDenied錯誤。
糟糕的是,我可以從本地執行這些操作。所以我認為問題不在IAM用戶身上。而是桶中的策略,但我不確定。
我在桶中添加了一個策略:
{
"版本": "2012-10-17",
"宣告"。[
{
"Sid": "AddCannedAcl",
"效果": "允許"。
"Principal": {
"AWS": [
"arn:aws:iam::000000000000:user/myuser",
"arn:aws:iam::00000000:role/aws-elasticbeanstalk-service-role"
]
},
"行動"。"*",
"資源"。[
"arn:aws:s3::my-bucket"。
"arn:aws:s3:::my-bucket/*"
],
"條件"。{
"StringEquals": {
"s3:x-amz-acl": "公共-閱讀"
}
}
}
]
}
但是仍然不能使它作業。我已經把所有的東西都公開了(我不想要的),只是為了測驗,但即使這樣也不能上傳或讀取物件。
誰能幫我解決這個問題。我發現AWS中的角色和策略真的很難理解。另外,有沒有什么教程或指南可供學習,以便我能夠提高關于這個主題的技能?我總是為aws中的權限問題而苦惱。
錯誤:
Error: AccessDenied: 訪問被拒絕
async uploadFileToS3(params: any) {
嘗試 {
const s3UploadResult = await this.s3.upload(params).promise()。
回傳s3UploadResult。
} catch (error) {
拋出新的錯誤(error)。
}
}
const params = {
Bucket: 'my-bucket',
Key: `${new Date()}.pdf`,
Body: req.files ? req.files.file.data : file.buffer。
ACL: 'public-read'
};
const result = await this.awsService.uploadFileToS3(params)。
非常感謝!
uj5u.com熱心網友回復:
仔細檢查所有的策略操作,當你關心:
"Resource": "arn:aws:s3::mybuild"
你允許對水桶本身進行操作,
而不是 "在其中"。
而不是 "在它里面 "或 "在它里面的物件上"
如果允許在桶內的行動,那么就必須允許在桶內的行動。
要允許在桶內的行動,你應該使用:
"Resource": "arn:aws:s3::mybuild/*"
如果你需要這兩樣東西,你可以將你的策略更新為:
"資源": ["arn:aws:s3::mybuild", "arn:aws:s3::mybuild/*"]
幾個關于桶策略的典型使用案例的例子。 https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-policies-s3.html
對于學習,我強烈推薦這些文章:
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/319205.html
標籤:
上一篇:用預簽名的url PUT請求上傳檔案到AmazonS3,但在"StringToSign"中的"GET"得到錯誤"SignatureDoesNotMat
下一篇:在ASP.NETMVC中,DevExpressPivotGrid控制元件在模式上不起作用,加載條一直彈出,而且不會消失。
