[英]AWS S3 Upload to Frankfurt region using PHP SDK - Access denied error
[英]AWS S3 Upload Access Denied through Presigned post generated with AWS-SDK PHP
我正在嘗試使用 AWS SDK PHP 生成的預簽名帖子將文件(用於我的測試的圖像)上傳到我的 s3 存儲桶。 首先,我生成預簽名的帖子,然后我使用 Postman 或通過簡單的 html 表單手動創建具有給定 PostObjectV4 數據的請求......填寫完所有內容后,請求結果拒絕訪問:-(。與客戶端關聯的用戶在相應的存儲桶上生成 PostObjectV4 已 Allowed s3:PutObject 策略。
我已經嘗試過:
預簽名后生成的 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>
您知道為什么此上傳失敗而存儲桶不允許公開寫訪問權限嗎?
提前謝謝了 !
我解決了這個問題,我將分享自我第一次發帖以來我在此處所做的更改,以使上傳工作正常進行。 如有必要,請根據您的需要進行調整。
該AWS配置中使用: -相同的線內政策附在我的用戶在第一篇文章(請確保您在資源鍵設置區名稱) - S3桶連接到它沒有政策- S3存儲在所有公共訪問已禁用
這是我用於創建 postObject 的最新 php 代碼:
$objectKey = $this->objectKeyGenerator->getObjectKey($object);
$options = [
['bucket' => $this->getBucketName()],
['eq', '$key', $objectKey],
['acl' => 'private']
];
// Optional: configure expiration time string
$expires = '+2 hours';
// Set some defaults for form input fields
$formInputs = [
'acl' => $acl,
'key' => $objectKey
];
$postObject = new PostObjectV4(
$this->getS3Client(),
$this->getBucketName(),
$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];
與我的第一篇文章相比,postObject 生成有哪些變化:
我試圖通過從 $option 數組中刪除存儲桶和acl來重現錯誤,這導致了“403 禁止錯誤”,但有一條消息指出“根據策略無效:額外輸入字段:存儲桶”,我覺得這不是很明顯...我沒有對這個錯誤進行更多調查。
我還分享了我的 html 表單,該表單自第一次發布以來發生了一些變化,輸入字段的順序發生了變化,並且添加了 acl 字段,因為政策要求。
<form method="post" action="https://my-bucket.s3.eu-west-3.amazonaws.com/" enctype="multipart/form-data">
<input type="hidden" name="key" value="object/key.txt" /><br />
<input type="hidden" name="acl" value="private"/>
<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="20200108T093921Z" />
<input type="hidden" name="Policy" value='MYBASE64ENCODEDPOLICY' />
<input type="hidden" name="X-Amz-Signature" value="MYSIGNATURE" />
File:
<input type="file" name="file" /> <br />
<!-- The elements after this will be ignored -->
<input type="submit" name="submit"/>
總而言之,在我原來的帖子中,我沒有談論我的 s3 存儲桶公共訪問和策略配置,我認為問題可能出在這里。
希望這會有所幫助,如有需要,請隨時詢問詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.