/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
/*
* Do not modify this file. This file is generated from the kms-2014-11-01.normal.json service model.
*/
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.KeyManagementService.Model
{
///
/// Container for the parameters to the CreateKey operation.
/// Creates a unique customer managed KMS
/// key in your Amazon Web Services account and Region. You can use a KMS key in cryptographic
/// operations, such as encryption and signing. Some Amazon Web Services services let
/// you use KMS keys that you create and manage to protect your service resources.
///
///
///
/// A KMS key is a logical representation of a cryptographic key. In addition to the key
/// material used in cryptographic operations, a KMS key includes metadata, such as the
/// key ID, key policy, creation date, description, and key state. For details, see Managing
/// keys in the Key Management Service Developer Guide
///
///
///
/// Use the parameters of CreateKey
to specify the type of KMS key, the source
/// of its key material, its key policy, description, tags, and other properties.
///
///
///
/// KMS has replaced the term customer master key (CMK) with KMS key and
/// KMS key. The concept has not changed. To prevent breaking changes, KMS is keeping
/// some variations of this term.
///
///
///
/// To create different types of KMS keys, use the following guidance:
///
/// - Symmetric encryption KMS key
-
///
/// By default,
CreateKey
creates a symmetric encryption KMS key with key
/// material that KMS generates. This is the basic and most widely used type of KMS key,
/// and provides the best performance.
///
///
///
/// To create a symmetric encryption KMS key, you don't need to specify any parameters.
/// The default value for KeySpec
, SYMMETRIC_DEFAULT
, the default
/// value for KeyUsage
, ENCRYPT_DECRYPT
, and the default value
/// for Origin
, AWS_KMS
, create a symmetric encryption KMS key
/// with KMS key material.
///
///
///
/// If you need a key for basic encryption and decryption or you are creating a KMS key
/// to protect your resources in an Amazon Web Services service, create a symmetric encryption
/// KMS key. The key material in a symmetric encryption key never leaves KMS unencrypted.
/// You can use a symmetric encryption KMS key to encrypt and decrypt data up to 4,096
/// bytes, but they are typically used to generate data keys and data keys pairs. For
/// details, see GenerateDataKey and GenerateDataKeyPair.
///
///
///
///
///
/// - Asymmetric KMS keys
-
///
/// To create an asymmetric KMS key, use the
KeySpec
parameter to specify
/// the type of key material in the KMS key. Then, use the KeyUsage
parameter
/// to determine whether the KMS key will be used to encrypt and decrypt or sign and verify.
/// You can't change these properties after the KMS key is created.
///
///
///
/// Asymmetric KMS keys contain an RSA key pair, Elliptic Curve (ECC) key pair, or an
/// SM2 key pair (China Regions only). The private key in an asymmetric KMS key never
/// leaves KMS unencrypted. However, you can use the GetPublicKey operation to
/// download the public key so it can be used outside of KMS. KMS keys with RSA or SM2
/// key pairs can be used to encrypt or decrypt data or sign and verify messages (but
/// not both). KMS keys with ECC key pairs can be used only to sign and verify messages.
/// For information about asymmetric KMS keys, see Asymmetric
/// KMS keys in the Key Management Service Developer Guide.
///
///
///
///
///
/// - HMAC KMS key
-
///
/// To create an HMAC KMS key, set the
KeySpec
parameter to a key spec value
/// for HMAC KMS keys. Then set the KeyUsage
parameter to GENERATE_VERIFY_MAC
.
/// You must set the key usage even though GENERATE_VERIFY_MAC
is the only
/// valid key usage value for HMAC KMS keys. You can't change these properties after the
/// KMS key is created.
///
///
///
/// HMAC KMS keys are symmetric keys that never leave KMS unencrypted. You can use HMAC
/// keys to generate (GenerateMac) and verify (VerifyMac) HMAC codes for
/// messages up to 4096 bytes.
///
///
///
///
///
/// - Multi-Region primary keys
- Imported key material
-
///
/// To create a multi-Region primary key in the local Amazon Web Services Region,
/// use the
MultiRegion
parameter with a value of True
. To create
/// a multi-Region replica key, that is, a KMS key with the same key ID and key
/// material as a primary key, but in a different Amazon Web Services Region, use the
/// ReplicateKey operation. To change a replica key to a primary key, and its primary
/// key to a replica key, use the UpdatePrimaryRegion operation.
///
///
///
/// You can create multi-Region KMS keys for all supported KMS key types: symmetric encryption
/// KMS keys, HMAC KMS keys, asymmetric encryption KMS keys, and asymmetric signing KMS
/// keys. You can also create multi-Region keys with imported key material. However, you
/// can't create multi-Region keys in a custom key store.
///
///
///
/// This operation supports multi-Region keys, an KMS feature that lets you create
/// multiple interoperable KMS keys in different Amazon Web Services Regions. Because
/// these KMS keys have the same key ID, key material, and other metadata, you can use
/// them interchangeably to encrypt data in one Amazon Web Services Region and decrypt
/// it in a different Amazon Web Services Region without re-encrypting the data or making
/// a cross-Region call. For more information about multi-Region keys, see Multi-Region
/// keys in KMS in the Key Management Service Developer Guide.
///
///
///
///
///
/// -
///
/// To import your own key material into a KMS key, begin by creating a KMS key with no
/// key material. To do this, use the
Origin
parameter of CreateKey
/// with a value of EXTERNAL
. Next, use GetParametersForImport operation
/// to get a public key and import token. Use the wrapping public key to encrypt your
/// key material. Then, use ImportKeyMaterial with your import token to import
/// the key material. For step-by-step instructions, see Importing
/// Key Material in the Key Management Service Developer Guide .
///
///
///
/// You can import key material into KMS keys of all supported KMS key types: symmetric
/// encryption KMS keys, HMAC KMS keys, asymmetric encryption KMS keys, and asymmetric
/// signing KMS keys. You can also create multi-Region keys with imported key material.
/// However, you can't import key material into a KMS key in a custom key store.
///
///
///
/// To create a multi-Region primary key with imported key material, use the Origin
/// parameter of CreateKey
with a value of EXTERNAL
and the
/// MultiRegion
parameter with a value of True
. To create replicas
/// of the multi-Region primary key, use the ReplicateKey operation. For instructions,
/// see Importing key material into multi-Region keys. For more information about multi-Region
/// keys, see Multi-Region
/// keys in KMS in the Key Management Service Developer Guide.
///
///
///
///
///
/// - Custom key store
-
///
/// A custom
/// key store lets you protect your Amazon Web Services resources using keys in a
/// backing key store that you own and manage. When you request a cryptographic operation
/// with a KMS key in a custom key store, the operation is performed in the backing key
/// store using its cryptographic keys.
///
///
///
/// KMS supports CloudHSM
/// key stores backed by an CloudHSM cluster and external
/// key stores backed by an external key manager outside of Amazon Web Services. When
/// you create a KMS key in an CloudHSM key store, KMS generates an encryption key in
/// the CloudHSM cluster and associates it with the KMS key. When you create a KMS key
/// in an external key store, you specify an existing encryption key in the external key
/// manager.
///
///
///
/// Some external key managers provide a simpler method for creating a KMS key in an external
/// key store. For details, see your external key manager documentation.
///
///
///
/// Before you create a KMS key in a custom key store, the
ConnectionState
/// of the key store must be CONNECTED
. To connect the custom key store,
/// use the ConnectCustomKeyStore operation. To find the ConnectionState
,
/// use the DescribeCustomKeyStores operation.
///
///
///
/// To create a KMS key in a custom key store, use the CustomKeyStoreId
.
/// Use the default KeySpec
value, SYMMETRIC_DEFAULT
, and the
/// default KeyUsage
value, ENCRYPT_DECRYPT
to create a symmetric
/// encryption key. No other key type is supported in a custom key store.
///
///
///
/// To create a KMS key in an CloudHSM
/// key store, use the Origin
parameter with a value of AWS_CLOUDHSM
.
/// The CloudHSM cluster that is associated with the custom key store must have at least
/// two active HSMs in different Availability Zones in the Amazon Web Services Region.
///
///
///
/// To create a KMS key in an external
/// key store, use the Origin
parameter with a value of EXTERNAL_KEY_STORE
/// and an XksKeyId
parameter that identifies an existing external key.
///
///
///
/// Some external key managers provide a simpler method for creating a KMS key in an external
/// key store. For details, see your external key manager documentation.
///
///
///
/// Cross-account use: No. You cannot use this operation to create a KMS key in
/// a different Amazon Web Services account.
///
///
///
/// Required permissions: kms:CreateKey
/// (IAM policy). To use the Tags
parameter, kms:TagResource
/// (IAM policy). For examples and information about related permissions, see Allow
/// a user to create KMS keys in the Key Management Service Developer Guide.
///
///
///
/// Related operations:
///
///
///
public partial class CreateKeyRequest : AmazonKeyManagementServiceRequest
{
private bool? _bypassPolicyLockoutSafetyCheck;
private CustomerMasterKeySpec _customerMasterKeySpec;
private string _customKeyStoreId;
private string _description;
private KeySpec _keySpec;
private KeyUsageType _keyUsage;
private bool? _multiRegion;
private OriginType _origin;
private string _policy;
private List _tags = new List();
private string _xksKeyId;
///
/// Gets and sets the property BypassPolicyLockoutSafetyCheck.
///
/// Skips ("bypasses") the key policy lockout safety check. The default value is false.
///
///
///
/// Setting this value to true increases the risk that the KMS key becomes unmanageable.
/// Do not set this value to true indiscriminately.
///
///
///
/// For more information, see Default
/// key policy in the Key Management Service Developer Guide.
///
///
///
/// Use this parameter only when you intend to prevent the principal that is making the
/// request from making a subsequent PutKeyPolicy request on the KMS key.
///
///
public bool BypassPolicyLockoutSafetyCheck
{
get { return this._bypassPolicyLockoutSafetyCheck.GetValueOrDefault(); }
set { this._bypassPolicyLockoutSafetyCheck = value; }
}
// Check to see if BypassPolicyLockoutSafetyCheck property is set
internal bool IsSetBypassPolicyLockoutSafetyCheck()
{
return this._bypassPolicyLockoutSafetyCheck.HasValue;
}
///
/// Gets and sets the property CustomerMasterKeySpec.
///
/// Instead, use the KeySpec
parameter.
///
///
///
/// The KeySpec
and CustomerMasterKeySpec
parameters work the
/// same way. Only the names differ. We recommend that you use KeySpec
parameter
/// in your code. However, to avoid breaking changes, KMS supports both parameters.
///
///
[Obsolete("This parameter has been deprecated. Instead, use the KeySpec parameter.")]
public CustomerMasterKeySpec CustomerMasterKeySpec
{
get { return this._customerMasterKeySpec; }
set { this._customerMasterKeySpec = value; }
}
// Check to see if CustomerMasterKeySpec property is set
internal bool IsSetCustomerMasterKeySpec()
{
return this._customerMasterKeySpec != null;
}
///
/// Gets and sets the property CustomKeyStoreId.
///
/// Creates the KMS key in the specified custom
/// key store. The ConnectionState
of the custom key store must be CONNECTED
.
/// To find the CustomKeyStoreID and ConnectionState use the DescribeCustomKeyStores
/// operation.
///
///
///
/// This parameter is valid only for symmetric encryption KMS keys in a single Region.
/// You cannot create any other type of KMS key in a custom key store.
///
///
///
/// When you create a KMS key in an CloudHSM key store, KMS generates a non-exportable
/// 256-bit symmetric key in its associated CloudHSM cluster and associates it with the
/// KMS key. When you create a KMS key in an external key store, you must use the XksKeyId
/// parameter to specify an external key that serves as key material for the KMS key.
///
///
[AWSProperty(Min=1, Max=64)]
public string CustomKeyStoreId
{
get { return this._customKeyStoreId; }
set { this._customKeyStoreId = value; }
}
// Check to see if CustomKeyStoreId property is set
internal bool IsSetCustomKeyStoreId()
{
return this._customKeyStoreId != null;
}
///
/// Gets and sets the property Description.
///
/// A description of the KMS key. Use a description that helps you decide whether the
/// KMS key is appropriate for a task. The default value is an empty string (no description).
///
///
///
/// Do not include confidential or sensitive information in this field. This field may
/// be displayed in plaintext in CloudTrail logs and other output.
///
///
///
/// To set or change the description after the key is created, use UpdateKeyDescription.
///
///
[AWSProperty(Min=0, Max=8192)]
public string Description
{
get { return this._description; }
set { this._description = value; }
}
// Check to see if Description property is set
internal bool IsSetDescription()
{
return this._description != null;
}
///
/// Gets and sets the property KeySpec.
///
/// Specifies the type of KMS key to create. The default value, SYMMETRIC_DEFAULT
,
/// creates a KMS key with a 256-bit AES-GCM key that is used for encryption and decryption,
/// except in China Regions, where it creates a 128-bit symmetric key that uses SM4 encryption.
/// For help choosing a key spec for your KMS key, see Choosing
/// a KMS key type in the Key Management Service Developer Guide .
///
///
///
/// The KeySpec
determines whether the KMS key contains a symmetric key or
/// an asymmetric key pair. It also determines the algorithms that the KMS key supports.
/// You can't change the KeySpec
after the KMS key is created. To further
/// restrict the algorithms that can be used with the KMS key, use a condition key in
/// its key policy or IAM policy. For more information, see kms:EncryptionAlgorithm,
/// kms:MacAlgorithm
/// or kms:Signing
/// Algorithm in the Key Management Service Developer Guide .
///
///
///
/// Amazon Web
/// Services services that are integrated with KMS use symmetric encryption KMS keys
/// to protect your data. These services do not support asymmetric KMS keys or HMAC KMS
/// keys.
///
///
///
/// KMS supports the following key specs for KMS keys:
///
/// -
///
/// Symmetric encryption key (default)
///
///
-
///
///
SYMMETRIC_DEFAULT
///
///
-
///
/// HMAC keys (symmetric)
///
///
-
///
///
HMAC_224
///
/// -
///
///
HMAC_256
///
/// -
///
///
HMAC_384
///
/// -
///
///
HMAC_512
///
///
-
///
/// Asymmetric RSA key pairs
///
///
-
///
///
RSA_2048
///
/// -
///
///
RSA_3072
///
/// -
///
///
RSA_4096
///
///
-
///
/// Asymmetric NIST-recommended elliptic curve key pairs
///
///
-
///
///
ECC_NIST_P256
(secp256r1)
///
/// -
///
///
ECC_NIST_P384
(secp384r1)
///
/// -
///
///
ECC_NIST_P521
(secp521r1)
///
///
-
///
/// Other asymmetric elliptic curve key pairs
///
///
-
///
///
ECC_SECG_P256K1
(secp256k1), commonly used for cryptocurrencies.
///
///
-
///
/// SM2 key pairs (China Regions only)
///
///
///
public KeySpec KeySpec
{
get { return this._keySpec; }
set { this._keySpec = value; }
}
// Check to see if KeySpec property is set
internal bool IsSetKeySpec()
{
return this._keySpec != null;
}
///
/// Gets and sets the property KeyUsage.
///
/// Determines the cryptographic
/// operations for which you can use the KMS key. The default value is ENCRYPT_DECRYPT
.
/// This parameter is optional when you are creating a symmetric encryption KMS key; otherwise,
/// it is required. You can't change the KeyUsage
value after the KMS key
/// is created.
///
///
///
/// Select only one valid value.
///
/// -
///
/// For symmetric encryption KMS keys, omit the parameter or specify
ENCRYPT_DECRYPT
.
///
/// -
///
/// For HMAC KMS keys (symmetric), specify
GENERATE_VERIFY_MAC
.
///
/// -
///
/// For asymmetric KMS keys with RSA key material, specify
ENCRYPT_DECRYPT
/// or SIGN_VERIFY
.
///
/// -
///
/// For asymmetric KMS keys with ECC key material, specify
SIGN_VERIFY
.
///
/// -
///
/// For asymmetric KMS keys with SM2 key material (China Regions only), specify
ENCRYPT_DECRYPT
/// or SIGN_VERIFY
.
///
///
///
public KeyUsageType KeyUsage
{
get { return this._keyUsage; }
set { this._keyUsage = value; }
}
// Check to see if KeyUsage property is set
internal bool IsSetKeyUsage()
{
return this._keyUsage != null;
}
///
/// Gets and sets the property MultiRegion.
///
/// Creates a multi-Region primary key that you can replicate into other Amazon Web Services
/// Regions. You cannot change this value after you create the KMS key.
///
///
///
/// For a multi-Region key, set this parameter to True
. For a single-Region
/// KMS key, omit this parameter or set it to False
. The default value is
/// False
.
///
///
///
/// This operation supports multi-Region keys, an KMS feature that lets you create
/// multiple interoperable KMS keys in different Amazon Web Services Regions. Because
/// these KMS keys have the same key ID, key material, and other metadata, you can use
/// them interchangeably to encrypt data in one Amazon Web Services Region and decrypt
/// it in a different Amazon Web Services Region without re-encrypting the data or making
/// a cross-Region call. For more information about multi-Region keys, see Multi-Region
/// keys in KMS in the Key Management Service Developer Guide.
///
///
///
/// This value creates a primary key, not a replica. To create a replica key,
/// use the ReplicateKey operation.
///
///
///
/// You can create a symmetric or asymmetric multi-Region key, and you can create a multi-Region
/// key with imported key material. However, you cannot create a multi-Region key in a
/// custom key store.
///
///
public bool MultiRegion
{
get { return this._multiRegion.GetValueOrDefault(); }
set { this._multiRegion = value; }
}
// Check to see if MultiRegion property is set
internal bool IsSetMultiRegion()
{
return this._multiRegion.HasValue;
}
///
/// Gets and sets the property Origin.
///
/// The source of the key material for the KMS key. You cannot change the origin after
/// you create the KMS key. The default is AWS_KMS
, which means that KMS
/// creates the key material.
///
///
///
/// To create
/// a KMS key with no key material (for imported key material), set this value to
/// EXTERNAL
. For more information about importing key material into KMS,
/// see Importing
/// Key Material in the Key Management Service Developer Guide. The EXTERNAL
/// origin value is valid only for symmetric KMS keys.
///
///
///
/// To create
/// a KMS key in an CloudHSM key store and create its key material in the associated
/// CloudHSM cluster, set this value to AWS_CLOUDHSM
. You must also use the
/// CustomKeyStoreId
parameter to identify the CloudHSM key store. The KeySpec
/// value must be SYMMETRIC_DEFAULT
.
///
///
///
/// To create
/// a KMS key in an external key store, set this value to EXTERNAL_KEY_STORE
.
/// You must also use the CustomKeyStoreId
parameter to identify the external
/// key store and the XksKeyId
parameter to identify the associated external
/// key. The KeySpec
value must be SYMMETRIC_DEFAULT
.
///
///
public OriginType Origin
{
get { return this._origin; }
set { this._origin = value; }
}
// Check to see if Origin property is set
internal bool IsSetOrigin()
{
return this._origin != null;
}
///
/// Gets and sets the property Policy.
///
/// The key policy to attach to the KMS key.
///
///
///
/// If you provide a key policy, it must meet the following criteria:
///
/// -
///
/// The key policy must allow the calling principal to make a subsequent
PutKeyPolicy
/// request on the KMS key. This reduces the risk that the KMS key becomes unmanageable.
/// For more information, see Default
/// key policy in the Key Management Service Developer Guide. (To omit this
/// condition, set BypassPolicyLockoutSafetyCheck
to true.)
///
/// -
///
/// Each statement in the key policy must contain one or more principals. The principals
/// in the key policy must exist and be visible to KMS. When you create a new Amazon Web
/// Services principal, you might need to enforce a delay before including the new principal
/// in a key policy because the new principal might not be immediately visible to KMS.
/// For more information, see Changes
/// that I make are not always immediately visible in the Amazon Web Services Identity
/// and Access Management User Guide.
///
///
///
/// If you do not provide a key policy, KMS attaches a default key policy to the KMS key.
/// For more information, see Default
/// key policy in the Key Management Service Developer Guide.
///
///
///
/// The key policy size quota is 32 kilobytes (32768 bytes).
///
///
///
/// For help writing and formatting a JSON policy document, see the IAM
/// JSON Policy Reference in the Identity and Access Management User Guide
/// .
///
///
[AWSProperty(Min=1, Max=131072)]
public string Policy
{
get { return this._policy; }
set { this._policy = value; }
}
// Check to see if Policy property is set
internal bool IsSetPolicy()
{
return this._policy != null;
}
///
/// Gets and sets the property Tags.
///
/// Assigns one or more tags to the KMS key. Use this parameter to tag the KMS key when
/// it is created. To tag an existing KMS key, use the TagResource operation.
///
///
///
/// Do not include confidential or sensitive information in this field. This field may
/// be displayed in plaintext in CloudTrail logs and other output.
///
///
///
/// Tagging or untagging a KMS key can allow or deny permission to the KMS key. For details,
/// see ABAC
/// for KMS in the Key Management Service Developer Guide.
///
///
///
/// To use this parameter, you must have kms:TagResource
/// permission in an IAM policy.
///
///
///
/// Each tag consists of a tag key and a tag value. Both the tag key and the tag value
/// are required, but the tag value can be an empty (null) string. You cannot have more
/// than one tag on a KMS key with the same tag key. If you specify an existing tag key
/// with a different tag value, KMS replaces the current tag value with the specified
/// one.
///
///
///
/// When you add tags to an Amazon Web Services resource, Amazon Web Services generates
/// a cost allocation report with usage and costs aggregated by tags. Tags can also be
/// used to control access to a KMS key. For details, see Tagging
/// Keys.
///
///
public List Tags
{
get { return this._tags; }
set { this._tags = value; }
}
// Check to see if Tags property is set
internal bool IsSetTags()
{
return this._tags != null && this._tags.Count > 0;
}
///
/// Gets and sets the property XksKeyId.
///
/// Identifies the external
/// key that serves as key material for the KMS key in an external
/// key store. Specify the ID that the external
/// key store proxy uses to refer to the external key. For help, see the documentation
/// for your external key store proxy.
///
///
///
/// This parameter is required for a KMS key with an Origin
value of EXTERNAL_KEY_STORE
.
/// It is not valid for KMS keys with any other Origin
value.
///
///
///
/// The external key must be an existing 256-bit AES symmetric encryption key hosted outside
/// of Amazon Web Services in an external key manager associated with the external key
/// store specified by the CustomKeyStoreId
parameter. This key must be enabled
/// and configured to perform encryption and decryption. Each KMS key in an external key
/// store must use a different external key. For details, see Requirements
/// for a KMS key in an external key store in the Key Management Service Developer
/// Guide.
///
///
///
/// Each KMS key in an external key store is associated two backing keys. One is key material
/// that KMS generates. The other is the external key specified by this parameter. When
/// you use the KMS key in an external key store to encrypt data, the encryption operation
/// is performed first by KMS using the KMS key material, and then by the external key
/// manager using the specified external key, a process known as double encryption.
/// For details, see Double
/// encryption in the Key Management Service Developer Guide.
///
///
[AWSProperty(Min=1, Max=128)]
public string XksKeyId
{
get { return this._xksKeyId; }
set { this._xksKeyId = value; }
}
// Check to see if XksKeyId property is set
internal bool IsSetXksKeyId()
{
return this._xksKeyId != null;
}
}
}