Can access single object from Aws s3 bucket but denied listing objects (SDK for PHP)

42 Views Asked by At

I have access to this bucket as I'm able to pull single files from it as such:

  public function show_s3_object($file_key) {
        $s3_bucket = getenv('S3_BUCKET');
        $s3_key = getenv('S3_KEY');
        $s3_secret = getenv('S3_SECRET');

        if(!empty($file_key))
        {
            $credentials = new Credentials($s3_key, $s3_secret);
            $bucket = $s3_bucket;
            $s3Client = new S3Client([
                'version'     => 'latest',
                'region'      => 'us-east-1', 
                'credentials' => $credentials
            ]);

            $cmd = $s3Client->getCommand('GetObject', [
                'Bucket' => $bucket,
                'Key'    => $file_key
            ]);

            $request = $s3Client->createPresignedRequest($cmd, '+10 minutes');

            $signedUrl = (string) $request->getUri();

            return $signedUrl;
        }
        
    }

However when I list objects I get a 403 forbidden. Now there's multiple ways to do this apparently. I tried most of them like

$cmd = $s3Client->getCommand('ListObjects', [
                'Bucket' => $bucket
            ]);

or

$cmd = $s3client->listObjects([
        'Bucket' => $bucket
    ]);

Currently on this but still 403 error:

 public function list_objects() {
      //correct code semmingly but getting 403 forbidden

        $s3_bucket = getenv('S3_BUCKET');
        $s3_key = getenv('S3_KEY');
        $s3_secret = getenv('S3_SECRET');
        $credentials = new Credentials($s3_key, $s3_secret);
        $s3Client = new S3Client([
            'version'     => 'latest',
            'region'      => 'us-east-1',
            'credentials' => $credentials
        ]);
        try {
            $objects = $s3Client->getIterator('ListObjects', array(
                'Bucket' => $s3_bucket
            ));
          
           echo "Keys retrieved!\n";
           foreach ($objects as $object) {
               echo $object['Key'] . "\n";
           }
          } catch (S3Exception $e) {
            echo $e->getMessage() . "\n";
           }
    
    }

Why would I be able to access single objects but not a list of them?

0

There are 0 best solutions below