mmv1/products/secretmanager/Secret.yaml (225 lines of code) (raw):
# Copyright 2024 Google Inc.
# 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.
---
name: 'Secret'
api_variant_patterns:
- 'projects/{project}/secrets/{secret}'
description: |
A Secret is a logical secret whose value and versions can be accessed.
references:
guides:
'Create and deploy a Secret': 'https://cloud.google.com/secret-manager/docs/creating-and-accessing-secrets'
api: 'https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets'
docs:
base_url: 'projects/{{project}}/secrets'
self_link: 'projects/{{project}}/secrets/{{secret_id}}'
create_url: 'projects/{{project}}/secrets?secretId={{secret_id}}'
update_verb: 'PATCH'
update_mask: true
import_format:
- 'projects/{{project}}/secrets/{{secret_id}}'
timeouts:
insert_minutes: 20
update_minutes: 20
delete_minutes: 20
iam_policy:
method_name_separator: ':'
allowed_iam_role: 'roles/secretmanager.secretAccessor'
parent_resource_attribute: 'secret_id'
iam_conditions_request_type: 'QUERY_PARAM_NESTED'
example_config_body: 'templates/terraform/iam/iam_attributes.go.tmpl'
custom_code:
constants: 'templates/terraform/constants/secret_manager_secret.go.tmpl'
pre_update: 'templates/terraform/pre_update/secret_manager_secret.go.tmpl'
custom_diff:
- 'secretManagerSecretAutoCustomizeDiff'
examples:
- name: 'secret_config_basic'
primary_resource_id: 'secret-basic'
primary_resource_name: 'fmt.Sprintf("secret%s", context["random_suffix"])'
vars:
secret_id: 'secret'
- name: 'secret_with_annotations'
primary_resource_id: 'secret-with-annotations'
vars:
secret_id: 'secret'
- name: 'secret_with_version_destroy_ttl'
primary_resource_id: 'secret-with-version-destroy-ttl'
vars:
secret_id: 'secret'
- name: 'secret_with_automatic_cmek'
primary_resource_id: 'secret-with-automatic-cmek'
vars:
secret_id: 'secret'
kms_key_name: 'kms-key'
test_vars_overrides:
'kms_key_name': 'acctest.BootstrapKMSKey(t).CryptoKey.Name'
parameters:
- name: 'secretId'
type: String
description: |
This must be unique within the project.
url_param_only: true
required: true
immutable: true
properties:
- name: 'name'
type: String
description: |
The resource name of the Secret. Format:
`projects/{{project}}/secrets/{{secret_id}}`
output: true
- name: 'createTime'
type: String
description: |
The time at which the Secret was created.
output: true
- name: 'labels'
type: KeyValueLabels
description: |
The labels assigned to this Secret.
Label keys must be between 1 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,
and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}][\p{Ll}\p{Lo}\p{N}_-]{0,62}
Label values must be between 0 and 63 characters long, have a UTF-8 encoding of maximum 128 bytes,
and must conform to the following PCRE regular expression: [\p{Ll}\p{Lo}\p{N}_-]{0,63}
No more than 64 labels can be assigned to a given resource.
An object containing a list of "key": value pairs. Example:
{ "name": "wrench", "mass": "1.3kg", "count": "3" }.
- name: 'annotations'
type: KeyValueAnnotations
description: |
Custom metadata about the secret.
Annotations are distinct from various forms of labels. Annotations exist to allow
client tools to store their own state information without requiring a database.
Annotation keys must be between 1 and 63 characters long, have a UTF-8 encoding of
maximum 128 bytes, begin and end with an alphanumeric character ([a-z0-9A-Z]), and
may have dashes (-), underscores (_), dots (.), and alphanumerics in between these
symbols.
The total size of annotation keys and values must be less than 16KiB.
An object containing a list of "key": value pairs. Example:
{ "name": "wrench", "mass": "1.3kg", "count": "3" }.
- name: 'versionAliases'
type: KeyValuePairs
description: |
Mapping from version alias to version name.
A version alias is a string with a maximum length of 63 characters and can contain
uppercase and lowercase letters, numerals, and the hyphen (-) and underscore ('_')
characters. An alias string must start with a letter and cannot be the string
'latest' or 'NEW'. No more than 50 aliases can be assigned to a given secret.
An object containing a list of "key": value pairs. Example:
{ "name": "wrench", "mass": "1.3kg", "count": "3" }.
- name: 'versionDestroyTtl'
type: String
description: |
Secret Version TTL after destruction request.
This is a part of the delayed delete feature on Secret Version.
For secret with versionDestroyTtl>0, version destruction doesn't happen immediately
on calling destroy instead the version goes to a disabled state and
the actual destruction happens after this TTL expires.
- name: 'replication'
type: NestedObject
description: |
The replication policy of the secret data attached to the Secret. It cannot be changed
after the Secret has been created.
required: true
immutable: true
properties:
- name: 'auto'
type: NestedObject
description: |
The Secret will automatically be replicated without any restrictions.
api_name: automatic
immutable: true
send_empty_value: true
allow_empty_object: true
exactly_one_of:
- 'replication.0.user_managed'
- 'replication.0.auto'
properties:
- name: 'customerManagedEncryption'
type: NestedObject
description: |
The customer-managed encryption configuration of the Secret.
If no configuration is provided, Google-managed default
encryption is used.
properties:
- name: 'kmsKeyName'
type: String
description: |
The resource name of the Cloud KMS CryptoKey used to encrypt secret payloads.
required: true
- name: 'userManaged'
type: NestedObject
description: |
The Secret will be replicated to the regions specified by the user.
immutable: true
exactly_one_of:
- 'replication.0.user_managed'
- 'replication.0.auto'
properties:
- name: 'replicas'
type: Array
description: |
The list of Replicas for this Secret. Cannot be empty.
required: true
immutable: true
item_type:
type: NestedObject
properties:
- name: 'location'
type: String
description: |
The canonical IDs of the location to replicate data. For example: "us-east1".
required: true
immutable: true
- name: 'customerManagedEncryption'
type: NestedObject
description: |
Customer Managed Encryption for the secret.
properties:
- name: 'kmsKeyName'
type: String
description: |
Describes the Cloud KMS encryption key that will be used to protect destination secret.
required: true
min_size: 1
- name: 'topics'
type: Array
description: |
A list of up to 10 Pub/Sub topics to which messages are published when control plane operations are called on the secret or its versions.
item_type:
type: NestedObject
properties:
- name: 'name'
type: String
description: |
The resource name of the Pub/Sub topic that will be published to, in the following format: projects/*/topics/*.
For publication to succeed, the Secret Manager Service Agent service account must have pubsub.publisher permissions on the topic.
required: true
- name: 'expireTime'
type: String
description: |
Timestamp in UTC when the Secret is scheduled to expire. This is always provided on output, regardless of what was sent on input.
A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z".
Only one of `expire_time` or `ttl` can be provided.
default_from_api: true
- name: 'ttl'
type: String
description: |
The TTL for the Secret.
A duration in seconds with up to nine fractional digits, terminated by 's'. Example: "3.5s".
Only one of `ttl` or `expire_time` can be provided.
ignore_read: true
- name: 'rotation'
type: NestedObject
description: |
The rotation time and period for a Secret. At `next_rotation_time`, Secret Manager will send a Pub/Sub notification to the topics configured on the Secret. `topics` must be set to configure rotation.
required_with:
- 'topics'
properties:
- name: 'nextRotationTime'
type: String
description: |
Timestamp in UTC at which the Secret is scheduled to rotate.
A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z".
required_with:
- 'rotation.0.rotation_period'
- name: 'rotationPeriod'
type: String
description: |
The Duration between rotation notifications. Must be in seconds and at least 3600s (1h) and at most 3153600000s (100 years).
If rotationPeriod is set, `next_rotation_time` must be set. `next_rotation_time` will be advanced by this period when the service automatically sends rotation notifications.