googleapis/google/cloud/kms/v1/resources.proto
Google APIs b026ba89b3 feat: Add KeyProjectResolutionMode to AutokeyConfig to support project-level configurations
feat: Add more post-quantum (PQ) signature algorithms to CryptoKeyVersion
docs: Update documentation for AutokeyAdmin service and messages to support folder and project-level configurations
docs: Clarify supported resources for the crypto_key_backend field in ImportJob

PiperOrigin-RevId: 870858133
2026-02-16 06:09:56 -08:00

1203 lines
53 KiB
Protocol Buffer

// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License 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.
syntax = "proto3";
package google.cloud.kms.v1;
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/duration.proto";
import "google/protobuf/timestamp.proto";
import "google/protobuf/wrappers.proto";
option csharp_namespace = "Google.Cloud.Kms.V1";
option go_package = "cloud.google.com/go/kms/apiv1/kmspb;kmspb";
option java_multiple_files = true;
option java_outer_classname = "KmsResourcesProto";
option java_package = "com.google.cloud.kms.v1";
option php_namespace = "Google\\Cloud\\Kms\\V1";
// LINT: LEGACY_NAMES
// A [KeyRing][google.cloud.kms.v1.KeyRing] is a toplevel logical grouping of
// [CryptoKeys][google.cloud.kms.v1.CryptoKey].
message KeyRing {
option (google.api.resource) = {
type: "cloudkms.googleapis.com/KeyRing"
pattern: "projects/{project}/locations/{location}/keyRings/{key_ring}"
};
// Output only. The resource name for the
// [KeyRing][google.cloud.kms.v1.KeyRing] in the format
// `projects/*/locations/*/keyRings/*`.
string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this [KeyRing][google.cloud.kms.v1.KeyRing]
// was created.
google.protobuf.Timestamp create_time = 2
[(google.api.field_behavior) = OUTPUT_ONLY];
}
// A [CryptoKey][google.cloud.kms.v1.CryptoKey] represents a logical key that
// can be used for cryptographic operations.
//
// A [CryptoKey][google.cloud.kms.v1.CryptoKey] is made up of zero or more
// [versions][google.cloud.kms.v1.CryptoKeyVersion], which represent the actual
// key material used in cryptographic operations.
message CryptoKey {
option (google.api.resource) = {
type: "cloudkms.googleapis.com/CryptoKey"
pattern: "projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}"
};
// [CryptoKeyPurpose][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose]
// describes the cryptographic capabilities of a
// [CryptoKey][google.cloud.kms.v1.CryptoKey]. A given key can only be used
// for the operations allowed by its purpose. For more information, see [Key
// purposes](https://cloud.google.com/kms/docs/algorithms#key_purposes).
enum CryptoKeyPurpose {
// Not specified.
CRYPTO_KEY_PURPOSE_UNSPECIFIED = 0;
// [CryptoKeys][google.cloud.kms.v1.CryptoKey] with this purpose may be used
// with [Encrypt][google.cloud.kms.v1.KeyManagementService.Encrypt] and
// [Decrypt][google.cloud.kms.v1.KeyManagementService.Decrypt].
ENCRYPT_DECRYPT = 1;
// [CryptoKeys][google.cloud.kms.v1.CryptoKey] with this purpose may be used
// with
// [AsymmetricSign][google.cloud.kms.v1.KeyManagementService.AsymmetricSign]
// and
// [GetPublicKey][google.cloud.kms.v1.KeyManagementService.GetPublicKey].
ASYMMETRIC_SIGN = 5;
// [CryptoKeys][google.cloud.kms.v1.CryptoKey] with this purpose may be used
// with
// [AsymmetricDecrypt][google.cloud.kms.v1.KeyManagementService.AsymmetricDecrypt]
// and
// [GetPublicKey][google.cloud.kms.v1.KeyManagementService.GetPublicKey].
ASYMMETRIC_DECRYPT = 6;
// [CryptoKeys][google.cloud.kms.v1.CryptoKey] with this purpose may be used
// with [RawEncrypt][google.cloud.kms.v1.KeyManagementService.RawEncrypt]
// and [RawDecrypt][google.cloud.kms.v1.KeyManagementService.RawDecrypt].
// This purpose is meant to be used for interoperable symmetric
// encryption and does not support automatic CryptoKey rotation.
RAW_ENCRYPT_DECRYPT = 7;
// [CryptoKeys][google.cloud.kms.v1.CryptoKey] with this purpose may be used
// with [MacSign][google.cloud.kms.v1.KeyManagementService.MacSign].
MAC = 9;
// [CryptoKeys][google.cloud.kms.v1.CryptoKey] with this purpose may be used
// with
// [GetPublicKey][google.cloud.kms.v1.KeyManagementService.GetPublicKey]
// and [Decapsulate][google.cloud.kms.v1.KeyManagementService.Decapsulate].
KEY_ENCAPSULATION = 10;
}
// Output only. The resource name for this
// [CryptoKey][google.cloud.kms.v1.CryptoKey] in the format
// `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. A copy of the "primary"
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] that will be used
// by [Encrypt][google.cloud.kms.v1.KeyManagementService.Encrypt] when this
// [CryptoKey][google.cloud.kms.v1.CryptoKey] is given in
// [EncryptRequest.name][google.cloud.kms.v1.EncryptRequest.name].
//
// The [CryptoKey][google.cloud.kms.v1.CryptoKey]'s primary version can be
// updated via
// [UpdateCryptoKeyPrimaryVersion][google.cloud.kms.v1.KeyManagementService.UpdateCryptoKeyPrimaryVersion].
//
// Keys with [purpose][google.cloud.kms.v1.CryptoKey.purpose]
// [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT]
// may have a primary. For other keys, this field will be omitted.
CryptoKeyVersion primary = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
// Immutable. The immutable purpose of this
// [CryptoKey][google.cloud.kms.v1.CryptoKey].
CryptoKeyPurpose purpose = 3 [(google.api.field_behavior) = IMMUTABLE];
// Output only. The time at which this
// [CryptoKey][google.cloud.kms.v1.CryptoKey] was created.
google.protobuf.Timestamp create_time = 5
[(google.api.field_behavior) = OUTPUT_ONLY];
// At [next_rotation_time][google.cloud.kms.v1.CryptoKey.next_rotation_time],
// the Key Management Service will automatically:
//
// 1. Create a new version of this [CryptoKey][google.cloud.kms.v1.CryptoKey].
// 2. Mark the new version as primary.
//
// Key rotations performed manually via
// [CreateCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.CreateCryptoKeyVersion]
// and
// [UpdateCryptoKeyPrimaryVersion][google.cloud.kms.v1.KeyManagementService.UpdateCryptoKeyPrimaryVersion]
// do not affect
// [next_rotation_time][google.cloud.kms.v1.CryptoKey.next_rotation_time].
//
// Keys with [purpose][google.cloud.kms.v1.CryptoKey.purpose]
// [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT]
// support automatic rotation. For other keys, this field must be omitted.
google.protobuf.Timestamp next_rotation_time = 7;
// Controls the rate of automatic rotation.
oneof rotation_schedule {
// [next_rotation_time][google.cloud.kms.v1.CryptoKey.next_rotation_time]
// will be advanced by this period when the service automatically rotates a
// key. Must be at least 24 hours and at most 876,000 hours.
//
// If [rotation_period][google.cloud.kms.v1.CryptoKey.rotation_period] is
// set,
// [next_rotation_time][google.cloud.kms.v1.CryptoKey.next_rotation_time]
// must also be set.
//
// Keys with [purpose][google.cloud.kms.v1.CryptoKey.purpose]
// [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT]
// support automatic rotation. For other keys, this field must be omitted.
google.protobuf.Duration rotation_period = 8;
}
// A template describing settings for new
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] instances. The
// properties of new [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]
// instances created by either
// [CreateCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.CreateCryptoKeyVersion]
// or auto-rotation are controlled by this template.
CryptoKeyVersionTemplate version_template = 11;
// Labels with user-defined metadata. For more information, see
// [Labeling Keys](https://cloud.google.com/kms/docs/labeling-keys).
map<string, string> labels = 10;
// Immutable. Whether this key may contain imported versions only.
bool import_only = 13 [(google.api.field_behavior) = IMMUTABLE];
// Immutable. The period of time that versions of this key spend in the
// [DESTROY_SCHEDULED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROY_SCHEDULED]
// state before transitioning to
// [DESTROYED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROYED].
// If not specified at creation time, the default duration is 30 days.
google.protobuf.Duration destroy_scheduled_duration = 14
[(google.api.field_behavior) = IMMUTABLE];
// Immutable. The resource name of the backend environment where the key
// material for all [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion]
// associated with this [CryptoKey][google.cloud.kms.v1.CryptoKey] reside and
// where all related cryptographic operations are performed. Only applicable
// if [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion] have a
// [ProtectionLevel][google.cloud.kms.v1.ProtectionLevel] of
// [EXTERNAL_VPC][google.cloud.kms.v1.ProtectionLevel.EXTERNAL_VPC], with the
// resource name in the format `projects/*/locations/*/ekmConnections/*`. Only
// applicable if [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion]
// have a [ProtectionLevel][google.cloud.kms.v1.ProtectionLevel] of
// [HSM_SINGLE_TENANT][google.cloud.kms.v1.ProtectionLevel.HSM_SINGLE_TENANT],
// with the resource name in the format
// `projects/*/locations/*/singleTenantHsmInstances/*`.
// Note, this list is non-exhaustive and may apply to additional
// [ProtectionLevels][google.cloud.kms.v1.ProtectionLevel] in the future.
string crypto_key_backend = 15 [
(google.api.field_behavior) = IMMUTABLE,
(google.api.resource_reference) = { type: "*" }
];
// Optional. The policy used for Key Access Justifications Policy Enforcement.
// If this field is present and this key is enrolled in Key Access
// Justifications Policy Enforcement, the policy will be evaluated in encrypt,
// decrypt, and sign operations, and the operation will fail if rejected by
// the policy. The policy is defined by specifying zero or more allowed
// justification codes.
// https://cloud.google.com/assured-workloads/key-access-justifications/docs/justification-codes
// By default, this field is absent, and all justification codes are allowed.
KeyAccessJustificationsPolicy key_access_justifications_policy = 17
[(google.api.field_behavior) = OPTIONAL];
}
// A [CryptoKeyVersionTemplate][google.cloud.kms.v1.CryptoKeyVersionTemplate]
// specifies the properties to use when creating a new
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion], either manually
// with
// [CreateCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.CreateCryptoKeyVersion]
// or automatically as a result of auto-rotation.
message CryptoKeyVersionTemplate {
// [ProtectionLevel][google.cloud.kms.v1.ProtectionLevel] to use when creating
// a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] based on this
// template. Immutable. Defaults to
// [SOFTWARE][google.cloud.kms.v1.ProtectionLevel.SOFTWARE].
ProtectionLevel protection_level = 1;
// Required.
// [Algorithm][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm]
// to use when creating a
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] based on this
// template.
//
// For backwards compatibility, GOOGLE_SYMMETRIC_ENCRYPTION is implied if both
// this field is omitted and
// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose] is
// [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT].
CryptoKeyVersion.CryptoKeyVersionAlgorithm algorithm = 3
[(google.api.field_behavior) = REQUIRED];
}
// Contains an HSM-generated attestation about a key operation. For more
// information, see [Verifying attestations]
// (https://cloud.google.com/kms/docs/attest-key).
message KeyOperationAttestation {
// Attestation formats provided by the HSM.
enum AttestationFormat {
// Not specified.
ATTESTATION_FORMAT_UNSPECIFIED = 0;
// Cavium HSM attestation compressed with gzip. Note that this format is
// defined by Cavium and subject to change at any time.
//
// See
// https://www.marvell.com/products/security-solutions/nitrox-hs-adapters/software-key-attestation.html.
CAVIUM_V1_COMPRESSED = 3;
// Cavium HSM attestation V2 compressed with gzip. This is a new format
// introduced in Cavium's version 3.2-08.
CAVIUM_V2_COMPRESSED = 4;
}
// Certificate chains needed to verify the attestation.
// Certificates in chains are PEM-encoded and are ordered based on
// https://tools.ietf.org/html/rfc5246#section-7.4.2.
message CertificateChains {
// Cavium certificate chain corresponding to the attestation.
repeated string cavium_certs = 1;
// Google card certificate chain corresponding to the attestation.
repeated string google_card_certs = 2;
// Google partition certificate chain corresponding to the attestation.
repeated string google_partition_certs = 3;
}
// Output only. The format of the attestation data.
AttestationFormat format = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The attestation data provided by the HSM when the key
// operation was performed.
bytes content = 5 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The certificate chains needed to validate the attestation
CertificateChains cert_chains = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// A [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] represents an
// individual cryptographic key, and the associated key material.
//
// An
// [ENABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.ENABLED]
// version can be used for cryptographic operations.
//
// For security reasons, the raw cryptographic key material represented by a
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] can never be viewed
// or exported. It can only be used to encrypt, decrypt, or sign data when an
// authorized user or application invokes Cloud KMS.
message CryptoKeyVersion {
option (google.api.resource) = {
type: "cloudkms.googleapis.com/CryptoKeyVersion"
pattern: "projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}/cryptoKeyVersions/{crypto_key_version}"
};
// The algorithm of the
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion], indicating what
// parameters must be used for each cryptographic operation.
//
// The
// [GOOGLE_SYMMETRIC_ENCRYPTION][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm.GOOGLE_SYMMETRIC_ENCRYPTION]
// algorithm is usable with
// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose]
// [ENCRYPT_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ENCRYPT_DECRYPT].
//
// Algorithms beginning with `RSA_SIGN_` are usable with
// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose]
// [ASYMMETRIC_SIGN][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ASYMMETRIC_SIGN].
//
// The fields in the name after `RSA_SIGN_` correspond to the following
// parameters: padding algorithm, modulus bit length, and digest algorithm.
//
// For PSS, the salt length used is equal to the length of digest
// algorithm. For example,
// [RSA_SIGN_PSS_2048_SHA256][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm.RSA_SIGN_PSS_2048_SHA256]
// will use PSS with a salt length of 256 bits or 32 bytes.
//
// Algorithms beginning with `RSA_DECRYPT_` are usable with
// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose]
// [ASYMMETRIC_DECRYPT][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ASYMMETRIC_DECRYPT].
//
// The fields in the name after `RSA_DECRYPT_` correspond to the following
// parameters: padding algorithm, modulus bit length, and digest algorithm.
//
// Algorithms beginning with `EC_SIGN_` are usable with
// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose]
// [ASYMMETRIC_SIGN][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.ASYMMETRIC_SIGN].
//
// The fields in the name after `EC_SIGN_` correspond to the following
// parameters: elliptic curve, digest algorithm.
//
// Algorithms beginning with `HMAC_` are usable with
// [CryptoKey.purpose][google.cloud.kms.v1.CryptoKey.purpose]
// [MAC][google.cloud.kms.v1.CryptoKey.CryptoKeyPurpose.MAC].
//
// The suffix following `HMAC_` corresponds to the hash algorithm being used
// (eg. SHA256).
//
// Algorithms beginning with `PQ_` are post-quantum.
//
// For more information, see [Key purposes and algorithms]
// (https://cloud.google.com/kms/docs/algorithms).
enum CryptoKeyVersionAlgorithm {
// Not specified.
CRYPTO_KEY_VERSION_ALGORITHM_UNSPECIFIED = 0;
// Creates symmetric encryption keys.
GOOGLE_SYMMETRIC_ENCRYPTION = 1;
// AES-GCM (Galois Counter Mode) using 128-bit keys.
AES_128_GCM = 41;
// AES-GCM (Galois Counter Mode) using 256-bit keys.
AES_256_GCM = 19;
// AES-CBC (Cipher Block Chaining Mode) using 128-bit keys.
AES_128_CBC = 42;
// AES-CBC (Cipher Block Chaining Mode) using 256-bit keys.
AES_256_CBC = 43;
// AES-CTR (Counter Mode) using 128-bit keys.
AES_128_CTR = 44;
// AES-CTR (Counter Mode) using 256-bit keys.
AES_256_CTR = 45;
// RSASSA-PSS 2048 bit key with a SHA256 digest.
RSA_SIGN_PSS_2048_SHA256 = 2;
// RSASSA-PSS 3072 bit key with a SHA256 digest.
RSA_SIGN_PSS_3072_SHA256 = 3;
// RSASSA-PSS 4096 bit key with a SHA256 digest.
RSA_SIGN_PSS_4096_SHA256 = 4;
// RSASSA-PSS 4096 bit key with a SHA512 digest.
RSA_SIGN_PSS_4096_SHA512 = 15;
// RSASSA-PKCS1-v1_5 with a 2048 bit key and a SHA256 digest.
RSA_SIGN_PKCS1_2048_SHA256 = 5;
// RSASSA-PKCS1-v1_5 with a 3072 bit key and a SHA256 digest.
RSA_SIGN_PKCS1_3072_SHA256 = 6;
// RSASSA-PKCS1-v1_5 with a 4096 bit key and a SHA256 digest.
RSA_SIGN_PKCS1_4096_SHA256 = 7;
// RSASSA-PKCS1-v1_5 with a 4096 bit key and a SHA512 digest.
RSA_SIGN_PKCS1_4096_SHA512 = 16;
// RSASSA-PKCS1-v1_5 signing without encoding, with a 2048 bit key.
RSA_SIGN_RAW_PKCS1_2048 = 28;
// RSASSA-PKCS1-v1_5 signing without encoding, with a 3072 bit key.
RSA_SIGN_RAW_PKCS1_3072 = 29;
// RSASSA-PKCS1-v1_5 signing without encoding, with a 4096 bit key.
RSA_SIGN_RAW_PKCS1_4096 = 30;
// RSAES-OAEP 2048 bit key with a SHA256 digest.
RSA_DECRYPT_OAEP_2048_SHA256 = 8;
// RSAES-OAEP 3072 bit key with a SHA256 digest.
RSA_DECRYPT_OAEP_3072_SHA256 = 9;
// RSAES-OAEP 4096 bit key with a SHA256 digest.
RSA_DECRYPT_OAEP_4096_SHA256 = 10;
// RSAES-OAEP 4096 bit key with a SHA512 digest.
RSA_DECRYPT_OAEP_4096_SHA512 = 17;
// RSAES-OAEP 2048 bit key with a SHA1 digest.
RSA_DECRYPT_OAEP_2048_SHA1 = 37;
// RSAES-OAEP 3072 bit key with a SHA1 digest.
RSA_DECRYPT_OAEP_3072_SHA1 = 38;
// RSAES-OAEP 4096 bit key with a SHA1 digest.
RSA_DECRYPT_OAEP_4096_SHA1 = 39;
// ECDSA on the NIST P-256 curve with a SHA256 digest.
// Other hash functions can also be used:
// https://cloud.google.com/kms/docs/create-validate-signatures#ecdsa_support_for_other_hash_algorithms
EC_SIGN_P256_SHA256 = 12;
// ECDSA on the NIST P-384 curve with a SHA384 digest.
// Other hash functions can also be used:
// https://cloud.google.com/kms/docs/create-validate-signatures#ecdsa_support_for_other_hash_algorithms
EC_SIGN_P384_SHA384 = 13;
// ECDSA on the non-NIST secp256k1 curve. This curve is only supported for
// HSM protection level.
// Other hash functions can also be used:
// https://cloud.google.com/kms/docs/create-validate-signatures#ecdsa_support_for_other_hash_algorithms
EC_SIGN_SECP256K1_SHA256 = 31;
// EdDSA on the Curve25519 in pure mode (taking data as input).
EC_SIGN_ED25519 = 40;
// HMAC-SHA256 signing with a 256 bit key.
HMAC_SHA256 = 32;
// HMAC-SHA1 signing with a 160 bit key.
HMAC_SHA1 = 33;
// HMAC-SHA384 signing with a 384 bit key.
HMAC_SHA384 = 34;
// HMAC-SHA512 signing with a 512 bit key.
HMAC_SHA512 = 35;
// HMAC-SHA224 signing with a 224 bit key.
HMAC_SHA224 = 36;
// Algorithm representing symmetric encryption by an external key manager.
EXTERNAL_SYMMETRIC_ENCRYPTION = 18;
// ML-KEM-768 (FIPS 203)
ML_KEM_768 = 47;
// ML-KEM-1024 (FIPS 203)
ML_KEM_1024 = 48;
// X-Wing hybrid KEM combining ML-KEM-768 with X25519 following
// datatracker.ietf.org/doc/draft-connolly-cfrg-xwing-kem/.
KEM_XWING = 63;
// The post-quantum Module-Lattice-Based Digital Signature Algorithm, at
// security level 1. Randomized version.
PQ_SIGN_ML_DSA_44 = 68;
// The post-quantum Module-Lattice-Based Digital Signature Algorithm, at
// security level 3. Randomized version.
PQ_SIGN_ML_DSA_65 = 56;
// The post-quantum Module-Lattice-Based Digital Signature Algorithm, at
// security level 5. Randomized version.
PQ_SIGN_ML_DSA_87 = 69;
// The post-quantum stateless hash-based digital signature algorithm, at
// security level 1. Randomized version.
PQ_SIGN_SLH_DSA_SHA2_128S = 57;
// The post-quantum stateless hash-based digital signature algorithm, at
// security level 1. Randomized pre-hash version supporting SHA256 digests.
PQ_SIGN_HASH_SLH_DSA_SHA2_128S_SHA256 = 60;
// The post-quantum Module-Lattice-Based Digital Signature Algorithm, at
// security level 1. Randomized version supporting externally-computed
// message representatives.
PQ_SIGN_ML_DSA_44_EXTERNAL_MU = 70;
// The post-quantum Module-Lattice-Based Digital Signature Algorithm, at
// security level 3. Randomized version supporting externally-computed
// message representatives.
PQ_SIGN_ML_DSA_65_EXTERNAL_MU = 67;
// The post-quantum Module-Lattice-Based Digital Signature Algorithm, at
// security level 5. Randomized version supporting externally-computed
// message representatives.
PQ_SIGN_ML_DSA_87_EXTERNAL_MU = 71;
}
// The state of a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion],
// indicating if it can be used.
enum CryptoKeyVersionState {
// Not specified.
CRYPTO_KEY_VERSION_STATE_UNSPECIFIED = 0;
// This version is still being generated. It may not be used, enabled,
// disabled, or destroyed yet. Cloud KMS will automatically mark this
// version
// [ENABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.ENABLED]
// as soon as the version is ready.
PENDING_GENERATION = 5;
// This version may be used for cryptographic operations.
ENABLED = 1;
// This version may not be used, but the key material is still available,
// and the version can be placed back into the
// [ENABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.ENABLED]
// state.
DISABLED = 2;
// The key material of this version is destroyed and no longer stored.
// This version may only become
// [ENABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.ENABLED]
// again if this version is
// [reimport_eligible][google.cloud.kms.v1.CryptoKeyVersion.reimport_eligible]
// and the original key material is reimported with a call to
// [KeyManagementService.ImportCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.ImportCryptoKeyVersion].
DESTROYED = 3;
// This version is scheduled for destruction, and will be destroyed soon.
// Call
// [RestoreCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.RestoreCryptoKeyVersion]
// to put it back into the
// [DISABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DISABLED]
// state.
DESTROY_SCHEDULED = 4;
// This version is still being imported. It may not be used, enabled,
// disabled, or destroyed yet. Cloud KMS will automatically mark this
// version
// [ENABLED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.ENABLED]
// as soon as the version is ready.
PENDING_IMPORT = 6;
// This version was not imported successfully. It may not be used, enabled,
// disabled, or destroyed. The submitted key material has been discarded.
// Additional details can be found in
// [CryptoKeyVersion.import_failure_reason][google.cloud.kms.v1.CryptoKeyVersion.import_failure_reason].
IMPORT_FAILED = 7;
// This version was not generated successfully. It may not be used, enabled,
// disabled, or destroyed. Additional details can be found in
// [CryptoKeyVersion.generation_failure_reason][google.cloud.kms.v1.CryptoKeyVersion.generation_failure_reason].
GENERATION_FAILED = 8;
// This version was destroyed, and it may not be used or enabled again.
// Cloud KMS is waiting for the corresponding key material residing in an
// external key manager to be destroyed.
PENDING_EXTERNAL_DESTRUCTION = 9;
// This version was destroyed, and it may not be used or enabled again.
// However, Cloud KMS could not confirm that the corresponding key material
// residing in an external key manager was destroyed. Additional details can
// be found in
// [CryptoKeyVersion.external_destruction_failure_reason][google.cloud.kms.v1.CryptoKeyVersion.external_destruction_failure_reason].
EXTERNAL_DESTRUCTION_FAILED = 10;
}
// A view for [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]s.
// Controls the level of detail returned for
// [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion] in
// [KeyManagementService.ListCryptoKeyVersions][google.cloud.kms.v1.KeyManagementService.ListCryptoKeyVersions]
// and
// [KeyManagementService.ListCryptoKeys][google.cloud.kms.v1.KeyManagementService.ListCryptoKeys].
enum CryptoKeyVersionView {
// Default view for each
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]. Does not
// include the
// [attestation][google.cloud.kms.v1.CryptoKeyVersion.attestation] field.
CRYPTO_KEY_VERSION_VIEW_UNSPECIFIED = 0;
// Provides all fields in each
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion], including the
// [attestation][google.cloud.kms.v1.CryptoKeyVersion.attestation].
FULL = 1;
}
// Output only. The resource name for this
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] in the format
// `projects/*/locations/*/keyRings/*/cryptoKeys/*/cryptoKeyVersions/*`.
string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// The current state of the
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion].
CryptoKeyVersionState state = 3;
// Output only. The [ProtectionLevel][google.cloud.kms.v1.ProtectionLevel]
// describing how crypto operations are performed with this
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion].
ProtectionLevel protection_level = 7
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The
// [CryptoKeyVersionAlgorithm][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm]
// that this [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]
// supports.
CryptoKeyVersionAlgorithm algorithm = 10
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Statement that was generated and signed by the HSM at key
// creation time. Use this statement to verify attributes of the key as stored
// on the HSM, independently of Google. Only provided for key versions with
// [protection_level][google.cloud.kms.v1.CryptoKeyVersion.protection_level]
// [HSM][google.cloud.kms.v1.ProtectionLevel.HSM].
KeyOperationAttestation attestation = 8
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] was created.
google.protobuf.Timestamp create_time = 4
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time this
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]'s key material was
// generated.
google.protobuf.Timestamp generate_time = 11
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time this
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]'s key material is
// scheduled for destruction. Only present if
// [state][google.cloud.kms.v1.CryptoKeyVersion.state] is
// [DESTROY_SCHEDULED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROY_SCHEDULED].
google.protobuf.Timestamp destroy_time = 5
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time this CryptoKeyVersion's key material was
// destroyed. Only present if
// [state][google.cloud.kms.v1.CryptoKeyVersion.state] is
// [DESTROYED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.DESTROYED].
google.protobuf.Timestamp destroy_event_time = 6
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The name of the [ImportJob][google.cloud.kms.v1.ImportJob]
// used in the most recent import of this
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]. Only present if
// the underlying key material was imported.
string import_job = 14 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]'s key material was
// most recently imported.
google.protobuf.Timestamp import_time = 15
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The root cause of the most recent import failure. Only present
// if [state][google.cloud.kms.v1.CryptoKeyVersion.state] is
// [IMPORT_FAILED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.IMPORT_FAILED].
string import_failure_reason = 16 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The root cause of the most recent generation failure. Only
// present if [state][google.cloud.kms.v1.CryptoKeyVersion.state] is
// [GENERATION_FAILED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.GENERATION_FAILED].
string generation_failure_reason = 19
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The root cause of the most recent external destruction
// failure. Only present if
// [state][google.cloud.kms.v1.CryptoKeyVersion.state] is
// [EXTERNAL_DESTRUCTION_FAILED][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionState.EXTERNAL_DESTRUCTION_FAILED].
string external_destruction_failure_reason = 20
[(google.api.field_behavior) = OUTPUT_ONLY];
// ExternalProtectionLevelOptions stores a group of additional fields for
// configuring a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] that
// are specific to the
// [EXTERNAL][google.cloud.kms.v1.ProtectionLevel.EXTERNAL] protection level
// and [EXTERNAL_VPC][google.cloud.kms.v1.ProtectionLevel.EXTERNAL_VPC]
// protection levels.
ExternalProtectionLevelOptions external_protection_level_options = 17;
// Output only. Whether or not this key version is eligible for reimport, by
// being specified as a target in
// [ImportCryptoKeyVersionRequest.crypto_key_version][google.cloud.kms.v1.ImportCryptoKeyVersionRequest.crypto_key_version].
bool reimport_eligible = 18 [(google.api.field_behavior) = OUTPUT_ONLY];
}
// Data with integrity verification field.
message ChecksummedData {
// Raw Data.
bytes data = 3;
// Integrity verification field. A CRC32C
// checksum of the returned
// [ChecksummedData.data][google.cloud.kms.v1.ChecksummedData.data]. An
// integrity check of
// [ChecksummedData.data][google.cloud.kms.v1.ChecksummedData.data] can be
// performed by computing the CRC32C checksum of
// [ChecksummedData.data][google.cloud.kms.v1.ChecksummedData.data] and
// comparing your results to this field. Discard the response in case of
// non-matching checksum values, and perform a limited number of retries. A
// persistent mismatch may indicate an issue in your computation of the CRC32C
// checksum. Note: This field is defined as int64 for reasons of compatibility
// across different languages. However, it is a non-negative integer, which
// will never exceed `2^32-1`, and can be safely downconverted to uint32 in
// languages that support this type.
google.protobuf.Int64Value crc32c_checksum = 2;
}
// The public keys for a given
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion]. Obtained via
// [GetPublicKey][google.cloud.kms.v1.KeyManagementService.GetPublicKey].
message PublicKey {
option (google.api.resource) = {
type: "cloudkms.googleapis.com/PublicKey"
pattern: "projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{crypto_key}/cryptoKeyVersions/{crypto_key_version}/publicKey"
};
// The supported [PublicKey][google.cloud.kms.v1.PublicKey] formats.
enum PublicKeyFormat {
// If the
// [public_key_format][google.cloud.kms.v1.GetPublicKeyRequest.public_key_format]
// field is not specified:
// - For PQC algorithms, an error will be returned.
// - For non-PQC algorithms, the default format is PEM, and the field
// [pem][google.cloud.kms.v1.PublicKey.pem] will be populated.
//
// Otherwise, the public key will be exported through the
// [public_key][google.cloud.kms.v1.PublicKey.public_key] field in the
// requested format.
PUBLIC_KEY_FORMAT_UNSPECIFIED = 0;
// The returned public key will be encoded in PEM format.
// See the [RFC7468](https://tools.ietf.org/html/rfc7468) sections for
// [General Considerations](https://tools.ietf.org/html/rfc7468#section-2)
// and [Textual Encoding of Subject Public Key Info]
// (https://tools.ietf.org/html/rfc7468#section-13) for more information.
PEM = 1;
// The returned public key will be encoded in DER format (the
// PrivateKeyInfo structure from RFC 5208).
DER = 2;
// This is supported only for PQC algorithms.
// The key material is returned in the format defined by NIST PQC
// standards (FIPS 203, FIPS 204, and FIPS 205).
NIST_PQC = 3;
// The returned public key is in raw bytes format defined in its standard
// https://datatracker.ietf.org/doc/draft-connolly-cfrg-xwing-kem.
XWING_RAW_BYTES = 4;
}
// The public key, encoded in PEM format. For more information, see the
// [RFC 7468](https://tools.ietf.org/html/rfc7468) sections for
// [General Considerations](https://tools.ietf.org/html/rfc7468#section-2) and
// [Textual Encoding of Subject Public Key Info]
// (https://tools.ietf.org/html/rfc7468#section-13).
string pem = 1;
// The
// [Algorithm][google.cloud.kms.v1.CryptoKeyVersion.CryptoKeyVersionAlgorithm]
// associated with this key.
CryptoKeyVersion.CryptoKeyVersionAlgorithm algorithm = 2;
// Integrity verification field. A CRC32C checksum of the returned
// [PublicKey.pem][google.cloud.kms.v1.PublicKey.pem]. An integrity check of
// [PublicKey.pem][google.cloud.kms.v1.PublicKey.pem] can be performed by
// computing the CRC32C checksum of
// [PublicKey.pem][google.cloud.kms.v1.PublicKey.pem] and comparing your
// results to this field. Discard the response in case of non-matching
// checksum values, and perform a limited number of retries. A persistent
// mismatch may indicate an issue in your computation of the CRC32C checksum.
// Note: This field is defined as int64 for reasons of compatibility across
// different languages. However, it is a non-negative integer, which will
// never exceed `2^32-1`, and can be safely downconverted to uint32 in
// languages that support this type.
//
// NOTE: This field is in Beta.
google.protobuf.Int64Value pem_crc32c = 3;
// The [name][google.cloud.kms.v1.CryptoKeyVersion.name] of the
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] public key.
// Provided here for verification.
//
// NOTE: This field is in Beta.
string name = 4;
// The [ProtectionLevel][google.cloud.kms.v1.ProtectionLevel] of the
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] public key.
ProtectionLevel protection_level = 5;
// The [PublicKey][google.cloud.kms.v1.PublicKey] format specified by the
// customer through the
// [public_key_format][google.cloud.kms.v1.GetPublicKeyRequest.public_key_format]
// field.
PublicKeyFormat public_key_format = 7;
// This field contains the public key (with integrity verification), formatted
// according to the
// [public_key_format][google.cloud.kms.v1.PublicKey.public_key_format] field.
ChecksummedData public_key = 8;
}
// An [ImportJob][google.cloud.kms.v1.ImportJob] can be used to create
// [CryptoKeys][google.cloud.kms.v1.CryptoKey] and
// [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion] using pre-existing
// key material, generated outside of Cloud KMS.
//
// When an [ImportJob][google.cloud.kms.v1.ImportJob] is created, Cloud KMS will
// generate a "wrapping key", which is a public/private key pair. You use the
// wrapping key to encrypt (also known as wrap) the pre-existing key material to
// protect it during the import process. The nature of the wrapping key depends
// on the choice of
// [import_method][google.cloud.kms.v1.ImportJob.import_method]. When the
// wrapping key generation is complete, the
// [state][google.cloud.kms.v1.ImportJob.state] will be set to
// [ACTIVE][google.cloud.kms.v1.ImportJob.ImportJobState.ACTIVE] and the
// [public_key][google.cloud.kms.v1.ImportJob.public_key] can be fetched. The
// fetched public key can then be used to wrap your pre-existing key material.
//
// Once the key material is wrapped, it can be imported into a new
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] in an existing
// [CryptoKey][google.cloud.kms.v1.CryptoKey] by calling
// [ImportCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.ImportCryptoKeyVersion].
// Multiple [CryptoKeyVersions][google.cloud.kms.v1.CryptoKeyVersion] can be
// imported with a single [ImportJob][google.cloud.kms.v1.ImportJob]. Cloud KMS
// uses the private key portion of the wrapping key to unwrap the key material.
// Only Cloud KMS has access to the private key.
//
// An [ImportJob][google.cloud.kms.v1.ImportJob] expires 3 days after it is
// created. Once expired, Cloud KMS will no longer be able to import or unwrap
// any key material that was wrapped with the
// [ImportJob][google.cloud.kms.v1.ImportJob]'s public key.
//
// For more information, see
// [Importing a key](https://cloud.google.com/kms/docs/importing-a-key).
message ImportJob {
option (google.api.resource) = {
type: "cloudkms.googleapis.com/ImportJob"
pattern: "projects/{project}/locations/{location}/keyRings/{key_ring}/importJobs/{import_job}"
};
// [ImportMethod][google.cloud.kms.v1.ImportJob.ImportMethod] describes the
// key wrapping method chosen for this
// [ImportJob][google.cloud.kms.v1.ImportJob].
enum ImportMethod {
// Not specified.
IMPORT_METHOD_UNSPECIFIED = 0;
// This ImportMethod represents the CKM_RSA_AES_KEY_WRAP key wrapping
// scheme defined in the PKCS #11 standard. In summary, this involves
// wrapping the raw key with an ephemeral AES key, and wrapping the
// ephemeral AES key with a 3072 bit RSA key. For more details, see
// [RSA AES key wrap
// mechanism](http://docs.oasis-open.org/pkcs11/pkcs11-curr/v2.40/cos01/pkcs11-curr-v2.40-cos01.html#_Toc408226908).
RSA_OAEP_3072_SHA1_AES_256 = 1;
// This ImportMethod represents the CKM_RSA_AES_KEY_WRAP key wrapping
// scheme defined in the PKCS #11 standard. In summary, this involves
// wrapping the raw key with an ephemeral AES key, and wrapping the
// ephemeral AES key with a 4096 bit RSA key. For more details, see
// [RSA AES key wrap
// mechanism](http://docs.oasis-open.org/pkcs11/pkcs11-curr/v2.40/cos01/pkcs11-curr-v2.40-cos01.html#_Toc408226908).
RSA_OAEP_4096_SHA1_AES_256 = 2;
// This ImportMethod represents the CKM_RSA_AES_KEY_WRAP key wrapping
// scheme defined in the PKCS #11 standard. In summary, this involves
// wrapping the raw key with an ephemeral AES key, and wrapping the
// ephemeral AES key with a 3072 bit RSA key. For more details, see
// [RSA AES key wrap
// mechanism](http://docs.oasis-open.org/pkcs11/pkcs11-curr/v2.40/cos01/pkcs11-curr-v2.40-cos01.html#_Toc408226908).
RSA_OAEP_3072_SHA256_AES_256 = 3;
// This ImportMethod represents the CKM_RSA_AES_KEY_WRAP key wrapping
// scheme defined in the PKCS #11 standard. In summary, this involves
// wrapping the raw key with an ephemeral AES key, and wrapping the
// ephemeral AES key with a 4096 bit RSA key. For more details, see
// [RSA AES key wrap
// mechanism](http://docs.oasis-open.org/pkcs11/pkcs11-curr/v2.40/cos01/pkcs11-curr-v2.40-cos01.html#_Toc408226908).
RSA_OAEP_4096_SHA256_AES_256 = 4;
// This ImportMethod represents RSAES-OAEP with a 3072 bit RSA key. The
// key material to be imported is wrapped directly with the RSA key. Due
// to technical limitations of RSA wrapping, this method cannot be used to
// wrap RSA keys for import.
RSA_OAEP_3072_SHA256 = 5;
// This ImportMethod represents RSAES-OAEP with a 4096 bit RSA key. The
// key material to be imported is wrapped directly with the RSA key. Due
// to technical limitations of RSA wrapping, this method cannot be used to
// wrap RSA keys for import.
RSA_OAEP_4096_SHA256 = 6;
}
// The state of the [ImportJob][google.cloud.kms.v1.ImportJob], indicating if
// it can be used.
enum ImportJobState {
// Not specified.
IMPORT_JOB_STATE_UNSPECIFIED = 0;
// The wrapping key for this job is still being generated. It may not be
// used. Cloud KMS will automatically mark this job as
// [ACTIVE][google.cloud.kms.v1.ImportJob.ImportJobState.ACTIVE] as soon as
// the wrapping key is generated.
PENDING_GENERATION = 1;
// This job may be used in
// [CreateCryptoKey][google.cloud.kms.v1.KeyManagementService.CreateCryptoKey]
// and
// [CreateCryptoKeyVersion][google.cloud.kms.v1.KeyManagementService.CreateCryptoKeyVersion]
// requests.
ACTIVE = 2;
// This job can no longer be used and may not leave this state once entered.
EXPIRED = 3;
}
// The public key component of the wrapping key. For details of the type of
// key this public key corresponds to, see the
// [ImportMethod][google.cloud.kms.v1.ImportJob.ImportMethod].
message WrappingPublicKey {
// The public key, encoded in PEM format. For more information, see the [RFC
// 7468](https://tools.ietf.org/html/rfc7468) sections for [General
// Considerations](https://tools.ietf.org/html/rfc7468#section-2) and
// [Textual Encoding of Subject Public Key Info]
// (https://tools.ietf.org/html/rfc7468#section-13).
string pem = 1;
}
// Output only. The resource name for this
// [ImportJob][google.cloud.kms.v1.ImportJob] in the format
// `projects/*/locations/*/keyRings/*/importJobs/*`.
string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];
// Required. Immutable. The wrapping method to be used for incoming key
// material.
ImportMethod import_method = 2 [
(google.api.field_behavior) = REQUIRED,
(google.api.field_behavior) = IMMUTABLE
];
// Required. Immutable. The protection level of the
// [ImportJob][google.cloud.kms.v1.ImportJob]. This must match the
// [protection_level][google.cloud.kms.v1.CryptoKeyVersionTemplate.protection_level]
// of the [version_template][google.cloud.kms.v1.CryptoKey.version_template]
// on the [CryptoKey][google.cloud.kms.v1.CryptoKey] you attempt to import
// into.
ProtectionLevel protection_level = 9 [
(google.api.field_behavior) = REQUIRED,
(google.api.field_behavior) = IMMUTABLE
];
// Output only. The time at which this
// [ImportJob][google.cloud.kms.v1.ImportJob] was created.
google.protobuf.Timestamp create_time = 3
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time this [ImportJob][google.cloud.kms.v1.ImportJob]'s key
// material was generated.
google.protobuf.Timestamp generate_time = 4
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which this
// [ImportJob][google.cloud.kms.v1.ImportJob] is scheduled for expiration and
// can no longer be used to import key material.
google.protobuf.Timestamp expire_time = 5
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time this [ImportJob][google.cloud.kms.v1.ImportJob]
// expired. Only present if [state][google.cloud.kms.v1.ImportJob.state] is
// [EXPIRED][google.cloud.kms.v1.ImportJob.ImportJobState.EXPIRED].
google.protobuf.Timestamp expire_event_time = 10
[(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The current state of the
// [ImportJob][google.cloud.kms.v1.ImportJob], indicating if it can be used.
ImportJobState state = 6 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The public key with which to wrap key material prior to
// import. Only returned if [state][google.cloud.kms.v1.ImportJob.state] is
// [ACTIVE][google.cloud.kms.v1.ImportJob.ImportJobState.ACTIVE].
WrappingPublicKey public_key = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. Statement that was generated and signed by the key creator
// (for example, an HSM) at key creation time. Use this statement to verify
// attributes of the key as stored on the HSM, independently of Google.
// Only present if the chosen
// [ImportMethod][google.cloud.kms.v1.ImportJob.ImportMethod] is one with a
// protection level of [HSM][google.cloud.kms.v1.ProtectionLevel.HSM].
KeyOperationAttestation attestation = 8
[(google.api.field_behavior) = OUTPUT_ONLY];
// Immutable. The resource name of the backend environment where the key
// material for the wrapping key resides and where all related cryptographic
// operations are performed. Currently, this field is only populated for keys
// stored in HSM_SINGLE_TENANT. Note, this list is non-exhaustive and may
// apply to additional [ProtectionLevels][google.cloud.kms.v1.ProtectionLevel]
// in the future. Supported resources:
// * `"projects/*/locations/*/singleTenantHsmInstances/*"`
string crypto_key_backend = 11 [
(google.api.field_behavior) = IMMUTABLE,
(google.api.resource_reference) = { type: "*" }
];
}
// ExternalProtectionLevelOptions stores a group of additional fields for
// configuring a [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] that
// are specific to the [EXTERNAL][google.cloud.kms.v1.ProtectionLevel.EXTERNAL]
// protection level and
// [EXTERNAL_VPC][google.cloud.kms.v1.ProtectionLevel.EXTERNAL_VPC] protection
// levels.
message ExternalProtectionLevelOptions {
// The URI for an external resource that this
// [CryptoKeyVersion][google.cloud.kms.v1.CryptoKeyVersion] represents.
string external_key_uri = 1;
// The path to the external key material on the EKM when using
// [EkmConnection][google.cloud.kms.v1.EkmConnection] e.g., "v0/my/key". Set
// this field instead of external_key_uri when using an
// [EkmConnection][google.cloud.kms.v1.EkmConnection].
string ekm_connection_key_path = 2;
}
// A
// [KeyAccessJustificationsPolicy][google.cloud.kms.v1.KeyAccessJustificationsPolicy]
// specifies zero or more allowed
// [AccessReason][google.cloud.kms.v1.AccessReason] values for encrypt, decrypt,
// and sign operations on a [CryptoKey][google.cloud.kms.v1.CryptoKey].
message KeyAccessJustificationsPolicy {
// The list of allowed reasons for access to a
// [CryptoKey][google.cloud.kms.v1.CryptoKey]. Zero allowed access reasons
// means all encrypt, decrypt, and sign operations for the
// [CryptoKey][google.cloud.kms.v1.CryptoKey] associated with this policy will
// fail.
repeated AccessReason allowed_access_reasons = 1;
}
// A RetiredResource resource represents the record of a deleted
// [CryptoKey][google.cloud.kms.v1.CryptoKey]. Its purpose is to provide
// visibility into retained user data and to prevent reuse of these names for
// new [CryptoKeys][google.cloud.kms.v1.CryptoKey].
message RetiredResource {
option (google.api.resource) = {
type: "cloudkms.googleapis.com/RetiredResource"
pattern: "projects/{project}/locations/{location}/retiredResources/{retired_resource}"
plural: "retiredResources"
singular: "retiredResource"
};
// Output only. Identifier. The resource name for this
// [RetiredResource][google.cloud.kms.v1.RetiredResource] in the format
// `projects/*/locations/*/retiredResources/*`.
string name = 1 [
(google.api.field_behavior) = OUTPUT_ONLY,
(google.api.field_behavior) = IDENTIFIER
];
// Output only. The full resource name of the original
// [CryptoKey][google.cloud.kms.v1.CryptoKey] that was deleted in the format
// `projects/*/locations/*/keyRings/*/cryptoKeys/*`.
string original_resource = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The resource type of the original deleted resource.
string resource_type = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
// Output only. The time at which the original resource was deleted and this
// RetiredResource record was created.
google.protobuf.Timestamp delete_time = 4
[(google.api.field_behavior) = OUTPUT_ONLY];
}
// [ProtectionLevel][google.cloud.kms.v1.ProtectionLevel] specifies how
// cryptographic operations are performed. For more information, see [Protection
// levels] (https://cloud.google.com/kms/docs/algorithms#protection_levels).
enum ProtectionLevel {
// Not specified.
PROTECTION_LEVEL_UNSPECIFIED = 0;
// Crypto operations are performed in software.
SOFTWARE = 1;
// Crypto operations are performed in a Hardware Security Module.
HSM = 2;
// Crypto operations are performed by an external key manager.
EXTERNAL = 3;
// Crypto operations are performed in an EKM-over-VPC backend.
EXTERNAL_VPC = 4;
// Crypto operations are performed in a single-tenant HSM.
HSM_SINGLE_TENANT = 5;
}
// Describes the reason for a data access. Please refer to
// https://cloud.google.com/assured-workloads/key-access-justifications/docs/justification-codes
// for the detailed semantic meaning of justification reason codes.
enum AccessReason {
// Unspecified access reason.
REASON_UNSPECIFIED = 0;
// Customer-initiated support.
CUSTOMER_INITIATED_SUPPORT = 1;
// Google-initiated access for system management and troubleshooting.
GOOGLE_INITIATED_SERVICE = 2;
// Google-initiated access in response to a legal request or legal process.
THIRD_PARTY_DATA_REQUEST = 3;
// Google-initiated access for security, fraud, abuse, or compliance purposes.
GOOGLE_INITIATED_REVIEW = 4;
// Customer uses their account to perform any access to their own data which
// their IAM policy authorizes.
CUSTOMER_INITIATED_ACCESS = 5;
// Google systems access customer data to help optimize the structure of the
// data or quality for future uses by the customer.
GOOGLE_INITIATED_SYSTEM_OPERATION = 6;
// No reason is expected for this key request.
REASON_NOT_EXPECTED = 7;
// Deprecated: This code is no longer generated by
// Google Cloud. The GOOGLE_RESPONSE_TO_PRODUCTION_ALERT justification codes
// available in both Key Access Justifications and Access Transparency logs
// provide customer-visible signals of emergency access in more precise
// contexts.
//
// Customer uses their account to perform any access to their own data which
// their IAM policy authorizes, and one of the following is true:
//
// * A Google administrator has reset the root-access account associated with
// the user's organization within the past 7 days.
// * A Google-initiated emergency access operation has interacted with a
// resource in the same project or folder as the currently accessed resource
// within the past 7 days.
MODIFIED_CUSTOMER_INITIATED_ACCESS = 8 [deprecated = true];
// Deprecated: This code is no longer generated by
// Google Cloud. The GOOGLE_RESPONSE_TO_PRODUCTION_ALERT justification codes
// available in both Key Access Justifications and Access Transparency logs
// provide customer-visible signals of emergency access in more precise
// contexts.
//
// Google systems access customer data to help optimize the structure of the
// data or quality for future uses by the customer, and one of the following
// is true:
//
// * A Google administrator has reset the root-access account associated with
// the user's organization within the past 7 days.
// * A Google-initiated emergency access operation has interacted with a
// resource in the same project or folder as the currently accessed resource
// within the past 7 days.
MODIFIED_GOOGLE_INITIATED_SYSTEM_OPERATION = 9 [deprecated = true];
// Google-initiated access to maintain system reliability.
GOOGLE_RESPONSE_TO_PRODUCTION_ALERT = 10;
// One of the following operations is being executed while simultaneously
// encountering an internal technical issue which prevented a more precise
// justification code from being generated:
//
// * Your account has been used to perform any access to your own data which
// your IAM policy authorizes.
// * An automated Google system operates on encrypted customer data which your
// IAM policy authorizes.
// * Customer-initiated Google support access.
// * Google-initiated support access to protect system reliability.
CUSTOMER_AUTHORIZED_WORKFLOW_SERVICING = 11;
}