我正在尝试向我的存储库做一个帖子,我对formdata的策略应该如何匹配我的水库的策略有些困惑。
@time = Time.now.utc
@time_policy = @time.strftime('%Y%m%dT000000Z')
@date_stamp = @time.strftime('%Y%m%d')
ret = {"expiration" => 1.day.from_now.utc.xmlschema,
"conditions" => [
{"bucket" => Rails.application.secrets.aws_bucket},
{"x-amz-credential": "#{Rails.application.secrets.aws_access_key_id}/#{@date_stamp}/us-west-2/s3/aws4_request"},
{"x-amz-algorithm": "AWS4-HMAC-SHA256"},
{"x-amz-date": @time_policy },
]
}
@policy = Base64.encode64(ret.to_json).gsub(/n|r/, '')
存储策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Allow Get",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-development/*"
},
{
"Sid": "AddPerm",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789:user/example"
},
"Action": "s3:*",
"Resource": ["arn:aws:s3:::example-development/*","arn:aws:s3:::example-development"]
}
]
}
这些匹配吗?我还没有偶然发现任何文档,这些文档并排比较了两者。
条件与策略无关。
条件强制上传的特定属性。例如,{ "{acl": "public-read" }
执行上传的规则必须将ACL设置为public-read
。如果上传未设置该值,则将拒绝上传。
存储策略每当尝试访问Amazon S3时,都会强制执行。因此,"s3:x-amz-acl": "public-read"
说,只要该值是正确的,人们就可以访问存储桶。这是一件非常奇怪的事情,因为该属性仅与PutObject
操作有关。从S3读取对象时,它不适用。
请参阅使用PutObject
的示例中的策略中的指定条件。