File size: 14,178 Bytes
d617dd9 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 | /**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0.
*/
#pragma once
#include <aws/s3/S3_EXPORTS.h>
#include <aws/s3/S3Request.h>
#include <aws/s3/model/SessionMode.h>
#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/s3/model/ServerSideEncryption.h>
#include <aws/core/utils/memory/stl/AWSMap.h>
#include <utility>
namespace Aws
{
namespace Http
{
class URI;
} //namespace Http
namespace S3
{
namespace Model
{
/**
*/
class CreateSessionRequest : public S3Request
{
public:
AWS_S3_API CreateSessionRequest();
// Service request name is the Operation name which will send this request out,
// each operation should has unique request name, so that we can get operation's name from this request.
// Note: this is not true for response, multiple operations may have the same response name,
// so we can not get operation's name from response.
inline virtual const char* GetServiceRequestName() const override { return "CreateSession"; }
AWS_S3_API Aws::String SerializePayload() const override;
AWS_S3_API void AddQueryStringParameters(Aws::Http::URI& uri) const override;
AWS_S3_API Aws::Http::HeaderValueCollection GetRequestSpecificHeaders() const override;
AWS_S3_API bool HasEmbeddedError(IOStream &body, const Http::HeaderValueCollection &header) const override;
/**
* Helper function to collect parameters (configurable and static hardcoded) required for endpoint computation.
*/
AWS_S3_API EndpointParameters GetEndpointContextParams() const override;
///@{
/**
* <p>Specifies the mode of the session that will be created, either
* <code>ReadWrite</code> or <code>ReadOnly</code>. By default, a
* <code>ReadWrite</code> session is created. A <code>ReadWrite</code> session is
* capable of executing all the Zonal endpoint API operations on a directory
* bucket. A <code>ReadOnly</code> session is constrained to execute the following
* Zonal endpoint API operations: <code>GetObject</code>, <code>HeadObject</code>,
* <code>ListObjectsV2</code>, <code>GetObjectAttributes</code>,
* <code>ListParts</code>, and <code>ListMultipartUploads</code>.</p>
*/
inline const SessionMode& GetSessionMode() const{ return m_sessionMode; }
inline bool SessionModeHasBeenSet() const { return m_sessionModeHasBeenSet; }
inline void SetSessionMode(const SessionMode& value) { m_sessionModeHasBeenSet = true; m_sessionMode = value; }
inline void SetSessionMode(SessionMode&& value) { m_sessionModeHasBeenSet = true; m_sessionMode = std::move(value); }
inline CreateSessionRequest& WithSessionMode(const SessionMode& value) { SetSessionMode(value); return *this;}
inline CreateSessionRequest& WithSessionMode(SessionMode&& value) { SetSessionMode(std::move(value)); return *this;}
///@}
///@{
/**
* <p>The name of the bucket that you create a session for.</p>
*/
inline const Aws::String& GetBucket() const{ return m_bucket; }
inline bool BucketHasBeenSet() const { return m_bucketHasBeenSet; }
inline void SetBucket(const Aws::String& value) { m_bucketHasBeenSet = true; m_bucket = value; }
inline void SetBucket(Aws::String&& value) { m_bucketHasBeenSet = true; m_bucket = std::move(value); }
inline void SetBucket(const char* value) { m_bucketHasBeenSet = true; m_bucket.assign(value); }
inline CreateSessionRequest& WithBucket(const Aws::String& value) { SetBucket(value); return *this;}
inline CreateSessionRequest& WithBucket(Aws::String&& value) { SetBucket(std::move(value)); return *this;}
inline CreateSessionRequest& WithBucket(const char* value) { SetBucket(value); return *this;}
///@}
///@{
/**
* <p>The server-side encryption algorithm to use when you store objects in the
* directory bucket.</p> <p>For directory buckets, there are only two supported
* options for server-side encryption: server-side encryption with Amazon S3
* managed keys (SSE-S3) (<code>AES256</code>) and server-side encryption with KMS
* keys (SSE-KMS) (<code>aws:kms</code>). By default, Amazon S3 encrypts data with
* SSE-S3. For more information, see <a
* href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html">Protecting
* data with server-side encryption</a> in the <i>Amazon S3 User Guide</i>.</p>
*/
inline const ServerSideEncryption& GetServerSideEncryption() const{ return m_serverSideEncryption; }
inline bool ServerSideEncryptionHasBeenSet() const { return m_serverSideEncryptionHasBeenSet; }
inline void SetServerSideEncryption(const ServerSideEncryption& value) { m_serverSideEncryptionHasBeenSet = true; m_serverSideEncryption = value; }
inline void SetServerSideEncryption(ServerSideEncryption&& value) { m_serverSideEncryptionHasBeenSet = true; m_serverSideEncryption = std::move(value); }
inline CreateSessionRequest& WithServerSideEncryption(const ServerSideEncryption& value) { SetServerSideEncryption(value); return *this;}
inline CreateSessionRequest& WithServerSideEncryption(ServerSideEncryption&& value) { SetServerSideEncryption(std::move(value)); return *this;}
///@}
///@{
/**
* <p>If you specify <code>x-amz-server-side-encryption</code> with
* <code>aws:kms</code>, you must specify the <code>
* x-amz-server-side-encryption-aws-kms-key-id</code> header with the ID (Key ID or
* Key ARN) of the KMS symmetric encryption customer managed key to use. Otherwise,
* you get an HTTP <code>400 Bad Request</code> error. Only use the key ID or key
* ARN. The key alias format of the KMS key isn't supported. Also, if the KMS key
* doesn't exist in the same account that't issuing the command, you must use the
* full Key ARN not the Key ID. </p> <p>Your SSE-KMS configuration can only support
* 1 <a
* href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk">customer
* managed key</a> per directory bucket's lifetime. The <a
* href="https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk">Amazon
* Web Services managed key</a> (<code>aws/s3</code>) isn't supported. </p>
*/
inline const Aws::String& GetSSEKMSKeyId() const{ return m_sSEKMSKeyId; }
inline bool SSEKMSKeyIdHasBeenSet() const { return m_sSEKMSKeyIdHasBeenSet; }
inline void SetSSEKMSKeyId(const Aws::String& value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId = value; }
inline void SetSSEKMSKeyId(Aws::String&& value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId = std::move(value); }
inline void SetSSEKMSKeyId(const char* value) { m_sSEKMSKeyIdHasBeenSet = true; m_sSEKMSKeyId.assign(value); }
inline CreateSessionRequest& WithSSEKMSKeyId(const Aws::String& value) { SetSSEKMSKeyId(value); return *this;}
inline CreateSessionRequest& WithSSEKMSKeyId(Aws::String&& value) { SetSSEKMSKeyId(std::move(value)); return *this;}
inline CreateSessionRequest& WithSSEKMSKeyId(const char* value) { SetSSEKMSKeyId(value); return *this;}
///@}
///@{
/**
* <p>Specifies the Amazon Web Services KMS Encryption Context as an additional
* encryption context to use for object encryption. The value of this header is a
* Base64 encoded string of a UTF-8 encoded JSON, which contains the encryption
* context as key-value pairs. This value is stored as object metadata and
* automatically gets passed on to Amazon Web Services KMS for future
* <code>GetObject</code> operations on this object.</p> <p> <b>General purpose
* buckets</b> - This value must be explicitly added during <code>CopyObject</code>
* operations if you want an additional encryption context for your object. For
* more information, see <a
* href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html#encryption-context">Encryption
* context</a> in the <i>Amazon S3 User Guide</i>.</p> <p> <b>Directory buckets</b>
* - You can optionally provide an explicit encryption context value. The value
* must match the default encryption context - the bucket Amazon Resource Name
* (ARN). An additional encryption context value is not supported. </p>
*/
inline const Aws::String& GetSSEKMSEncryptionContext() const{ return m_sSEKMSEncryptionContext; }
inline bool SSEKMSEncryptionContextHasBeenSet() const { return m_sSEKMSEncryptionContextHasBeenSet; }
inline void SetSSEKMSEncryptionContext(const Aws::String& value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext = value; }
inline void SetSSEKMSEncryptionContext(Aws::String&& value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext = std::move(value); }
inline void SetSSEKMSEncryptionContext(const char* value) { m_sSEKMSEncryptionContextHasBeenSet = true; m_sSEKMSEncryptionContext.assign(value); }
inline CreateSessionRequest& WithSSEKMSEncryptionContext(const Aws::String& value) { SetSSEKMSEncryptionContext(value); return *this;}
inline CreateSessionRequest& WithSSEKMSEncryptionContext(Aws::String&& value) { SetSSEKMSEncryptionContext(std::move(value)); return *this;}
inline CreateSessionRequest& WithSSEKMSEncryptionContext(const char* value) { SetSSEKMSEncryptionContext(value); return *this;}
///@}
///@{
/**
* <p>Specifies whether Amazon S3 should use an S3 Bucket Key for object encryption
* with server-side encryption using KMS keys (SSE-KMS).</p> <p>S3 Bucket Keys are
* always enabled for <code>GET</code> and <code>PUT</code> operations in a
* directory bucket and can’t be disabled. S3 Bucket Keys aren't supported, when
* you copy SSE-KMS encrypted objects from general purpose buckets to directory
* buckets, from directory buckets to general purpose buckets, or between directory
* buckets, through <a
* href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html">CopyObject</a>,
* <a
* href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html">UploadPartCopy</a>,
* <a
* href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-objects-Batch-Ops">the
* Copy operation in Batch Operations</a>, or <a
* href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-import-job">the
* import jobs</a>. In this case, Amazon S3 makes a call to KMS every time a copy
* request is made for a KMS-encrypted object.</p>
*/
inline bool GetBucketKeyEnabled() const{ return m_bucketKeyEnabled; }
inline bool BucketKeyEnabledHasBeenSet() const { return m_bucketKeyEnabledHasBeenSet; }
inline void SetBucketKeyEnabled(bool value) { m_bucketKeyEnabledHasBeenSet = true; m_bucketKeyEnabled = value; }
inline CreateSessionRequest& WithBucketKeyEnabled(bool value) { SetBucketKeyEnabled(value); return *this;}
///@}
///@{
inline const Aws::Map<Aws::String, Aws::String>& GetCustomizedAccessLogTag() const{ return m_customizedAccessLogTag; }
inline bool CustomizedAccessLogTagHasBeenSet() const { return m_customizedAccessLogTagHasBeenSet; }
inline void SetCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = value; }
inline void SetCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag = std::move(value); }
inline CreateSessionRequest& WithCustomizedAccessLogTag(const Aws::Map<Aws::String, Aws::String>& value) { SetCustomizedAccessLogTag(value); return *this;}
inline CreateSessionRequest& WithCustomizedAccessLogTag(Aws::Map<Aws::String, Aws::String>&& value) { SetCustomizedAccessLogTag(std::move(value)); return *this;}
inline CreateSessionRequest& AddCustomizedAccessLogTag(const Aws::String& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
inline CreateSessionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const Aws::String& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
inline CreateSessionRequest& AddCustomizedAccessLogTag(const Aws::String& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
inline CreateSessionRequest& AddCustomizedAccessLogTag(Aws::String&& key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), std::move(value)); return *this; }
inline CreateSessionRequest& AddCustomizedAccessLogTag(const char* key, Aws::String&& value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, std::move(value)); return *this; }
inline CreateSessionRequest& AddCustomizedAccessLogTag(Aws::String&& key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(std::move(key), value); return *this; }
inline CreateSessionRequest& AddCustomizedAccessLogTag(const char* key, const char* value) { m_customizedAccessLogTagHasBeenSet = true; m_customizedAccessLogTag.emplace(key, value); return *this; }
///@}
private:
SessionMode m_sessionMode;
bool m_sessionModeHasBeenSet = false;
Aws::String m_bucket;
bool m_bucketHasBeenSet = false;
ServerSideEncryption m_serverSideEncryption;
bool m_serverSideEncryptionHasBeenSet = false;
Aws::String m_sSEKMSKeyId;
bool m_sSEKMSKeyIdHasBeenSet = false;
Aws::String m_sSEKMSEncryptionContext;
bool m_sSEKMSEncryptionContextHasBeenSet = false;
bool m_bucketKeyEnabled;
bool m_bucketKeyEnabledHasBeenSet = false;
Aws::Map<Aws::String, Aws::String> m_customizedAccessLogTag;
bool m_customizedAccessLogTagHasBeenSet = false;
};
} // namespace Model
} // namespace S3
} // namespace Aws
|