mirror of
https://github.com/pomerium/pomerium.git
synced 2025-08-04 01:09:36 +02:00
handle mtls enforcement mode
This commit is contained in:
parent
6daa924c99
commit
587658821c
1 changed files with 29 additions and 10 deletions
|
@ -18,12 +18,14 @@ import (
|
|||
http_connection_managerv3 "github.com/envoyproxy/go-control-plane/envoy/extensions/filters/network/http_connection_manager/v3"
|
||||
"github.com/muesli/termenv"
|
||||
"github.com/pomerium/pomerium/config"
|
||||
"github.com/pomerium/pomerium/internal/log"
|
||||
configpb "github.com/pomerium/pomerium/pkg/grpc/config"
|
||||
cluster_api "github.com/pomerium/pomerium/pkg/zero/cluster"
|
||||
"github.com/pomerium/pomerium/pkg/zero/importutil"
|
||||
"github.com/pomerium/protoutil/fieldmasks"
|
||||
"github.com/pomerium/protoutil/paths"
|
||||
"google.golang.org/protobuf/encoding/protojson"
|
||||
"google.golang.org/protobuf/reflect/protopath"
|
||||
"google.golang.org/protobuf/reflect/protoreflect"
|
||||
"google.golang.org/protobuf/types/known/fieldmaskpb"
|
||||
)
|
||||
|
@ -205,15 +207,20 @@ func computeSettingsImportHints(cfg *configpb.Config) map[string]ImportHints {
|
|||
// "metrics_client_ca": {Note: noteCertificate(1)},
|
||||
"certificate_authority": {Note: noteCertificate(1)},
|
||||
"certificates": {Note: noteCertificate(len(cfg.GetSettings().GetCertificates()))},
|
||||
"downstream_mtls.crl": {Unsupported: true, Note: noteFeatureNotYetAvailable},
|
||||
"downstream_mtls.ca": {Note: noteCertificate(1)},
|
||||
}
|
||||
if dm := cfg.GetSettings().GetDownstreamMtls(); dm != nil {
|
||||
if dm.Enforcement != nil {
|
||||
m["downstream_mtls.ca"] = ImportHints{Unsupported: true, Note: noteFeatureNotYetAvailable}
|
||||
m["downstream_mtls.crl"] = ImportHints{Unsupported: true, Note: noteFeatureNotYetAvailable}
|
||||
m["downstream_mtls.enforcement"] = ImportHints{Unsupported: true, Note: noteFeatureNotYetAvailable}
|
||||
} else {
|
||||
m["downstream_mtls.ca"] = ImportHints{Note: noteCertificate(1)}
|
||||
m["downstream_mtls.crl"] = ImportHints{Unsupported: true, Note: noteFeatureNotYetAvailable}
|
||||
switch *dm.Enforcement {
|
||||
case configpb.MtlsEnforcementMode_POLICY:
|
||||
case configpb.MtlsEnforcementMode_POLICY_WITH_DEFAULT_DENY:
|
||||
case configpb.MtlsEnforcementMode_REJECT_CONNECTION:
|
||||
// this is a special case - zero does not support this mode, but we cannot continue
|
||||
// with a partial import because it fundamentally changes the behavior of all routes
|
||||
// and policies in the system
|
||||
log.Fatal().Msg("downstream mtls enforcement mode 'reject_connection' is not supported")
|
||||
}
|
||||
}
|
||||
}
|
||||
if cfg.GetSettings().GetServices() != "all" {
|
||||
|
@ -319,7 +326,7 @@ func NewImportUI(cfg *configpb.Config, quotas *cluster_api.ConfigQuotas) *Import
|
|||
if infoFunc, ok := customSettingsInfoByPath[path.String()]; ok {
|
||||
return escapeNoteText.Replace(infoFunc(val))
|
||||
}
|
||||
return escapeNoteText.Replace(formatValue(val))
|
||||
return escapeNoteText.Replace(formatValue(path, val))
|
||||
}
|
||||
settingsNote := huh.NewNote().
|
||||
Title(fmt.Sprintf("Value: %s", presentSettings.Paths[0])).
|
||||
|
@ -488,7 +495,7 @@ func includedPoliciesInRoute(route *configpb.Route) int {
|
|||
return n
|
||||
}
|
||||
|
||||
func formatValue(val protoreflect.Value) string {
|
||||
func formatValue(path protopath.Path, val protoreflect.Value) string {
|
||||
switch vi := val.Interface().(type) {
|
||||
case protoreflect.Message:
|
||||
jsonData, err := protojson.Marshal(vi.Interface())
|
||||
|
@ -499,17 +506,29 @@ func formatValue(val protoreflect.Value) string {
|
|||
case protoreflect.List:
|
||||
values := []string{}
|
||||
for i := 0; i < vi.Len(); i++ {
|
||||
values = append(values, formatValue(vi.Get(i)))
|
||||
values = append(values, formatValue(path, vi.Get(i)))
|
||||
}
|
||||
return renderStringSlice(values)
|
||||
case protoreflect.Map:
|
||||
values := []string{}
|
||||
vi.Range(func(mk protoreflect.MapKey, v protoreflect.Value) bool {
|
||||
values = append(values, mk.String()+yellowText.Render("=")+formatValue(v))
|
||||
values = append(values, mk.String()+yellowText.Render("=")+formatValue(path, v))
|
||||
return true
|
||||
})
|
||||
slices.Sort(values)
|
||||
return renderStringSlice(values)
|
||||
case protoreflect.EnumNumber:
|
||||
var field protoreflect.FieldDescriptor
|
||||
switch step := path.Index(-1); step.Kind() {
|
||||
case protopath.FieldAccessStep:
|
||||
field = step.FieldDescriptor()
|
||||
case protopath.ListIndexStep, protopath.MapIndexStep:
|
||||
field = path.Index(-2).FieldDescriptor()
|
||||
}
|
||||
if field != nil {
|
||||
return strings.ToLower(string(field.Enum().Values().ByNumber(vi).Name()))
|
||||
}
|
||||
return fmt.Sprint(vi)
|
||||
default:
|
||||
return val.String()
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue