【发布时间】:2019-09-28 12:47:36
【问题描述】:
我正在尝试使用 AWS SDK PHP 生成的预签名帖子将文件(用于我的测试的图像)上传到我的 s3 存储桶。 首先,我生成预签名的帖子,然后我使用 Postman 或通过简单的 html 表单使用给定的 PostObjectV4 数据手动创建请求...... 填写完所有内容后,请求导致访问被拒绝:-(。 与客户端关联以生成 PostObjectV4 的用户在相应的存储桶上具有 Allowed s3:PutObject 策略。
我已经尝试过:
- 将我的存储桶设置为公共写入,它可以工作!这表明我存在权限/政策问题...不幸的是,我的存储桶不必公开...
- 通过aws命令行上传文件,也可以使用
预签名后生成的 PHP 代码(数据在 $postObject 中):
$assetAwsS3Key = $this->getAssetAwsS3Key($asset);
$options = [
['starts-with', '$key', 'myDir/'],
];
// Optional: configure expiration time string
$expires = '+24 hours';
// Set some defaults for form input fields
$formInputs = ['acl' => 'private'];
$postObject = new PostObjectV4(
$this->buildAwsS3UserClient(),
$this->awsBucketName,
$formInputs,
$options,
$expires
);
// Get attributes to set on an HTML form, e.g., action, method, enctype
$formAttributes = $postObject->getFormAttributes();
// Get form input fields. This will include anything set as a form input in
// the constructor, the provided JSON policy, your AWS access key ID, and an
// auth signature.
$formInputs = $postObject->getFormInputs();
return ['formAttributes' => $formAttributes, 'formInputs' => $formInputs];
我的用户(用于生成客户端)政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::awsBucketName/*"
]
}
]
}
我用于测试上传的简单 html 表单:
<form method="post" action="https://my-bucket.s3.eu-west-3.amazonaws.com" enctype="multipart/form-data">
<input type="hidden" name="key" value="myKey/sources/myImg.jpg" /><br />
<input type="file" name="file" /> <br />
<input type="hidden" name="X-Amz-Credential" value="MYUSERACCESSKEY/20190510/eu-west-3/s3/aws4_request" />
<input type="hidden" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" />
<input type="hidden" name="X-Amz-Date" value="20190510T132109Z" />
<input type="hidden" name="Policy" value='MYBASE64ENCODEDPOLICY' />
<input type="hidden" name="X-Amz-Signature" value="MYSIGNATURE" />
<input type="submit" name="submit"/>
</form>
您是否知道为什么此上传失败,而存储桶不允许公共写入访问?
提前非常感谢!
【问题讨论】:
-
你有没有想过解决这个问题?我有同样的问题,很想知道答案。
-
嗨@JeremyGlover,请检查我对帖子的新答案,评论太长了,希望我们能帮到你,或者你已经解决了这个问题;)
标签: php amazon-s3 amazon-iam aws-php-sdk