在兼容的S3存储上获取Invalid_Signature_V4_Authorization_Header。

问题描述 投票:1回答:1

我有一个问题,要连接我的laravel应用程序与S3兼容的存储。它是由IONOS托管的 (链接到文件). 由于我需要一个不同的基础URL,我安装了一个包 exulalaravel-存储空间-rados-s3。,让我可以配置这个。我在 filesystem.php 中有这个配置 (在 env 函数中设置了默认值,它们被使用):

'ionos_s3' => [
        'driver' => 'ceph',
        'base_url' => env('IONOS_URL'),
        'port' => env('S3_PORT', 443),
        'scheme' => env('S3_SCHEME', 'https'),
        'tls_verify' => env('S3_TLS_VERIFY', true),
        'timeout' => env('S3_TIMEOUT', 10),
        'credentials' => [
            'key' => env('IONOS_ACCESS_KEY_ID'),
            'secret' => env('IONOS_SECRET_ACCESS_KEY'),
        ],
        'region' => '',
        'bucket' => env('IONOS_BUCKET'),
        'signature_version' => 'v4',
        'version' => 'latest',
        // Set the S3 class to use objects.dreamhost.com/bucket
        // instead of bucket.objects.dreamhost.com
        'use_path_style_endpoint' => env('IONOS_PATH_STYLE_ENDPOINT', false),

        'cache' => [
            'store' => 'database',
            'expire' => 18000, #Cache S3 files for 5 hours
            'prefix' => 'cache-prefix',
        ],

但我可以做我想要的。我总是得到以下错误信息。

Aws\S3\Exception\S3Exception

Error executing "PutObject" on "https://s3-de-central.profitbricks.com/BUCKET/32/"; 
    AWS HTTP error: Client error: `PUT https://s3-de-central.profitbricks.com/BUCKET/32/` 
    resulted in a `400 Bad Request` response: 
<?xml version="1.0" encoding="UTF-8"?>
<Error>
  <Code>Invalid_Signature_V4_Authorization_Header</Code>
  <Message>Null/Empty S (truncated...) Invalid_Signature_V4_Authorization_Header (client): Null/Empty SigningKey/IsoDate/Signature -     

<?xml version="1.0" encoding="UTF-8"?>
    <Error>
      <Code>Invalid_Signature_V4_Authorization_Header</Code>
      <Message>Null/Empty SigningKey/IsoDate/Signature</Message>
      <RequestId>e7bd3a56-7882-1fc1-b68e-0cc47af2c498</RequestId>
      <HostId>FVqRz72LCRTiUvVKH-VpiEXa5EX3643IbdE6Tyu0-FE</HostId>
    </Error>

不幸的是,我在网上找不到任何提示,这个错误是什么?Invalid_Signature_V4_Authorization_Header(无效签名) 我也很惊讶,虽然use_path_style_endpoint被设置为false,但请求仍然针对objects.dreamhost.comucket而不是bucket.objects.dreamhost.com。

php laravel amazon-s3
1个回答
0
投票

我终于解决了这个问题。我使用了包leagueflysystem-aws-s3-v3(Laravel建议的). 用下面的配置(.env文件)它终于工作了:

S3_ACCESS_KEY_ID=[ACCESS_KEY]
S3_SECRET_ACCESS_KEY=[SECRET]
S3_DEFAULT_REGION=s3-de-central
S3_BUCKET=[BUCKET_NAME]
S3_URL=https://s3-de-central.profitbricks.com
AWS_URL=https://s3-de-central.profitbricks.com
© www.soinside.com 2019 - 2024. All rights reserved.