我正在尝试对带有自定义端点的S3存储桶使用预签名的url。我似乎很亲近,但我不断收到“方法不允许”错误。这是我的位置。
我有一个API网关,可将端点连接到Lambda函数。除其他外,该函数会生成一个预签名的url。像这样
var s3 = new AWS.S3({
endpoint: 'custom.domain.com/upload',
s3BucketEndpoint: true,
signatureVersion: 'v4'
});
//...
s3.getSignedUrl('putObject', {
ACL: 'bucket-owner-full-control',
Bucket: process.env.S3_BUCKET_NAME,
ContentType: "image/png",
Key: asset.id + ".png"
};
此代码成功返回了一个URL,该URL似乎是所有正确的查询参数,正确的键名,并且该URL指向我的端点。但是,当尝试上传时,出现以下错误:
MethodNotAllowed
不允许对此资源使用指定的方法。PUTSERVICE[请求ID在这里] [主机ID在这里]
如果我从S3配置中删除了自定义终结点声明,则会收到带有标准域前缀的预签名url,并且上传正常。
关于我的设置的其他说明。
我想念什么吗?这可能吗?我计划禁用自定义终结点,并暂时使用默认的预签名URL前进,但是从长远来看,我希望自定义终结点。最坏的情况是,我可能会为某些AWS支持付费。
感谢您的帮助!
答案 0 :(得分:0)
我找不到说明预签名URL支持代理(alt /自定义域)的文档。 IMO的用例用于验证和授予请求从API网关对AWS资源的访问权限(无论您是否代理S3)将使用带有w / lambda的API网关授权者来允许请求承担以下IAM角色:有权访问AWS资源(在本例中为s3存储桶中的PUT OBJECT)
https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html