mirror of
https://github.com/gravitational/teleport.git
synced 2026-11-02 14:59:53 +08:00
* Bump the go group with 72 updates Bumps the go group with 72 updates: | Package | From | To | | --- | --- | --- | | [cloud.google.com/go/cloudsqlconn](https://github.com/googlecloudplatform/cloud-sql-go-connector) | `1.17.0` | `1.17.1` | | [cloud.google.com/go/compute](https://github.com/googleapis/google-cloud-go) | `1.37.0` | `1.38.0` | | [cloud.google.com/go/compute/metadata](https://github.com/googleapis/google-cloud-go) | `0.6.0` | `0.7.0` | | [cloud.google.com/go/container](https://github.com/googleapis/google-cloud-go) | `1.42.4` | `1.43.0` | | [cloud.google.com/go/kms](https://github.com/googleapis/google-cloud-go) | `1.21.2` | `1.22.0` | | [cloud.google.com/go/spanner](https://github.com/googleapis/google-cloud-go) | `1.80.0` | `1.82.0` | | [cloud.google.com/go/storage](https://github.com/googleapis/google-cloud-go) | `1.52.0` | `1.53.0` | | [github.com/Azure/azure-sdk-for-go/sdk/azidentity](https://github.com/Azure/azure-sdk-for-go) | `1.9.0` | `1.10.0` | | [github.com/ClickHouse/ch-go](https://github.com/ClickHouse/ch-go) | `0.65.1` | `0.66.0` | | [github.com/ClickHouse/clickhouse-go/v2](https://github.com/ClickHouse/clickhouse-go) | `2.34.0` | `2.35.0` | | [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) | `1.17.74` | `1.17.77` | | [github.com/aws/aws-sdk-go-v2/service/applicationautoscaling](https://github.com/aws/aws-sdk-go-v2) | `1.36.0` | `1.36.1` | | [github.com/aws/aws-sdk-go-v2/service/athena](https://github.com/aws/aws-sdk-go-v2) | `1.50.4` | `1.50.5` | | [github.com/aws/aws-sdk-go-v2/service/ec2](https://github.com/aws/aws-sdk-go-v2) | `1.213.0` | `1.224.0` | | [github.com/aws/aws-sdk-go-v2/service/ecs](https://github.com/aws/aws-sdk-go-v2) | `1.56.2` | `1.57.1` | | [github.com/aws/aws-sdk-go-v2/service/glue](https://github.com/aws/aws-sdk-go-v2) | `1.109.2` | `1.113.0` | | [github.com/aws/aws-sdk-go-v2/service/iam](https://github.com/aws/aws-sdk-go-v2) | `1.41.1` | `1.42.0` | | [github.com/aws/aws-sdk-go-v2/service/identitystore](https://github.com/aws/aws-sdk-go-v2) | `1.28.2` | `1.28.3` | | [github.com/aws/aws-sdk-go-v2/service/rds](https://github.com/aws/aws-sdk-go-v2) | `1.95.0` | `1.96.0` | | [github.com/aws/aws-sdk-go-v2/service/redshiftserverless](https://github.com/aws/aws-sdk-go-v2) | `1.27.1` | `1.27.2` | | [github.com/aws/aws-sdk-go-v2/service/s3](https://github.com/aws/aws-sdk-go-v2) | `1.79.3` | `1.80.0` | | [github.com/aws/aws-sdk-go-v2/service/ssoadmin](https://github.com/aws/aws-sdk-go-v2) | `1.30.2` | `1.31.0` | | [github.com/docker/docker](https://github.com/docker/docker) | `28.1.1+incompatible` | `28.2.2+incompatible` | | [github.com/go-jose/go-jose/v4](https://github.com/go-jose/go-jose) | `4.0.5` | `4.1.0` | | [github.com/go-logr/logr](https://github.com/go-logr/logr) | `1.4.2` | `1.4.3` | | [github.com/go-webauthn/webauthn](https://github.com/go-webauthn/webauthn) | `0.11.2` | `0.13.0` | | [github.com/google/go-containerregistry](https://github.com/google/go-containerregistry) | `0.20.3` | `0.20.5` | | [github.com/google/go-tpm](https://github.com/google/go-tpm) | `0.9.4` | `0.9.5` | | [github.com/googleapis/gax-go/v2](https://github.com/googleapis/gax-go) | `2.14.1` | `2.14.2` | | [github.com/grpc-ecosystem/go-grpc-middleware/v2](https://github.com/grpc-ecosystem/go-grpc-middleware) | `2.3.1` | `2.3.2` | | [github.com/jackc/pgx/v5](https://github.com/jackc/pgx) | `5.7.4` | `5.7.5` | | [github.com/mark3labs/mcp-go](https://github.com/mark3labs/mcp-go) | `0.30.1` | `0.31.0` | | [github.com/oracle/oci-go-sdk/v65](https://github.com/oracle/oci-go-sdk) | `65.89.3` | `65.92.0` | | [github.com/pquerna/otp](https://github.com/pquerna/otp) | `1.4.0` | `1.5.0` | | [github.com/prometheus/common](https://github.com/prometheus/common) | `0.63.0` | `0.64.0` | | [github.com/quic-go/quic-go](https://github.com/quic-go/quic-go) | `0.51.0` | `0.52.0` | | [github.com/shirou/gopsutil/v4](https://github.com/shirou/gopsutil) | `4.25.4` | `4.25.5` | | [github.com/sigstore/protobuf-specs](https://github.com/sigstore/protobuf-specs) | `0.4.1` | `0.4.2` | | [github.com/snowflakedb/gosnowflake](https://github.com/snowflakedb/gosnowflake) | `1.14.0` | `1.14.1` | | [github.com/tidwall/pretty](https://github.com/tidwall/pretty) | `1.2.0` | `1.2.1` | | [gitlab.com/gitlab-org/api/client-go](https://gitlab.com/gitlab-org/api/client-go) | `0.127.0` | `0.129.0` | | [go.etcd.io/etcd/api/v3](https://github.com/etcd-io/etcd) | `3.5.21` | `3.6.0` | | [go.etcd.io/etcd/client/v3](https://github.com/etcd-io/etcd) | `3.5.21` | `3.6.0` | | [go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc](https://github.com/open-telemetry/opentelemetry-go-contrib) | `0.60.0` | `0.61.0` | | [go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp](https://github.com/open-telemetry/opentelemetry-go-contrib) | `0.60.0` | `0.61.0` | | [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go) | `1.35.0` | `1.36.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace](https://github.com/open-telemetry/opentelemetry-go) | `1.35.0` | `1.36.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://github.com/open-telemetry/opentelemetry-go) | `1.35.0` | `1.36.0` | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp](https://github.com/open-telemetry/opentelemetry-go) | `1.35.0` | `1.36.0` | | [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go) | `1.35.0` | `1.36.0` | | [go.opentelemetry.io/otel/trace](https://github.com/open-telemetry/opentelemetry-go) | `1.35.0` | `1.36.0` | | [go.opentelemetry.io/proto/otlp](https://github.com/open-telemetry/opentelemetry-proto-go) | `1.6.0` | `1.7.0` | | [golang.org/x/crypto](https://github.com/golang/crypto) | `0.37.0` | `0.38.0` | | [golang.org/x/net](https://github.com/golang/net) | `0.39.0` | `0.40.0` | | [golang.org/x/oauth2](https://github.com/golang/oauth2) | `0.29.0` | `0.30.0` | | [golang.org/x/sync](https://github.com/golang/sync) | `0.13.0` | `0.14.0` | | [golang.org/x/sys](https://github.com/golang/sys) | `0.32.0` | `0.33.0` | | [golang.org/x/term](https://github.com/golang/term) | `0.31.0` | `0.32.0` | | [golang.org/x/text](https://github.com/golang/text) | `0.24.0` | `0.25.0` | | [google.golang.org/api](https://github.com/googleapis/google-api-go-client) | `0.230.0` | `0.233.0` | | [google.golang.org/genproto/googleapis/rpc](https://github.com/googleapis/go-genproto) | `0.0.0-20250428153025-10db94c68c34` | `0.0.0-20250528174236-200df99c418a` | | [google.golang.org/grpc](https://github.com/grpc/grpc-go) | `1.72.1` | `1.72.2` | | [helm.sh/helm/v3](https://github.com/helm/helm) | `3.17.3` | `3.18.1` | | [k8s.io/api](https://github.com/kubernetes/api) | `0.33.0` | `0.33.1` | | [k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver) | `0.33.0` | `0.33.1` | | [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) | `0.33.0` | `0.33.1` | | [k8s.io/apiserver](https://github.com/kubernetes/apiserver) | `0.33.0` | `0.33.1` | | [k8s.io/cli-runtime](https://github.com/kubernetes/cli-runtime) | `0.33.0` | `0.33.1` | | [k8s.io/client-go](https://github.com/kubernetes/client-go) | `0.33.0` | `0.33.1` | | [k8s.io/component-base](https://github.com/kubernetes/component-base) | `0.33.0` | `0.33.1` | | [k8s.io/kubectl](https://github.com/kubernetes/kubectl) | `0.33.0` | `0.33.1` | | [sigs.k8s.io/controller-runtime](https://github.com/kubernetes-sigs/controller-runtime) | `0.20.4` | `0.21.0` | Updates `cloud.google.com/go/cloudsqlconn` from 1.17.0 to 1.17.1 - [Release notes](https://github.com/googlecloudplatform/cloud-sql-go-connector/releases) - [Changelog](https://github.com/GoogleCloudPlatform/cloud-sql-go-connector/blob/main/CHANGELOG.md) - [Commits](https://github.com/googlecloudplatform/cloud-sql-go-connector/compare/v1.17.0...v1.17.1) Updates `cloud.google.com/go/compute` from 1.37.0 to 1.38.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/documentai/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.37.0...pubsub/v1.38.0) Updates `cloud.google.com/go/compute/metadata` from 0.6.0 to 0.7.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/v0.6.0...v0.7.0) Updates `cloud.google.com/go/container` from 1.42.4 to 1.43.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/container/v1.42.4...pubsub/v1.43.0) Updates `cloud.google.com/go/kms` from 1.21.2 to 1.22.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/documentai/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/kms/v1.21.2...kms/v1.22.0) Updates `cloud.google.com/go/spanner` from 1.80.0 to 1.82.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/spanner/v1.80.0...spanner/v1.82.0) Updates `cloud.google.com/go/storage` from 1.52.0 to 1.53.0 - [Release notes](https://github.com/googleapis/google-cloud-go/releases) - [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-cloud-go/compare/spanner/v1.52.0...spanner/v1.53.0) Updates `github.com/Azure/azure-sdk-for-go/sdk/azidentity` from 1.9.0 to 1.10.0 - [Release notes](https://github.com/Azure/azure-sdk-for-go/releases) - [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/go-mgmt-sdk-release-guideline.md) - [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/azcore/v1.9.0...sdk/azcore/v1.10.0) Updates `github.com/ClickHouse/ch-go` from 0.65.1 to 0.66.0 - [Release notes](https://github.com/ClickHouse/ch-go/releases) - [Commits](https://github.com/ClickHouse/ch-go/compare/v0.65.1...v0.66.0) Updates `github.com/ClickHouse/clickhouse-go/v2` from 2.34.0 to 2.35.0 - [Release notes](https://github.com/ClickHouse/clickhouse-go/releases) - [Changelog](https://github.com/ClickHouse/clickhouse-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/ClickHouse/clickhouse-go/compare/v2.34.0...v2.35.0) Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.74 to 1.17.77 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.74...feature/s3/manager/v1.17.77) Updates `github.com/aws/aws-sdk-go-v2/service/applicationautoscaling` from 1.36.0 to 1.36.1 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.36.0...v1.36.1) Updates `github.com/aws/aws-sdk-go-v2/service/athena` from 1.50.4 to 1.50.5 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/ssm/v1.50.4...service/ssm/v1.50.5) Updates `github.com/aws/aws-sdk-go-v2/service/ec2` from 1.213.0 to 1.224.0 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/ec2/v1.213.0...service/ec2/v1.224.0) Updates `github.com/aws/aws-sdk-go-v2/service/ecs` from 1.56.2 to 1.57.1 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/ecs/v1.56.2...service/s3/v1.57.1) Updates `github.com/aws/aws-sdk-go-v2/service/glue` from 1.109.2 to 1.113.0 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/glue/v1.109.2...service/ec2/v1.113.0) Updates `github.com/aws/aws-sdk-go-v2/service/iam` from 1.41.1 to 1.42.0 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/ivs/v1.41.1...service/s3/v1.42.0) Updates `github.com/aws/aws-sdk-go-v2/service/identitystore` from 1.28.2 to 1.28.3 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.28.2...config/v1.28.3) Updates `github.com/aws/aws-sdk-go-v2/service/rds` from 1.95.0 to 1.96.0 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/service/ec2/v1.96.0/CHANGELOG.md) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/ec2/v1.95.0...service/ec2/v1.96.0) Updates `github.com/aws/aws-sdk-go-v2/service/redshiftserverless` from 1.27.1 to 1.27.2 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.27.1...v1.27.2) Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.79.3 to 1.80.0 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.79.3...service/s3/v1.80.0) Updates `github.com/aws/aws-sdk-go-v2/service/ssoadmin` from 1.30.2 to 1.31.0 - [Release notes](https://github.com/aws/aws-sdk-go-v2/releases) - [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json) - [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.30.2...v1.31.0) Updates `github.com/docker/docker` from 28.1.1+incompatible to 28.2.2+incompatible - [Release notes](https://github.com/docker/docker/releases) - [Commits](https://github.com/docker/docker/compare/v28.1.1...v28.2.2) Updates `github.com/go-jose/go-jose/v4` from 4.0.5 to 4.1.0 - [Release notes](https://github.com/go-jose/go-jose/releases) - [Changelog](https://github.com/go-jose/go-jose/blob/main/CHANGELOG.md) - [Commits](https://github.com/go-jose/go-jose/compare/v4.0.5...v4.1.0) Updates `github.com/go-logr/logr` from 1.4.2 to 1.4.3 - [Release notes](https://github.com/go-logr/logr/releases) - [Changelog](https://github.com/go-logr/logr/blob/master/CHANGELOG.md) - [Commits](https://github.com/go-logr/logr/compare/v1.4.2...v1.4.3) Updates `github.com/go-webauthn/webauthn` from 0.11.2 to 0.13.0 - [Release notes](https://github.com/go-webauthn/webauthn/releases) - [Commits](https://github.com/go-webauthn/webauthn/compare/v0.11.2...v0.13.0) Updates `github.com/google/go-containerregistry` from 0.20.3 to 0.20.5 - [Release notes](https://github.com/google/go-containerregistry/releases) - [Changelog](https://github.com/google/go-containerregistry/blob/main/.goreleaser.yml) - [Commits](https://github.com/google/go-containerregistry/compare/v0.20.3...v0.20.5) Updates `github.com/google/go-tpm` from 0.9.4 to 0.9.5 - [Release notes](https://github.com/google/go-tpm/releases) - [Commits](https://github.com/google/go-tpm/compare/v0.9.4...v0.9.5) Updates `github.com/googleapis/gax-go/v2` from 2.14.1 to 2.14.2 - [Release notes](https://github.com/googleapis/gax-go/releases) - [Commits](https://github.com/googleapis/gax-go/compare/v2.14.1...v2.14.2) Updates `github.com/grpc-ecosystem/go-grpc-middleware/v2` from 2.3.1 to 2.3.2 - [Release notes](https://github.com/grpc-ecosystem/go-grpc-middleware/releases) - [Commits](https://github.com/grpc-ecosystem/go-grpc-middleware/compare/v2.3.1...v2.3.2) Updates `github.com/jackc/pgx/v5` from 5.7.4 to 5.7.5 - [Changelog](https://github.com/jackc/pgx/blob/master/CHANGELOG.md) - [Commits](https://github.com/jackc/pgx/compare/v5.7.4...v5.7.5) Updates `github.com/mark3labs/mcp-go` from 0.30.1 to 0.31.0 - [Release notes](https://github.com/mark3labs/mcp-go/releases) - [Commits](https://github.com/mark3labs/mcp-go/compare/v0.30.1...v0.31.0) Updates `github.com/oracle/oci-go-sdk/v65` from 65.89.3 to 65.92.0 - [Release notes](https://github.com/oracle/oci-go-sdk/releases) - [Changelog](https://github.com/oracle/oci-go-sdk/blob/master/CHANGELOG.md) - [Commits](https://github.com/oracle/oci-go-sdk/compare/v65.89.3...v65.92.0) Updates `github.com/pquerna/otp` from 1.4.0 to 1.5.0 - [Release notes](https://github.com/pquerna/otp/releases) - [Commits](https://github.com/pquerna/otp/compare/v1.4.0...v1.5.0) Updates `github.com/prometheus/common` from 0.63.0 to 0.64.0 - [Release notes](https://github.com/prometheus/common/releases) - [Changelog](https://github.com/prometheus/common/blob/main/RELEASE.md) - [Commits](https://github.com/prometheus/common/compare/v0.63.0...v0.64.0) Updates `github.com/quic-go/quic-go` from 0.51.0 to 0.52.0 - [Release notes](https://github.com/quic-go/quic-go/releases) - [Commits](https://github.com/quic-go/quic-go/compare/v0.51.0...v0.52.0) Updates `github.com/shirou/gopsutil/v4` from 4.25.4 to 4.25.5 - [Release notes](https://github.com/shirou/gopsutil/releases) - [Commits](https://github.com/shirou/gopsutil/compare/v4.25.4...v4.25.5) Updates `github.com/sigstore/protobuf-specs` from 0.4.1 to 0.4.2 - [Release notes](https://github.com/sigstore/protobuf-specs/releases) - [Changelog](https://github.com/sigstore/protobuf-specs/blob/main/CHANGELOG.md) - [Commits](https://github.com/sigstore/protobuf-specs/compare/v0.4.1...v0.4.2) Updates `github.com/snowflakedb/gosnowflake` from 1.14.0 to 1.14.1 - [Release notes](https://github.com/snowflakedb/gosnowflake/releases) - [Changelog](https://github.com/snowflakedb/gosnowflake/blob/master/release.go) - [Commits](https://github.com/snowflakedb/gosnowflake/compare/v1.14.0...v1.14.1) Updates `github.com/tidwall/pretty` from 1.2.0 to 1.2.1 - [Commits](https://github.com/tidwall/pretty/compare/v1.2.0...v1.2.1) Updates `gitlab.com/gitlab-org/api/client-go` from 0.127.0 to 0.129.0 - [Release notes](https://gitlab.com/gitlab-org/api/client-go/tags) - [Changelog](https://gitlab.com/gitlab-org/api/client-go/blob/main/.release.config.mjs) - [Commits](https://gitlab.com/gitlab-org/api/client-go/compare/v0.127.0...v0.129.0) Updates `go.etcd.io/etcd/api/v3` from 3.5.21 to 3.6.0 - [Release notes](https://github.com/etcd-io/etcd/releases) - [Commits](https://github.com/etcd-io/etcd/compare/v3.5.21...v3.6.0) Updates `go.etcd.io/etcd/client/v3` from 3.5.21 to 3.6.0 - [Release notes](https://github.com/etcd-io/etcd/releases) - [Commits](https://github.com/etcd-io/etcd/compare/v3.5.21...v3.6.0) Updates `go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc` from 0.60.0 to 0.61.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.60.0...zpages/v0.61.0) Updates `go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp` from 0.60.0 to 0.61.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.60.0...zpages/v0.61.0) Updates `go.opentelemetry.io/otel` from 1.35.0 to 1.36.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.35.0...v1.36.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace` from 1.35.0 to 1.36.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.35.0...v1.36.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc` from 1.35.0 to 1.36.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.35.0...v1.36.0) Updates `go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` from 1.35.0 to 1.36.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.35.0...v1.36.0) Updates `go.opentelemetry.io/otel/sdk` from 1.35.0 to 1.36.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.35.0...v1.36.0) Updates `go.opentelemetry.io/otel/trace` from 1.35.0 to 1.36.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-go/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-go/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-go/compare/v1.35.0...v1.36.0) Updates `go.opentelemetry.io/proto/otlp` from 1.6.0 to 1.7.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-proto-go/releases) - [Commits](https://github.com/open-telemetry/opentelemetry-proto-go/compare/v1.6.0...v1.7.0) Updates `golang.org/x/crypto` from 0.37.0 to 0.38.0 - [Commits](https://github.com/golang/crypto/compare/v0.37.0...v0.38.0) Updates `golang.org/x/net` from 0.39.0 to 0.40.0 - [Commits](https://github.com/golang/net/compare/v0.39.0...v0.40.0) Updates `golang.org/x/oauth2` from 0.29.0 to 0.30.0 - [Commits](https://github.com/golang/oauth2/compare/v0.29.0...v0.30.0) Updates `golang.org/x/sync` from 0.13.0 to 0.14.0 - [Commits](https://github.com/golang/sync/compare/v0.13.0...v0.14.0) Updates `golang.org/x/sys` from 0.32.0 to 0.33.0 - [Commits](https://github.com/golang/sys/compare/v0.32.0...v0.33.0) Updates `golang.org/x/term` from 0.31.0 to 0.32.0 - [Commits](https://github.com/golang/term/compare/v0.31.0...v0.32.0) Updates `golang.org/x/text` from 0.24.0 to 0.25.0 - [Release notes](https://github.com/golang/text/releases) - [Commits](https://github.com/golang/text/compare/v0.24.0...v0.25.0) Updates `google.golang.org/api` from 0.230.0 to 0.233.0 - [Release notes](https://github.com/googleapis/google-api-go-client/releases) - [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md) - [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.230.0...v0.233.0) Updates `google.golang.org/genproto/googleapis/rpc` from 0.0.0-20250428153025-10db94c68c34 to 0.0.0-20250528174236-200df99c418a - [Commits](https://github.com/googleapis/go-genproto/commits) Updates `google.golang.org/grpc` from 1.72.1 to 1.72.2 - [Release notes](https://github.com/grpc/grpc-go/releases) - [Commits](https://github.com/grpc/grpc-go/compare/v1.72.1...v1.72.2) Updates `helm.sh/helm/v3` from 3.17.3 to 3.18.1 - [Release notes](https://github.com/helm/helm/releases) - [Commits](https://github.com/helm/helm/compare/v3.17.3...v3.18.1) Updates `k8s.io/api` from 0.33.0 to 0.33.1 - [Commits](https://github.com/kubernetes/api/compare/v0.33.0...v0.33.1) Updates `k8s.io/apiextensions-apiserver` from 0.33.0 to 0.33.1 - [Release notes](https://github.com/kubernetes/apiextensions-apiserver/releases) - [Commits](https://github.com/kubernetes/apiextensions-apiserver/compare/v0.33.0...v0.33.1) Updates `k8s.io/apimachinery` from 0.33.0 to 0.33.1 - [Commits](https://github.com/kubernetes/apimachinery/compare/v0.33.0...v0.33.1) Updates `k8s.io/apiserver` from 0.33.0 to 0.33.1 - [Commits](https://github.com/kubernetes/apiserver/compare/v0.33.0...v0.33.1) Updates `k8s.io/cli-runtime` from 0.33.0 to 0.33.1 - [Commits](https://github.com/kubernetes/cli-runtime/compare/v0.33.0...v0.33.1) Updates `k8s.io/client-go` from 0.33.0 to 0.33.1 - [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md) - [Commits](https://github.com/kubernetes/client-go/compare/v0.33.0...v0.33.1) Updates `k8s.io/component-base` from 0.33.0 to 0.33.1 - [Commits](https://github.com/kubernetes/component-base/compare/v0.33.0...v0.33.1) Updates `k8s.io/kubectl` from 0.33.0 to 0.33.1 - [Commits](https://github.com/kubernetes/kubectl/compare/v0.33.0...v0.33.1) Updates `sigs.k8s.io/controller-runtime` from 0.20.4 to 0.21.0 - [Release notes](https://github.com/kubernetes-sigs/controller-runtime/releases) - [Changelog](https://github.com/kubernetes-sigs/controller-runtime/blob/main/RELEASE.md) - [Commits](https://github.com/kubernetes-sigs/controller-runtime/compare/v0.20.4...v0.21.0) --- updated-dependencies: - dependency-name: cloud.google.com/go/cloudsqlconn dependency-version: 1.17.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: cloud.google.com/go/compute dependency-version: 1.38.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: cloud.google.com/go/compute/metadata dependency-version: 0.7.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: cloud.google.com/go/container dependency-version: 1.43.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: cloud.google.com/go/kms dependency-version: 1.22.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: cloud.google.com/go/spanner dependency-version: 1.82.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: cloud.google.com/go/storage dependency-version: 1.53.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/Azure/azure-sdk-for-go/sdk/azidentity dependency-version: 1.10.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/ClickHouse/ch-go dependency-version: 0.66.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/ClickHouse/clickhouse-go/v2 dependency-version: 2.35.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager dependency-version: 1.17.77 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/applicationautoscaling dependency-version: 1.36.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/athena dependency-version: 1.50.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/ec2 dependency-version: 1.224.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/ecs dependency-version: 1.57.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/glue dependency-version: 1.113.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/iam dependency-version: 1.42.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/identitystore dependency-version: 1.28.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/rds dependency-version: 1.96.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/redshiftserverless dependency-version: 1.27.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/s3 dependency-version: 1.80.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/aws/aws-sdk-go-v2/service/ssoadmin dependency-version: 1.31.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/docker/docker dependency-version: 28.2.2+incompatible dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/go-jose/go-jose/v4 dependency-version: 4.1.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/go-logr/logr dependency-version: 1.4.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/go-webauthn/webauthn dependency-version: 0.13.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/google/go-containerregistry dependency-version: 0.20.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/google/go-tpm dependency-version: 0.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/googleapis/gax-go/v2 dependency-version: 2.14.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/grpc-ecosystem/go-grpc-middleware/v2 dependency-version: 2.3.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/jackc/pgx/v5 dependency-version: 5.7.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/mark3labs/mcp-go dependency-version: 0.31.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/oracle/oci-go-sdk/v65 dependency-version: 65.92.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/pquerna/otp dependency-version: 1.5.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/prometheus/common dependency-version: 0.64.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/quic-go/quic-go dependency-version: 0.52.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: github.com/shirou/gopsutil/v4 dependency-version: 4.25.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/sigstore/protobuf-specs dependency-version: 0.4.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/snowflakedb/gosnowflake dependency-version: 1.14.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: github.com/tidwall/pretty dependency-version: 1.2.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: gitlab.com/gitlab-org/api/client-go dependency-version: 0.129.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.etcd.io/etcd/api/v3 dependency-version: 3.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.etcd.io/etcd/client/v3 dependency-version: 3.6.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc dependency-version: 0.61.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp dependency-version: 0.61.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel dependency-version: 1.36.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace dependency-version: 1.36.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc dependency-version: 1.36.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp dependency-version: 1.36.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel/sdk dependency-version: 1.36.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/otel/trace dependency-version: 1.36.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: go.opentelemetry.io/proto/otlp dependency-version: 1.7.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: golang.org/x/crypto dependency-version: 0.38.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: golang.org/x/net dependency-version: 0.40.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: golang.org/x/oauth2 dependency-version: 0.30.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: golang.org/x/sync dependency-version: 0.14.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: golang.org/x/sys dependency-version: 0.33.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: golang.org/x/term dependency-version: 0.32.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: golang.org/x/text dependency-version: 0.25.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: google.golang.org/api dependency-version: 0.233.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: google.golang.org/genproto/googleapis/rpc dependency-version: 0.0.0-20250528174236-200df99c418a dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: google.golang.org/grpc dependency-version: 1.72.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: helm.sh/helm/v3 dependency-version: 3.18.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go - dependency-name: k8s.io/api dependency-version: 0.33.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: k8s.io/apiextensions-apiserver dependency-version: 0.33.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: k8s.io/apimachinery dependency-version: 0.33.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: k8s.io/apiserver dependency-version: 0.33.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: k8s.io/cli-runtime dependency-version: 0.33.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: k8s.io/client-go dependency-version: 0.33.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: k8s.io/component-base dependency-version: 0.33.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: k8s.io/kubectl dependency-version: 0.33.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: go - dependency-name: sigs.k8s.io/controller-runtime dependency-version: 0.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: go ... Signed-off-by: dependabot[bot] <support@github.com> * upgrade submodule deps * rollback github.com/go-webauthn/webauthn * replace otelgrpc interceptors with stats handlers * update KEXAlgos --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Marco Dinis <marco.dinis@goteleport.com> Co-authored-by: Tim Ross <tim.ross@goteleport.com>
470 lines
17 KiB
Go
470 lines
17 KiB
Go
// Copyright 2023 Gravitational, 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.
|
|
|
|
package proxy
|
|
|
|
import (
|
|
"context"
|
|
"crypto/tls"
|
|
"crypto/x509"
|
|
"encoding/asn1"
|
|
"net"
|
|
"slices"
|
|
"sync/atomic"
|
|
"time"
|
|
|
|
"github.com/gravitational/trace"
|
|
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
|
|
"golang.org/x/crypto/ssh"
|
|
"golang.org/x/crypto/ssh/agent"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/credentials"
|
|
"google.golang.org/grpc/credentials/insecure"
|
|
|
|
"github.com/gravitational/teleport/api/breaker"
|
|
"github.com/gravitational/teleport/api/client"
|
|
"github.com/gravitational/teleport/api/client/proxy/transport/transportv1"
|
|
"github.com/gravitational/teleport/api/defaults"
|
|
transportv1pb "github.com/gravitational/teleport/api/gen/proto/go/teleport/transport/v1"
|
|
"github.com/gravitational/teleport/api/metadata"
|
|
"github.com/gravitational/teleport/api/utils/grpc/interceptors"
|
|
)
|
|
|
|
// ClientConfig contains configuration needed for a Client
|
|
// to be able to connect to the cluster.
|
|
type ClientConfig struct {
|
|
// ProxyAddress is the address of the Proxy server.
|
|
ProxyAddress string
|
|
// TLSRoutingEnabled indicates if the cluster is using TLS Routing.
|
|
TLSRoutingEnabled bool
|
|
// TLSConfigFunc produces the [tls.Config] required for mTLS connections to a specific cluster.
|
|
TLSConfigFunc func(cluster string) (*tls.Config, error)
|
|
// UnaryInterceptors are optional [grpc.UnaryClientInterceptor] to apply
|
|
// to the gRPC client.
|
|
UnaryInterceptors []grpc.UnaryClientInterceptor
|
|
// StreamInterceptors are optional [grpc.StreamClientInterceptor] to apply
|
|
// to the gRPC client.
|
|
StreamInterceptors []grpc.StreamClientInterceptor
|
|
// SSHConfig is the [ssh.ClientConfig] used to connect to the Proxy SSH server.
|
|
SSHConfig *ssh.ClientConfig
|
|
// DialTimeout defines how long to attempt dialing before timing out.
|
|
DialTimeout time.Duration
|
|
// DialOpts define options for dialing the client connection.
|
|
DialOpts []grpc.DialOption
|
|
// ALPNConnUpgradeRequired indicates that ALPN connection upgrades are
|
|
// required for making TLS routing requests.
|
|
ALPNConnUpgradeRequired bool
|
|
// InsecureSkipVerify is an option to skip HTTPS cert check
|
|
InsecureSkipVerify bool
|
|
// ViaJumpHost indicates if the connection to the cluster is direct
|
|
// or via another cluster.
|
|
ViaJumpHost bool
|
|
// PROXYHeaderGetter is used if present to get signed PROXY headers to propagate client's IP.
|
|
// Used by proxy's web server to make calls on behalf of connected clients.
|
|
PROXYHeaderGetter client.PROXYHeaderGetter
|
|
|
|
// The below items are intended to be used by tests to connect without mTLS.
|
|
// The gRPC transport credentials to use when establishing the connection to proxy.
|
|
creds func(cluster string) (credentials.TransportCredentials, error)
|
|
// The client credentials to use when establishing the connection to auth.
|
|
clientCreds func(cluster string) (client.Credentials, error)
|
|
}
|
|
|
|
// CheckAndSetDefaults ensures required options are present and
|
|
// sets the default value of any that are omitted.
|
|
func (c *ClientConfig) CheckAndSetDefaults(ctx context.Context) error {
|
|
if c.ProxyAddress == "" {
|
|
return trace.BadParameter("missing required parameter ProxyAddress")
|
|
}
|
|
if c.SSHConfig == nil {
|
|
return trace.BadParameter("missing required parameter SSHConfig")
|
|
}
|
|
if c.DialTimeout <= 0 {
|
|
c.DialTimeout = defaults.DefaultIOTimeout
|
|
}
|
|
if c.TLSConfigFunc != nil {
|
|
c.clientCreds = func(cluster string) (client.Credentials, error) {
|
|
cfg, err := c.TLSConfigFunc(cluster)
|
|
if err != nil {
|
|
return nil, trace.Wrap(err)
|
|
}
|
|
|
|
return client.LoadTLS(cfg), nil
|
|
}
|
|
c.creds = func(cluster string) (credentials.TransportCredentials, error) {
|
|
tlsCfg, err := c.TLSConfigFunc(cluster)
|
|
if err != nil {
|
|
return nil, trace.Wrap(err)
|
|
}
|
|
if !slices.Contains(tlsCfg.NextProtos, protocolProxySSHGRPC) {
|
|
tlsCfg.NextProtos = append(tlsCfg.NextProtos, protocolProxySSHGRPC)
|
|
}
|
|
|
|
// This logic still appears to be necessary to force client to always send
|
|
// a certificate regardless of the server setting. Otherwise the client may pick
|
|
// not to send the client certificate by looking at certificate request.
|
|
if len(tlsCfg.Certificates) > 0 {
|
|
cert := tlsCfg.Certificates[0]
|
|
|
|
// When a hardware key is used to store the private key, the user may fail to provide
|
|
// a PIN or touch before a gRPC dial timeout occurs.
|
|
// The resulting "dial timeout" error is generic and doesn't indicate an issue with the
|
|
// hardware key itself (since YubiKey is treated like any other key).
|
|
// To avoid this, we perform a "warm-up" call to the key, ensuring it is ready
|
|
// before initiating the gRPC dial.
|
|
// This approach works because the connection is cached for a few seconds,
|
|
// allowing subsequent calls without requiring additional user action.
|
|
if priv, ok := cert.PrivateKey.(hardwareKeyWarmer); ok {
|
|
err := priv.WarmupHardwareKey(ctx)
|
|
if err != nil {
|
|
return nil, trace.Wrap(err)
|
|
}
|
|
}
|
|
tlsCfg.Certificates = nil
|
|
tlsCfg.GetClientCertificate = func(_ *tls.CertificateRequestInfo) (*tls.Certificate, error) {
|
|
return &cert, nil
|
|
}
|
|
}
|
|
|
|
return credentials.NewTLS(tlsCfg), nil
|
|
}
|
|
} else {
|
|
c.clientCreds = func(cluster string) (client.Credentials, error) {
|
|
return insecureCredentials{}, nil
|
|
}
|
|
c.creds = func(cluster string) (credentials.TransportCredentials, error) {
|
|
return insecure.NewCredentials(), nil
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// insecureCredentials implements [client.Credentials] and is used by tests
|
|
// to connect to the Auth server without mTLS.
|
|
type insecureCredentials struct{}
|
|
|
|
func (mc insecureCredentials) TLSConfig() (*tls.Config, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (mc insecureCredentials) SSHClientConfig() (*ssh.ClientConfig, error) {
|
|
return nil, trace.NotImplemented("no ssh config")
|
|
}
|
|
|
|
// Expiry returns the credential expiry. insecureCredentials never expire.
|
|
func (mc insecureCredentials) Expiry() (time.Time, bool) {
|
|
return time.Time{}, true
|
|
}
|
|
|
|
// Client is a client to the Teleport Proxy SSH server on behalf of a user.
|
|
// The Proxy SSH port used to serve only SSH, however portions of the api are
|
|
// being migrated to gRPC to reduce latency. The Client is capable of communicating
|
|
// to the Proxy via both mechanism; by default it will choose to use gRPC over
|
|
// SSH where it is able to.
|
|
type Client struct {
|
|
// cfg are the user provided configuration parameters required to
|
|
// connect and interact with the Proxy.
|
|
cfg *ClientConfig
|
|
// grpcConn is the established gRPC connection to the Proxy.
|
|
grpcConn *grpc.ClientConn
|
|
// transport is the transportv1.Client
|
|
transport *transportv1.Client
|
|
// clusterName as determined by inspecting the certificate presented by
|
|
// the Proxy during the connection handshake.
|
|
clusterName *clusterName
|
|
}
|
|
|
|
// protocolProxySSHGRPC is TLS ALPN protocol value used to indicate gRPC
|
|
// traffic intended for the Teleport Proxy on the SSH port.
|
|
const protocolProxySSHGRPC string = "teleport-proxy-ssh-grpc"
|
|
|
|
// NewClient creates a new Client that attempts to connect to the gRPC
|
|
// server being served by the Proxy SSH port by default. If unable to
|
|
// connect the Client falls back to connecting to the Proxy SSH port
|
|
// via SSH.
|
|
//
|
|
// If it is known that the gRPC server doesn't serve the required API
|
|
// of the caller, then prefer to use NewSSHClient instead which omits
|
|
// the gRPC dialing altogether.
|
|
func NewClient(ctx context.Context, cfg ClientConfig) (*Client, error) {
|
|
if err := cfg.CheckAndSetDefaults(ctx); err != nil {
|
|
return nil, trace.Wrap(err)
|
|
}
|
|
|
|
clt, err := newGRPCClient(ctx, &cfg)
|
|
if err != nil {
|
|
return nil, trace.Wrap(err)
|
|
}
|
|
|
|
// If connecting via a jump host make a call to perform the
|
|
// TLS handshake to ensure that we get the name of the cluster
|
|
// being connected to from its certificate.
|
|
if cfg.ViaJumpHost {
|
|
if _, err := clt.ClusterDetails(ctx); err != nil {
|
|
return nil, trace.NewAggregate(err, clt.Close())
|
|
}
|
|
}
|
|
return clt, trace.Wrap(err)
|
|
}
|
|
|
|
// clusterName stores the name of the cluster
|
|
// in a protected manner which allows it to
|
|
// be set during handshakes with the server.
|
|
type clusterName struct {
|
|
name atomic.Pointer[string]
|
|
}
|
|
|
|
func (c *clusterName) get() string {
|
|
name := c.name.Load()
|
|
if name != nil {
|
|
return *name
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (c *clusterName) set(name string) {
|
|
c.name.CompareAndSwap(nil, &name)
|
|
}
|
|
|
|
// clusterCredentials is a [credentials.TransportCredentials] implementation
|
|
// that obtains the name of the cluster being connected to from the certificate
|
|
// presented by the server. This allows the client to determine the cluster name when
|
|
// connecting via jump hosts.
|
|
type clusterCredentials struct {
|
|
credentials.TransportCredentials
|
|
clusterName *clusterName
|
|
}
|
|
|
|
// teleportClusterASN1ExtensionOID is an extension ID used when encoding/decoding
|
|
// origin teleport cluster name into certificates.
|
|
var teleportClusterASN1ExtensionOID = asn1.ObjectIdentifier{1, 3, 9999, 1, 7}
|
|
|
|
// ClientHandshake performs the handshake with the wrapped [credentials.TransportCredentials] and
|
|
// then inspects the provided cert for the [teleportClusterASN1ExtensionOID] to determine
|
|
// the cluster that the server belongs to.
|
|
func (c *clusterCredentials) ClientHandshake(ctx context.Context, authority string, conn net.Conn) (net.Conn, credentials.AuthInfo, error) {
|
|
conn, info, err := c.TransportCredentials.ClientHandshake(ctx, authority, conn)
|
|
if err != nil {
|
|
return conn, info, trace.Wrap(err)
|
|
}
|
|
|
|
tlsInfo, ok := info.(credentials.TLSInfo)
|
|
if !ok {
|
|
return conn, info, nil
|
|
}
|
|
|
|
certs := tlsInfo.State.PeerCertificates
|
|
if len(certs) == 0 {
|
|
return conn, info, nil
|
|
}
|
|
|
|
clientCert := certs[0]
|
|
for _, attr := range clientCert.Subject.Names {
|
|
if attr.Type.Equal(teleportClusterASN1ExtensionOID) {
|
|
val, ok := attr.Value.(string)
|
|
if ok {
|
|
c.clusterName.set(val)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
return conn, info, nil
|
|
}
|
|
|
|
// newGRPCClient creates a Client that is connected via gRPC.
|
|
func newGRPCClient(ctx context.Context, cfg *ClientConfig) (_ *Client, err error) {
|
|
dialCtx, cancel := context.WithTimeout(ctx, cfg.DialTimeout)
|
|
defer cancel()
|
|
|
|
c := &clusterName{}
|
|
|
|
creds, err := cfg.creds("")
|
|
if err != nil {
|
|
return nil, trace.Wrap(err)
|
|
}
|
|
|
|
conn, err := grpc.DialContext(
|
|
dialCtx,
|
|
cfg.ProxyAddress,
|
|
append([]grpc.DialOption{
|
|
grpc.WithStatsHandler(otelgrpc.NewClientHandler()),
|
|
grpc.WithContextDialer(newDialerForGRPCClient(ctx, cfg)),
|
|
grpc.WithTransportCredentials(&clusterCredentials{TransportCredentials: creds, clusterName: c}),
|
|
grpc.WithChainUnaryInterceptor(
|
|
append(cfg.UnaryInterceptors,
|
|
metadata.UnaryClientInterceptor,
|
|
interceptors.GRPCClientUnaryErrorInterceptor,
|
|
)...,
|
|
),
|
|
grpc.WithChainStreamInterceptor(
|
|
append(cfg.StreamInterceptors,
|
|
metadata.StreamClientInterceptor,
|
|
interceptors.GRPCClientStreamErrorInterceptor,
|
|
)...,
|
|
),
|
|
}, cfg.DialOpts...)...,
|
|
)
|
|
if err != nil {
|
|
return nil, trace.Wrap(err)
|
|
}
|
|
|
|
defer func() {
|
|
if err != nil {
|
|
_ = conn.Close()
|
|
}
|
|
}()
|
|
|
|
transport, err := transportv1.NewClient(transportv1pb.NewTransportServiceClient(conn))
|
|
if err != nil {
|
|
return nil, trace.Wrap(err)
|
|
}
|
|
|
|
return &Client{
|
|
cfg: cfg,
|
|
grpcConn: conn,
|
|
transport: transport,
|
|
clusterName: c,
|
|
}, nil
|
|
}
|
|
|
|
func newDialerForGRPCClient(ctx context.Context, cfg *ClientConfig) func(context.Context, string) (net.Conn, error) {
|
|
return client.GRPCContextDialer(client.NewDialer(ctx, defaults.DefaultIdleTimeout, cfg.DialTimeout,
|
|
client.WithInsecureSkipVerify(cfg.InsecureSkipVerify),
|
|
client.WithALPNConnUpgrade(cfg.ALPNConnUpgradeRequired),
|
|
client.WithALPNConnUpgradePing(true), // Use Ping protocol for long-lived connections.
|
|
client.WithPROXYHeaderGetter(cfg.PROXYHeaderGetter),
|
|
))
|
|
}
|
|
|
|
// ClusterName returns the name of the cluster that the
|
|
// connected Proxy is a member of.
|
|
func (c *Client) ClusterName() string {
|
|
return c.clusterName.get()
|
|
}
|
|
|
|
// Close attempts to close both the gRPC and SSH connections.
|
|
func (c *Client) Close() error {
|
|
return trace.Wrap(c.grpcConn.Close())
|
|
}
|
|
|
|
// SSHConfig returns the [ssh.ClientConfig] for the provided user which
|
|
// should be used when creating a [tracessh.Client] with the returned
|
|
// [net.Conn] from [Client.DialHost].
|
|
func (c *Client) SSHConfig(user string) *ssh.ClientConfig {
|
|
return &ssh.ClientConfig{
|
|
Config: c.cfg.SSHConfig.Config,
|
|
User: user,
|
|
Auth: c.cfg.SSHConfig.Auth,
|
|
HostKeyCallback: c.cfg.SSHConfig.HostKeyCallback,
|
|
BannerCallback: c.cfg.SSHConfig.BannerCallback,
|
|
ClientVersion: c.cfg.SSHConfig.ClientVersion,
|
|
HostKeyAlgorithms: c.cfg.SSHConfig.HostKeyAlgorithms,
|
|
Timeout: c.cfg.SSHConfig.Timeout,
|
|
}
|
|
}
|
|
|
|
// ClusterDetails provide cluster configuration
|
|
// details as known by the connected Proxy.
|
|
type ClusterDetails struct {
|
|
// FIPS dictates whether FIPS mode is enabled.
|
|
FIPS bool
|
|
}
|
|
|
|
// ClientConfig returns a [client.Config] that may be used to connect to the
|
|
// Auth server in the provided cluster via [client.New] or similar. The [client.Config]
|
|
// returned will have the correct credentials and dialer set based on the ClientConfig
|
|
// that was provided to create this Client.
|
|
func (c *Client) ClientConfig(ctx context.Context, cluster string) (client.Config, error) {
|
|
creds, err := c.cfg.clientCreds(cluster)
|
|
if err != nil {
|
|
return client.Config{}, trace.Wrap(err)
|
|
}
|
|
|
|
if c.cfg.TLSRoutingEnabled {
|
|
return client.Config{
|
|
Context: ctx,
|
|
Addrs: []string{c.cfg.ProxyAddress},
|
|
Credentials: []client.Credentials{creds},
|
|
ALPNSNIAuthDialClusterName: cluster,
|
|
CircuitBreakerConfig: breaker.NoopBreakerConfig(),
|
|
ALPNConnUpgradeRequired: c.cfg.ALPNConnUpgradeRequired,
|
|
DialOpts: c.cfg.DialOpts,
|
|
InsecureAddressDiscovery: c.cfg.InsecureSkipVerify,
|
|
DialInBackground: true,
|
|
}, nil
|
|
}
|
|
|
|
return client.Config{
|
|
Context: ctx,
|
|
Credentials: []client.Credentials{creds},
|
|
CircuitBreakerConfig: breaker.NoopBreakerConfig(),
|
|
DialInBackground: true,
|
|
InsecureAddressDiscovery: c.cfg.InsecureSkipVerify,
|
|
Dialer: client.ContextDialerFunc(func(dialCtx context.Context, _ string, _ string) (net.Conn, error) {
|
|
conn, err := c.transport.DialCluster(dialCtx, cluster, nil)
|
|
return conn, trace.Wrap(err)
|
|
}),
|
|
DialOpts: c.cfg.DialOpts,
|
|
}, nil
|
|
}
|
|
|
|
// DialHost establishes a connection to the `target` in cluster named `cluster`. If a keyring
|
|
// is provided it will only be forwarded if proxy recording mode is enabled in the cluster.
|
|
func (c *Client) DialHost(ctx context.Context, target, cluster string, keyring agent.ExtendedAgent) (net.Conn, ClusterDetails, error) {
|
|
conn, details, err := c.transport.DialHost(ctx, target, cluster, nil, keyring)
|
|
if err != nil {
|
|
return nil, ClusterDetails{}, trace.ConnectionProblem(err, "failed connecting to host %s: %v", target, err)
|
|
}
|
|
|
|
return conn, ClusterDetails{FIPS: details.FipsEnabled}, nil
|
|
}
|
|
|
|
// ClusterDetails retrieves cluster information as seen by the Proxy.
|
|
func (c *Client) ClusterDetails(ctx context.Context) (ClusterDetails, error) {
|
|
details, err := c.transport.ClusterDetails(ctx)
|
|
if err != nil {
|
|
return ClusterDetails{}, trace.Wrap(err)
|
|
}
|
|
|
|
return ClusterDetails{FIPS: details.FipsEnabled}, nil
|
|
}
|
|
|
|
// ProxyWindowsDesktopSession establishes a connection to the target desktop over a bidirectional stream.
|
|
// The caller is required to pass a valid desktop certificate.
|
|
func (c *Client) ProxyWindowsDesktopSession(ctx context.Context, cluster string, desktopName string, windowsDesktopCert tls.Certificate, rootCAs *x509.CertPool) (*tls.Conn, error) {
|
|
session, err := c.transport.ProxyWindowsDesktopSession(ctx, cluster, desktopName, windowsDesktopCert, rootCAs)
|
|
if err != nil {
|
|
return nil, trace.Wrap(err)
|
|
}
|
|
|
|
return session, nil
|
|
}
|
|
|
|
// Ping measures the round trip latency of sending a message to the Proxy.
|
|
func (c *Client) Ping(ctx context.Context) error {
|
|
// TODO(tross): Update to call Ping when it is added to the transport service.
|
|
// For now we don't really care what method is used we just want to measure
|
|
// how long it takes to get a reply.
|
|
_, _ = c.transport.ClusterDetails(ctx)
|
|
return nil
|
|
}
|
|
|
|
// hardwareKeyWarmer performs a bogus call to the hardware key,
|
|
// to proactively prompt the user for a PIN/touch (if needed).
|
|
type hardwareKeyWarmer interface {
|
|
WarmupHardwareKey(ctx context.Context) error
|
|
}
|