integration_test/third_party_apps_test/applications/vault/metadata.yaml (356 lines of code) (raw):

# Copyright 2022 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. app_url: "https://www.vaultproject.io/" short_name: Vault long_name: Hashicorp Vault logo_path: /stackdriver/images/integrations/vault.png # supplied by google technical writer description: |- Vault is an identity-based secrets and encryption management system. This integration collects Vault's audit logs. The integration also collects token, memory, and storage metrics. configure_integration: |- To collect telemetry from your Vault instance, you must set the `prometheus_retention_time` field to a non-zero value in your HCL or JSON Vault configuration file. <pre> Full configuration options can be found at https://www.vaultproject.io/docs/configuration telemetry { prometheus_retention_time = "10m" disable_hostname = false } </pre> Additionally, a root user is required to enable audit-log collection and to create a prometheus-metrics ACL policy. A root token is used to add a policy that has read capabilities to the `/sys/metrics` endpoint. This policy is used to create a Vault token with sufficient permission to collect Vault metrics. If you are initializing Vault for the first time, then you can use the following script to generate a root token. Otherwise, see [Generate Root Tokens Using Unseal Keys](https://developer.hashicorp.com/vault/tutorials/operations/generate-root) for information about generating a root token. ```bash export VAULT_ADDR=http://localhost:8200 # Create simple Vault initialization with 1 key share and a key threshold of 1. vault operator init -key-shares=1 -key-threshold=1 | head -n3 | cat > .vault-init VAULT_KEY=$(grep 'Unseal Key 1' .vault-init | awk '{print $NF}') VAULT_TOKEN=$(grep 'Initial Root Token:' .vault-init | awk '{print $NF}') export VAULT_TOKEN vault operator unseal $VAULT_KEY # Enable audit logs. vault audit enable file file_path=/var/log/vault_audit.log # Create Prometheus ACL policy to access metrics endpoint. vault policy write prometheus-metrics - << EOF path "/sys/metrics" { capabilities = ["read"] } EOF # Create an example token with the prometheus-metrics policy to access Vault metrics. # This token is used as `$VAULT_TOKEN` in your Ops Agent configuration for Vault. vault token create -field=token -policy prometheus-metrics > prometheus-token ``` supported_operating_systems: linux platforms_to_skip: # Vault is not supported on various distros. - ubuntu-os-cloud:ubuntu-2410-amd64 # Possible support in the future - ubuntu-os-cloud:ubuntu-minimal-2410-amd64 # Possible support in the future - ubuntu-os-cloud:ubuntu-2410-arm64 # Possible support in the future - ubuntu-os-cloud:ubuntu-minimal-2410-arm64 # Possible support in the future supported_app_version: ["1.6+"] expected_metrics: - type: workload.googleapis.com/vault.core.request.count kind: GAUGE monitored_resources: [gce_instance] value_type: INT64 labels: - name: cluster value_regex: .* - type: workload.googleapis.com/vault.core.leader.duration optional: true kind: GAUGE monitored_resources: [gce_instance] value_type: DOUBLE - type: workload.googleapis.com/vault.token.lease.count optional: true kind: GAUGE monitored_resources: [gce_instance] value_type: INT64 - type: workload.googleapis.com/vault.token.count optional: true kind: GAUGE monitored_resources: [gce_instance] value_type: INT64 labels: - name: namespace value_regex: .* - name: cluster value_regex: .* - type: workload.googleapis.com/vault.token.revoke.time optional: true kind: GAUGE monitored_resources: [gce_instance] value_type: INT64 - type: workload.googleapis.com/vault.token.renew.time optional: true kind: GAUGE monitored_resources: [gce_instance] value_type: INT64 - type: workload.googleapis.com/vault.audit.request.failed kind: CUMULATIVE monitored_resources: [gce_instance] value_type: INT64 - type: workload.googleapis.com/vault.audit.response.failed kind: CUMULATIVE monitored_resources: [gce_instance] value_type: INT64 - type: workload.googleapis.com/vault.memory.usage representative: true kind: GAUGE monitored_resources: [gce_instance] value_type: DOUBLE - type: workload.googleapis.com/vault.storage.operation.put.time optional: true kind: CUMULATIVE monitored_resources: [gce_instance] value_type: DOUBLE labels: - name: storage value_regex: .* - type: workload.googleapis.com/vault.storage.operation.delete.time optional: true kind: CUMULATIVE monitored_resources: [gce_instance] value_type: DOUBLE labels: - name: storage value_regex: .* - type: workload.googleapis.com/vault.storage.operation.list.time optional: true kind: CUMULATIVE monitored_resources: [gce_instance] value_type: DOUBLE labels: - name: storage value_regex: .* - type: workload.googleapis.com/vault.storage.operation.get.time optional: true kind: CUMULATIVE monitored_resources: [gce_instance] value_type: DOUBLE labels: - name: storage value_regex: .* - type: workload.googleapis.com/vault.storage.operation.put.count optional: true kind: CUMULATIVE monitored_resources: [gce_instance] value_type: INT64 labels: - name: storage value_regex: .* - type: workload.googleapis.com/vault.storage.operation.delete.count optional: true kind: CUMULATIVE monitored_resources: [gce_instance] value_type: INT64 labels: - name: storage value_regex: .* - type: workload.googleapis.com/vault.storage.operation.list.count optional: true kind: CUMULATIVE monitored_resources: [gce_instance] value_type: INT64 labels: - name: storage value_regex: .* - type: workload.googleapis.com/vault.storage.operation.get.count optional: true kind: CUMULATIVE monitored_resources: [gce_instance] value_type: INT64 labels: - name: storage value_regex: .* expected_logs: - log_name: vault_audit fields: - name: jsonPayload.auth type: struct description: '' optional: true - name: jsonPayload.request type: struct description: '' - name: jsonPayload.response type: struct description: '' optional: true - name: jsonPayload.auth.token_type value_regex: default type: string description: '' optional: true - name: jsonPayload.request.namespace.id value_regex: root type: string description: '' optional: true - name: jsonPayload.request.path value_regex: sys\/audit\/test type: string description: The requested Vault path for operation. optional: true - name: jsonPayload.request.operation value_regex: update type: string description: "This is the type of operation which corresponds to path capabilities and is expected to be one of: `create`, `read`, `update`, `delete`, or `list`." optional: true - name: jsonPayload.type value_regex: request type: string description: The type of audit log. optional: true - name: jsonPayload.error type: string description: If an error occurred with the request, the error message is included in this field's value. optional: true - name: jsonPayload.auth.client_token type: string description: This is an HMAC of the client's token ID. optional: true - name: jsonPayload.auth.accessor type: string description: This is an HMAC of the client token accessor. optional: true - name: jsonPayload.auth.display_name type: string description: This is the display name set by the auth method role or explicitly at secret creation time. optional: true - name: jsonPayload.auth.policies type: object description: This will contain a list of policies associated with the client_token. optional: true - name: jsonPayload.auth.metadata type: object description: This will contain a list of metadata key/value pairs associated with the client_token. optional: true - name: jsonPayload.auth.entity_id type: string description: This is a token entity identifier. optional: true - name: jsonPayload.request.id type: string description: This is the unique request identifier. optional: true - name: jsonPayload.request.client_token type: string description: This is an HMAC of the client's token ID. optional: true - name: jsonPayload.request.client_token_accessor type: string description: This is an HMAC of the client token accessor. optional: true - name: jsonPayload.request.data type: object description: The data object will contain secret data in key/value pairs. optional: true - name: jsonPayload.request.policy_override type: boolean description: This is `true` when a soft-mandatory policy override was requested. optional: true - name: jsonPayload.request.remote_address type: string description: The IP address of the client making the request. optional: true - name: jsonPayload.request.wrap_ttl type: string description: If the token is wrapped, this displays configured wrapped TTL value as numeric string. optional: true - name: jsonPayload.request.headers type: object description: Additional HTTP headers specified by the client as part of the request. optional: true - name: jsonPayload.response.data.creation_time type: string description: RFC 3339 format timestamp of the token's creation. optional: true - name: jsonPayload.response.data.creation_ttl type: string description: Token creation TTL in seconds. optional: true - name: jsonPayload.response.data.expire_time type: string description: RFC 3339 format timestamp representing the moment this token will expire. optional: true - name: jsonPayload.response.data.explicit_max_ttl type: string description: Explicit token maximum TTL value as seconds ("0" when not set). optional: true - name: jsonPayload.response.data.issue_time type: string description: RFC 3339 format timestamp. optional: true - name: jsonPayload.response.data.num_uses type: number description: If the token is limited to a number of uses, that value will be represented here. optional: true - name: jsonPayload.response.data.orphan type: boolean description: Boolean value representing whether the token is an orphan. optional: true - name: jsonPayload.response.data.renewable type: boolean description: Boolean value representing whether the token is an orphan. optional: true - name: jsonPayload.response.data.id type: string description: This is the unique response identifier. optional: true - name: jsonPayload.response.data.path type: string description: The requested Vault path for operation. optional: true - name: jsonPayload.response.data.policies type: object description: This will contain a list of policies associated with the client_token. optional: true - name: jsonPayload.response.data.accessor type: string description: This is an HMAC of the client token accessor. optional: true - name: jsonPayload.response.data.display_name type: string description: This is the display name set by the auth method role or explicitly at secret creation time. optional: true - name: jsonPayload.response.data.entity_id type: string description: This is a token entity identifier. optional: true - name: severity type: string description: '' configuration_options: logs: - type: vault_audit fields: - name: type default: null description: The value must be `vault_audit`. - name: include_paths default: null description: A list of filesystem paths to read by tailing each file. A wild card (`*`) can be used in the paths. - name: exclude_paths default: null description: A list of filesystem path patterns to exclude from the set matched by `include_paths`. - name: record_log_file_path default: false description: If set to `true`, then the path to the specific file from which the log record was obtained appears in the output log entry as the value of the `agent.googleapis.com/log_file_path` label. When using a wildcard, only the path of the file from which the record was obtained is recorded. - name: wildcard_refresh_interval default: 60s description: The interval at which wildcard file paths in `include_paths` are refreshed. Given as a [time duration](https://pkg.go.dev/time#ParseDuration), for example `30s` or `2m`. This property might be useful under high logging throughputs where log files are rotated faster than the default interval. metrics: - type: vault fields: - name: type default: null description: This value must be `vault`. - name: endpoint default: localhost:8200 description: The 'hostname:port' used by Vault. - name: token default: localhost:8200 description: Token used for authentication. - name: metrics_path default: /v1/sys/metrics description: The path for metrics collection. - name: collection_interval default: 60s description: A [time duration](https://pkg.go.dev/time#ParseDuration) value, such as `30s` or `5m`. - name: insecure default: true description: Sets whether or not to use a secure TLS connection. If set to `false`, then TLS is enabled. - name: insecure_skip_verify default: false description: Sets whether or not to skip verifying the certificate. If `insecure` is set to `true`, then the `insecure_skip_verify` value is not used. - name: cert_file default: null description: Path to the TLS certificate to use for mTLS-required connections. - name: key_file default: null description: Path to the TLS key to use for mTLS-required connections. - name: ca_file default: null description: Path to the CA certificate. As a client, this verifies the server certificate. If empty, the receiver uses the system root CA. minimum_supported_agent_version: logging: 2.18.1 metrics: 2.18.2 public_url: https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/third-party/vault