我正在嘗試生成預簽名 URL 以將物件上傳到 S3 存盤桶,但是每當我對預簽名 URL 執行 PUT 請求時,我都會收到“拒絕訪問”錯誤。這是我用來生成 URL 的代碼(在節點 lambda 函式內運行):
app.post('/upload', async (req, res) => {
const filename = `${uuid()}.jpg`;
const url = s3.getSignedUrl('putObject', {
Bucket: BucketName,
Key: filename,
Expires: 3600,
ContentType: 'image/jpeg',
ACL: 'public-read',
});
res.status(200).json({ url, filename });
});
這是我的serverless.yml檔案中的權限:
service: my-service
provider:
name: aws
runtime: nodejs12.x
profile: my-profile
region: eu-west-2
iamRoleStatements:
- Effect: 'Allow'
Action:
- 's3:PutObject'
- 's3:PutObjectAcl'
Resource:
- !GetAtt galleryBucket.Arn
uj5u.com熱心網友回復:
我正在將PutObject和PutObjectAcl權限應用于galleryBucket而不是其中的物件。
您必須將PutObject權限應用于存盤桶內的物件,而不是存盤桶本身
我更新了我的權限,并且 PUT 請求成功:
service: my-service
provider:
name: aws
runtime: nodejs12.x
profile: my-profile
region: eu-west-2
iamRoleStatements:
- Effect: 'Allow'
Action:
- 's3:PutObject'
- 's3:PutObjectAcl'
Resource:
Fn::Join: ['', ['arn:aws:s3:::', !Ref galleryBucket, '/*']]
請注意/*資源識別符號末尾的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/400800.html
標籤:亚马逊网络服务 亚马逊-s3 aws-lambda 亚马逊 无服务器框架
