This allows arbitrary programs to have an easy mechanism to make connections through Boundary using Go. Internal cluster tests and test helpers have been migrated to use this package, as well as the `connect` command. --------- Co-authored-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
411 lines
18 KiB
Protocol Buffer
411 lines
18 KiB
Protocol Buffer
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
syntax = "proto3";
|
|
|
|
package controller.api.resources.targets.v1;
|
|
|
|
import "controller/api/resources/scopes/v1/scope.proto";
|
|
import "controller/custom_options/v1/options.proto";
|
|
import "google/api/visibility.proto";
|
|
import "google/protobuf/struct.proto";
|
|
import "google/protobuf/timestamp.proto";
|
|
import "google/protobuf/wrappers.proto";
|
|
|
|
option go_package = "github.com/hashicorp/boundary/sdk/pbs/controller/api/resources/targets;targets";
|
|
|
|
message HostSource {
|
|
// Output only. The ID of the Host Set.
|
|
string id = 10; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The Host Catalog to which this Host Source belongs.
|
|
string host_catalog_id = 20 [json_name = "host_catalog_id"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
}
|
|
|
|
message CredentialSource {
|
|
// The ID of the Credential. May be empty if the credential is dynamically generated from a library.
|
|
string id = 10; // @gotags: `class:"public"`
|
|
|
|
// Output only. The name of the Credential source.
|
|
string name = 20; // @gotags: `class:"public"`
|
|
|
|
// Output only. The description of the Credential source.
|
|
string description = 30; // @gotags: `class:"public"`
|
|
|
|
// Output only. The Credential Store to which this Credential source belongs.
|
|
string credential_store_id = 40 [json_name = "credential_store_id"]; // @gotags: `class:"public"`
|
|
|
|
// Output only. The type of the credential source (e.g. "vault"; not the type of the credential itself).
|
|
string type = 60; // @gotags: `class:"public"`
|
|
|
|
// Output only. The type of the credential, empty if unspecified.
|
|
string credential_type = 70; // @gotags: `class:"public"`
|
|
}
|
|
|
|
// The actual secret for a session credential.
|
|
message SessionSecret {
|
|
// Output only. The base64-encoded value representing the raw bytes from the
|
|
// credential provider.
|
|
string raw = 10; // @gotags: `class:"secret"`
|
|
|
|
// Output only. The decoded raw string, if a JSON object.
|
|
google.protobuf.Struct decoded = 20;
|
|
}
|
|
|
|
// Credential information for a session.
|
|
message SessionCredential {
|
|
// Output only. The credential source information.
|
|
CredentialSource credential_source = 1;
|
|
|
|
// Output only. The secret of this credential base64 encoded.
|
|
SessionSecret secret = 20;
|
|
|
|
// Output only. The fields of the strongly typed credential, empty if the credential type of the
|
|
// credential source is unspecified.
|
|
google.protobuf.Struct credential = 40;
|
|
|
|
// Deprecated fields
|
|
reserved "credential_library";
|
|
reserved 10;
|
|
}
|
|
|
|
// Target contains all fields related to a Target resource
|
|
message Target {
|
|
// Output only. The ID of the resource.
|
|
string id = 10; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// The Scope of of this resource. This must be defined for creation of this resource, but is otherwise output only.
|
|
string scope_id = 20 [json_name = "scope_id"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. Scope information for this resource.
|
|
resources.scopes.v1.ScopeInfo scope = 30;
|
|
|
|
// Required name for identification purposes.
|
|
google.protobuf.StringValue name = 40 [
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "name"
|
|
that: "name"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// Optional user-set description for identification purposes.
|
|
google.protobuf.StringValue description = 50 [
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "description"
|
|
that: "description"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// Output only. The time this resource was created.
|
|
google.protobuf.Timestamp created_time = 60 [json_name = "created_time"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The time this resource was last updated.
|
|
google.protobuf.Timestamp updated_time = 70 [json_name = "updated_time"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Version is used in mutation requests, after the initial creation, to ensure this resource has not changed.
|
|
// The mutation will fail if the version does not match the latest known good version.
|
|
uint32 version = 80; // @gotags: `class:"public"`
|
|
|
|
// The type of the Target.
|
|
string type = 90; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The IDs of the Host Sources associated with this Target.
|
|
repeated string host_source_ids = 420 [json_name = "host_source_ids"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The Host Sources associated with this Target.
|
|
repeated HostSource host_sources = 430 [json_name = "host_sources"];
|
|
|
|
// Maximum total lifetime of a created Session, in seconds.
|
|
google.protobuf.UInt32Value session_max_seconds = 120 [
|
|
json_name = "session_max_seconds",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "session_max_seconds"
|
|
that: "SessionMaxSeconds"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// Maximum number of connections allowed in a Session. Unlimited is indicated by the value -1.
|
|
google.protobuf.Int32Value session_connection_limit = 130 [
|
|
json_name = "session_connection_limit",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "session_connection_limit"
|
|
that: "SessionConnectionLimit"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// Optional boolean expression to filter the workers that are allowed to satisfy this request.
|
|
// Deprecated; use egress or ingress worker filters instead.
|
|
google.protobuf.StringValue worker_filter = 140 [
|
|
json_name = "worker_filter",
|
|
deprecated = true,
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "worker_filter"
|
|
that: "WorkerFilter"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// Optional boolean expressions to filter the egress workers that are allowed to satisfy this request.
|
|
google.protobuf.StringValue egress_worker_filter = 160 [
|
|
json_name = "egress_worker_filter",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "egress_worker_filter"
|
|
that: "EgressWorkerFilter"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// Optional boolean expressions to filter the ingress workers that are allowed to satisfy this request.
|
|
// Unsupported on OSS.
|
|
google.protobuf.StringValue ingress_worker_filter = 170 [
|
|
json_name = "ingress_worker_filter",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "ingress_worker_filter"
|
|
that: "IngressWorkerFilter"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// Output only. The IDs of the brokered credential source ids associated with this Target.
|
|
repeated string brokered_credential_source_ids = 440 [json_name = "brokered_credential_source_ids"]; // @gotags: `class:"public"`
|
|
// Output only. The brokered credential sources associated with this Target.
|
|
repeated CredentialSource brokered_credential_sources = 450 [json_name = "brokered_credential_sources"];
|
|
|
|
// Output only. The IDs of the injected application credential source ids associated with this Target.
|
|
repeated string injected_application_credential_source_ids = 520 [json_name = "injected_application_credential_source_ids"]; // @gotags: `class:"public"`
|
|
// Output only. The injected application credential sources associated with this Target.
|
|
repeated CredentialSource injected_application_credential_sources = 530 [json_name = "injected_application_credential_sources"];
|
|
|
|
oneof attrs {
|
|
// The attributes that are applicable for the specific Target.
|
|
google.protobuf.Struct attributes = 200 [
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.subtype) = "default"
|
|
];
|
|
TcpTargetAttributes tcp_target_attributes = 201 [
|
|
(google.api.field_visibility).restriction = "INTERNAL",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.subtype) = "tcp"
|
|
];
|
|
SshTargetAttributes ssh_target_attributes = 202 [
|
|
(google.api.field_visibility).restriction = "INTERNAL",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.subtype) = "ssh"
|
|
];
|
|
}
|
|
|
|
// Output only. The available actions on this resource for this user.
|
|
repeated string authorized_actions = 300 [json_name = "authorized_actions"]; // @gotags: `class:"public"`
|
|
|
|
// Optional string value that represents a network resource and is used when establishing a session.
|
|
google.protobuf.StringValue address = 540 [
|
|
json_name = "address",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "address"
|
|
that: "address"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// Deprecated fields
|
|
reserved "application_credential_library_ids", "application_credential_libraries";
|
|
reserved 150, 180;
|
|
reserved "egress_credential_source_ids", "egress_credential_sources";
|
|
reserved 500, 510;
|
|
reserved "host_set_ids", "host_sets";
|
|
reserved 100, 110;
|
|
reserved "application_credential_source_ids", "application_credential_sources";
|
|
reserved 400, 410;
|
|
}
|
|
|
|
// TcpTargetAttributes contains attributes relevant to Targets of type "tcp"
|
|
message TcpTargetAttributes {
|
|
// The default TCP port that will be used when connecting to the endpoint unless overridden by a Host Set or Host.
|
|
google.protobuf.UInt32Value default_port = 10 [
|
|
json_name = "default_port",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "attributes.default_port"
|
|
that: "DefaultPort"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// The default TCP port that will be listened on by the client's local proxy.
|
|
google.protobuf.UInt32Value default_client_port = 20 [
|
|
json_name = "default_client_port",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "attributes.default_client_port"
|
|
that: "DefaultClientPort"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
}
|
|
|
|
// SshTargetAttributes contains attributes relevant to Targets of type "ssh"
|
|
message SshTargetAttributes {
|
|
// The default SSH port that will be used when connecting to the endpoint unless overridden by a Host Set or Host.
|
|
// If this is not specified the DefaultPort will be 22.
|
|
google.protobuf.UInt32Value default_port = 10 [
|
|
json_name = "default_port",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "attributes.default_port"
|
|
that: "DefaultPort"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// The default TCP port that will be listened on by the client's local proxy.
|
|
google.protobuf.UInt32Value default_client_port = 20 [
|
|
json_name = "default_client_port",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "attributes.default_client_port"
|
|
that: "DefaultClientPort"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// PublicId of the storage bucket associated with the target
|
|
google.protobuf.StringValue storage_bucket_id = 30 [
|
|
json_name = "storage_bucket_id",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "attributes.storage_bucket_id"
|
|
that: "StorageBucketId"
|
|
}
|
|
]; // @gotags: `class:"public"`
|
|
|
|
// A boolean indicating if session recording has been enabled
|
|
google.protobuf.BoolValue enable_session_recording = 40 [
|
|
json_name = "enable_session_recording",
|
|
(custom_options.v1.generate_sdk_option) = true,
|
|
(custom_options.v1.mask_mapping) = {
|
|
this: "attributes.enable_session_recording"
|
|
that: "EnableSessionRecording"
|
|
}
|
|
]; // @gotags: `class:"public" eventstream:"observation"`
|
|
}
|
|
|
|
// WorkerInfo contains information about workers, returned in to the client in SessionAuthorization
|
|
message WorkerInfo {
|
|
// Output only. The address of the worker.
|
|
string address = 10; // @gotags: `class:"public"`
|
|
}
|
|
|
|
// SessionAuthorizationData contains the fields needed by the proxy command to
|
|
// connect to a worker. It is marshaled inside the SessionAuthorization message.
|
|
message SessionAuthorizationData {
|
|
// Output only. The ID of the session.
|
|
string session_id = 10 [json_name = "session_id"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The ID of the Target authorizing this session.
|
|
string target_id = 20 [json_name = "target_id"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. Scope information for this the Target that authorized this session.
|
|
resources.scopes.v1.ScopeInfo scope = 30;
|
|
|
|
// Output only. The time this resource was created.
|
|
google.protobuf.Timestamp created_time = 40 [json_name = "created_time"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. Type of the session (e.g. tcp, ssh, etc.).
|
|
string type = 80; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The connection limit being applied to this session. -1 means unlimited. This is not actually enforced on the client side but it provides for better listener handling by including it.
|
|
int32 connection_limit = 90 [json_name = "connection_limit"];
|
|
|
|
// Output only. The endpoint port that will be connected to, either from a
|
|
// port directly on the target or from a service definition.
|
|
uint32 endpoint_port = 102 [json_name = "endpoint_port"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The expiration time of the session.
|
|
google.protobuf.Timestamp expiration = 105; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The certificate to use when connecting. Raw DER bytes.
|
|
bytes certificate = 120; // @gotags: `class:"sensitive"`
|
|
|
|
// Output only. The private key to use when connecting. We are using Ed25519, so this is purely raw bytes, no marshaling.
|
|
bytes private_key = 130 [json_name = "private_key"]; // @gotags: `class:"secret"`
|
|
|
|
// Output only. The host ID...not used for security purposes, but for some special command handling (e.g. ssh host key aliasing).
|
|
string host_id = 140; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The endpoint, for some special command handling.
|
|
string endpoint = 141; // @gotags: `class:"public"`
|
|
|
|
// Output only. Worker information. The first worker in the array should be prioritized.
|
|
repeated WorkerInfo worker_info = 150 [json_name = "worker_info"];
|
|
|
|
// Output only. A default port to listen on for client connections.
|
|
uint32 default_client_port = 160 [json_name = "default_client_port"]; // @gotags: `class:"public"`
|
|
}
|
|
|
|
// SessionAuthorization contains all fields related to authorization for a Session. It's in the Targets package because it's returned by a Target's authorize action.
|
|
message SessionAuthorization {
|
|
// Output only. The ID of the Session.
|
|
string session_id = 10 [json_name = "session_id"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The ID of the Target authorizing this Session.
|
|
string target_id = 20 [json_name = "target_id"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. Scope information for this resource.
|
|
resources.scopes.v1.ScopeInfo scope = 30;
|
|
|
|
// Output only. The time this resource was created.
|
|
google.protobuf.Timestamp created_time = 40 [json_name = "created_time"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The User for which this Session was authorized.
|
|
string user_id = 50 [json_name = "user_id"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The Host Set containing the Host being used for this Session.
|
|
string host_set_id = 60 [json_name = "host_set_id"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The Host whose address is being used as the endpoint for this Session.
|
|
string host_id = 70 [json_name = "host_id"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. Type of the Session (e.g. tcp, ssh, etc.).
|
|
string type = 80; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The marshaled SessionAuthorizationData message containing all information that the proxy needs.
|
|
string authorization_token = 90 [json_name = "authorization_token"]; // @gotags: `class:"secret"`
|
|
|
|
// Output only. The connection limit being applied to this session. -1 means unlimited. This is not actually enforced on the client side but it provides for better listener handling by including it.
|
|
int32 connection_limit = 95 [json_name = "connection_limit"];
|
|
|
|
// Output only. The endpoint address that the worker will connect to, useful for setting TLS parameters.
|
|
string endpoint = 100; // @gotags: `class:"public"`
|
|
|
|
// Output only. The endpoint port that will be connected to, either from a
|
|
// port directly on the target or from a service definition.
|
|
uint32 endpoint_port = 102 [json_name = "endpoint_port"]; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The expiration time of the session.
|
|
google.protobuf.Timestamp expiration = 105; // @gotags: `class:"public" eventstream:"observation"`
|
|
|
|
// Output only. The credentials for this session.
|
|
repeated SessionCredential credentials = 110 [json_name = "credentials"];
|
|
}
|
|
|
|
// The layout of the struct for "credential" field in SessionCredential for a username_password credential type.
|
|
message UsernamePasswordCredential {
|
|
// Username of the credential
|
|
string username = 1; // @gotags: `class:"sensitive"`
|
|
|
|
// Password of the credential
|
|
string password = 2; // @gotags: `class:"secret"`
|
|
}
|
|
|
|
// The layout of the struct for "credential" field in SessionCredential for a ssh_private_key credential type.
|
|
message SshPrivateKeyCredential {
|
|
// Username of the credential
|
|
string username = 1; // @gotags: `class:"sensitive"`
|
|
|
|
// Private key of the credential
|
|
string private_key = 2; // @gotags: `class:"secret"`
|
|
|
|
// The optional passphrase of the private_key
|
|
string private_key_passphrase = 3; // @gotags: `class:"secret"`
|
|
}
|