我试图允许自己下载S3存储桶中的现有文件.我修改了Bucket Policy,如下所示:
{
"Sid": "someSID",
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::bucketname/AWSLogs/123123123123/*",
"Principal": {
"AWS": [
"arn:aws:iam::123123123123:user/myuid"
]
}
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,添加到策略应该为我的帐户"myuid"提供"bucketname"的完全权限,包括该桶中已有的所有文件.但是,当我尝试通过控制台中出现的链接下载任何这些文件时,我仍然会收到Access Denied错误.
有什么想法吗?
我正在尝试设置Amazon Simple Storage Service以用于rails.我收到此错误消息:
The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.
Run Code Online (Sandbox Code Playgroud)
问题是我选择了法兰克福S3区域,并且只支持V4方案.这是在相同的错误消息这个职位,这将指导您解决 在这里,讲解如何"的设置:s3_signature_version参数:构建客户端时V4".命令是:
s3 = AWS::S3::Client.new(:s3_signature_version => :v4)
Run Code Online (Sandbox Code Playgroud)
我的问题是,我该怎么做?我在哪里放这个代码?
编辑:
我尝试:s3_signature_version => :v4按如下方式放入carrier_wave.rb,但在上传到heroku期间,它说[fog][WARNING] Unrecognized arguments: s3_signature_version,并没有任何区别,我仍然得到错误.
配置/初始化/ carrier_wave.rb:
if Rails.env.production?
CarrierWave.configure do |config|
config.fog_credentials = {
# Configuration for Amazon S3
:provider => 'AWS',
:aws_access_key_id => ENV['S3_ACCESS_KEY'],
:aws_secret_access_key => ENV['S3_SECRET_KEY'],
:s3_signature_version => :v4
}
config.fog_directory = ENV['S3_BUCKET']
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:
我已经使用北加利福尼亚地区创建了一个新的存储桶,为此不应该是一个问题,但我仍然得到完全相同的错误消息.
编辑:
这也没有任何区别:
if Rails.env.production?
CarrierWave.configure do |config| …Run Code Online (Sandbox Code Playgroud) 使用Java8和aws-java-sdk 1.10.43我正在尝试获取一个S3文件的预签名URL.我确实找回了一个链接,但浏览它会导致此错误:
您提供的授权机制不受支持.请使用AWS4-HMAC-SHA256
为了强调,我希望生成一个可以通过电子邮件发送并在浏览器中打开的URL,而不是使用Java代码从该URL读取.
我正在使用波纹管代码,我相信我发现我需要以某种方式设置setSSEAlgorithm来使用"v4",但是我没能使它工作.我错过了什么?我应该配置什么(注意:我故意避免配置文件,我希望代码从环境变量设置所有属性)
Date expiration = <some date>;
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, targetPath);
generatePresignedUrlRequest.setMethod(HttpMethod.GET);
generatePresignedUrlRequest.setExpiration(expiration);
AmazonS3 s3client = new AmazonS3Client(s3Credentials);
URL s = s3client.generatePresignedUrl(generatePresignedUrlRequest);
Run Code Online (Sandbox Code Playgroud)
铲斗位于欧洲中心1号
谢谢