**Use case**
With S3, you have to send the header `x-amz-server-side-encryption-customer-key` and `x-amz-server-side-encryption-customer-key-md5` if the resource is server side encrypted.

https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeysSSEUsingRESTAPI.html
https://docs.aws.amazon.com/AmazonS3/latest/dev/ServerSideEncryptionCustomerKeys.html

**Describe the solution you'd like**
Ability to set this in the query.
}
namespace DB
{
struct HttpHeader
{
    const String name;
    const String value;
};
using HeaderCollection = std::vector<HttpHeader>;
struct S3AuthSettings
{
    const String access_key_id;
    const String secret_access_key;
    const HeaderCollection headers;
    std::optional<bool> use_environment_credentials;
};
class StorageS3Settings
{
public:
    StorageS3Settings() = default;
    void loadFromConfig(const String & config_elem, const Poco::Util::AbstractConfiguration & config);
    S3AuthSettings getSettings(const String & endpoint) const;
private:
    mutable std::mutex mutex;
    std::map<const String, const S3AuthSettings> settings;
};
}