【问题标题】:AWS S3 Upload to Frankfurt region using PHP SDK - Access denied errorAWS S3 使用 PHP 开发工具包上传到法兰克福地区 - 访问被拒绝错误
【发布时间】:2018-07-23 17:11:42
【问题描述】:

在开发环境中,以下代码可以完美地将文件上传到 AWS S3 法兰克福区域,并按照

中所述设置凭证

https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html

PHP

require("aws.phar");
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$bucket = 'my bucket';    
$filepath = 'currentfilepath.jpeg';
$filename = 'newfilename.jpeg';

$s3 = S3Client::factory(array(
    'key'    => 'XXX',
    'secret' => 'YYY',
    'region'  => 'eu-west-2',
    'version' => 'latest'       
));

try {
   $result = $s3->putObject(array(
        'Bucket' => $bucket,
        'Key'    => $filename,
        'SourceFile'   => $filepath,
        'ACL'    => 'public-read'
         ));
  var_dump($result);
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}

但是在部署的环境中,我收到拒绝访问错误。

执行“PutObject”时出错 "https://s3.eu-west-2.amazonaws.com/mybucket/newfilename.jpeg"; AWS HTTP 错误:客户端错误:403 AccessDenied(客户端):访问被拒绝

与开发和部署的唯一区别是我没有开发环境中的凭据文件。我想知道如何在已部署的环境中管理凭据以使其正常工作?

【问题讨论】:

    标签: php amazon-web-services amazon-s3


    【解决方案1】:

    在我看来,Reza Mousavi 的回答应该会有所帮助。

    但是我通过将 AmazonS3FullAccess 添加到 aws-elasticbeanstalk-ec2-role 解决了这个问题。这是从

       IAM control panel >> Roles >> 
       Choose aws-elasticbeanstalk-ec2-role >> Attach Policies:AmazonS3FullAccess
    

    谢谢

    【讨论】:

      【解决方案2】:

      您应该创建新的 API 密钥/密钥并分配正确的 IAM 以访问您的 S3 存储桶并像您之前提到的文档一样发布新凭证:

      https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-credentials.html

      此外,如果您的 EC2 具有公共 IP 地址,您可以通过更改 S3 存储桶策略来授予访问权限:

         {
      "Version": "2012-10-17",
      "Id": "Policy1462808223348",
      "Statement": [
          {
              "Sid": "Stmt1462808220978",
              "Effect": "Allow",
              "Principal": {
                  "AWS": "arn:aws:iam::714656454815:role/ecsInstanceRole"
              },
              "Action": "s3:GetObject",
              "Resource": "arn:aws:s3:::bucket-name/*",
              "Condition": {
                  "IpAddress": {
                      "aws:SourceIp": "YOUR-PUBLIC-IP/32"
                  }
              }
          }
      ]
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        • 1970-01-01
        • 2021-12-26
        • 2021-04-21
        • 2013-12-13
        • 1970-01-01
        • 2021-10-01
        相关资源
        最近更新 更多