自动将 S3 对象设置为公开

自动将 S3 对象设置为公开

我设置了一个 amazon workmail 电子邮件地址,用于自动将电子邮件转发到 s3 bucket。然后我有一个 php 文件,用于从 s3 bucket 中抓取原始电子邮件文件,然后将其删除(每 2 分钟一次)。

无论如何,我的问题是我将 s3 存储桶设置为公共访问。但是,当将对象放入存储桶时,不会自动为其授予公共访问的权限级别。所以我认为我做错了什么?

我正在使用 Amazon pkp SDK 通过 IAM_KEY 和 IAM_SECRET 连接到存储桶。但是我发现我仍然必须手动将存储桶中的对象设为公开才能访问它们??

这是我的 aws sdk 代码

 //Include the AWS SDK using the Composer autoloader.
require 'awssdk/aws-autoloader.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;
// AWS Info
$bucketName = 'pipedemail';
$IAM_KEY = '***';
$IAM_SECRET = '***';
// Connect to AWS
try {
    // You may need to change the region. It will say in the URL when the bucket is open
    // and on creation. us-east-2 is Ohio, us-east-1 is North Virgina
    $s3 = S3Client::factory(
        array(
            'credentials' => array(
                'key' => $IAM_KEY,
                'secret' => $IAM_SECRET
            ),
            'version' => 'latest',
            'region'  => 'us-east-1'
        )
    );
} catch (Exception $e) {
    // We use a die, so if this fails. It stops here. Typically this is a REST call so this would
    // return a json object.
    die("Error: " . $e->getMessage());
}

答案1

我相信您可能只具有列表的公共访问权限,但您还必须授予对象级别的读取权限。(这将向公众开放,因此请小心)

尝试检查存储桶策略: https://docs.aws.amazon.com/cli/latest/reference/s3api/get-bucket-policy.html 或者 https://docs.aws.amazon.com/AmazonS3/latest/user-guide/bucket-permissions-check.html

您能否发布类似以下类型的政策:

aws s3api get-bucket-policy --bucket pipedemail --query Policy --output text > policy.json

相关内容