mirror of
https://github.com/pomerium/pomerium.git
synced 2025-08-06 10:21:05 +02:00
authorize: log service account and impersonation details (#2354)
This commit is contained in:
parent
97457a3223
commit
8e155bdf61
3 changed files with 35 additions and 7 deletions
|
@ -43,7 +43,7 @@ func (a *Authorize) Check(ctx context.Context, in *envoy_service_auth_v3.CheckRe
|
||||||
rawJWT, _ := loadRawSession(hreq, a.currentOptions.Load(), state.encoder)
|
rawJWT, _ := loadRawSession(hreq, a.currentOptions.Load(), state.encoder)
|
||||||
sessionState, _ := loadSession(state.encoder, rawJWT)
|
sessionState, _ := loadSession(state.encoder, rawJWT)
|
||||||
|
|
||||||
u, err := a.forceSync(ctx, sessionState)
|
s, u, err := a.forceSync(ctx, sessionState)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn(ctx).Err(err).Msg("clearing session due to force sync failed")
|
log.Warn(ctx).Err(err).Msg("clearing session due to force sync failed")
|
||||||
sessionState = nil
|
sessionState = nil
|
||||||
|
@ -64,7 +64,7 @@ func (a *Authorize) Check(ctx context.Context, in *envoy_service_auth_v3.CheckRe
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
a.logAuthorizeCheck(ctx, in, out, res, u)
|
a.logAuthorizeCheck(ctx, in, out, res, s, u)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
if res.Deny != nil {
|
if res.Deny != nil {
|
||||||
|
|
|
@ -12,13 +12,14 @@ import (
|
||||||
"github.com/pomerium/pomerium/internal/telemetry/requestid"
|
"github.com/pomerium/pomerium/internal/telemetry/requestid"
|
||||||
"github.com/pomerium/pomerium/internal/telemetry/trace"
|
"github.com/pomerium/pomerium/internal/telemetry/trace"
|
||||||
"github.com/pomerium/pomerium/pkg/grpc/audit"
|
"github.com/pomerium/pomerium/pkg/grpc/audit"
|
||||||
|
"github.com/pomerium/pomerium/pkg/grpc/session"
|
||||||
"github.com/pomerium/pomerium/pkg/grpc/user"
|
"github.com/pomerium/pomerium/pkg/grpc/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (a *Authorize) logAuthorizeCheck(
|
func (a *Authorize) logAuthorizeCheck(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
in *envoy_service_auth_v3.CheckRequest, out *envoy_service_auth_v3.CheckResponse,
|
in *envoy_service_auth_v3.CheckRequest, out *envoy_service_auth_v3.CheckResponse,
|
||||||
res *evaluator.Result, u *user.User,
|
res *evaluator.Result, s sessionOrServiceAccount, u *user.User,
|
||||||
) {
|
) {
|
||||||
ctx, span := trace.StartSpan(ctx, "authorize.grpc.LogAuthorizeCheck")
|
ctx, span := trace.StartSpan(ctx, "authorize.grpc.LogAuthorizeCheck")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
@ -33,6 +34,33 @@ func (a *Authorize) logAuthorizeCheck(
|
||||||
evt = evt.Str("path", stripQueryString(hattrs.GetPath()))
|
evt = evt.Str("path", stripQueryString(hattrs.GetPath()))
|
||||||
evt = evt.Str("host", hattrs.GetHost())
|
evt = evt.Str("host", hattrs.GetHost())
|
||||||
evt = evt.Str("query", hattrs.GetQuery())
|
evt = evt.Str("query", hattrs.GetQuery())
|
||||||
|
|
||||||
|
// session information
|
||||||
|
if s, ok := s.(*session.Session); ok {
|
||||||
|
evt = evt.Str("session-id", s.GetId())
|
||||||
|
if s.GetImpersonateEmail() != "" {
|
||||||
|
evt = evt.Str("impersonate-email", s.GetImpersonateEmail())
|
||||||
|
}
|
||||||
|
if len(s.GetImpersonateGroups()) > 0 {
|
||||||
|
evt = evt.Strs("impersonate-groups", s.GetImpersonateGroups())
|
||||||
|
}
|
||||||
|
if s.GetImpersonateUserId() != "" {
|
||||||
|
evt = evt.Str("impersonate-user-id", s.GetImpersonateUserId())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if sa, ok := s.(*user.ServiceAccount); ok {
|
||||||
|
evt = evt.Str("service-account-id", sa.GetId())
|
||||||
|
if sa.GetImpersonateEmail() != "" {
|
||||||
|
evt = evt.Str("impersonate-email", sa.GetImpersonateEmail())
|
||||||
|
}
|
||||||
|
if len(sa.GetImpersonateGroups()) > 0 {
|
||||||
|
evt = evt.Strs("impersonate-groups", sa.GetImpersonateGroups())
|
||||||
|
}
|
||||||
|
if sa.GetImpersonateUserId() != "" {
|
||||||
|
evt = evt.Str("impersonate-user-id", sa.GetImpersonateUserId())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// result
|
// result
|
||||||
if res != nil {
|
if res != nil {
|
||||||
evt = evt.Bool("allow", res.Allow)
|
evt = evt.Bool("allow", res.Allow)
|
||||||
|
|
|
@ -65,18 +65,18 @@ func (syncer *dataBrokerSyncer) UpdateRecords(ctx context.Context, serverVersion
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Authorize) forceSync(ctx context.Context, ss *sessions.State) (*user.User, error) {
|
func (a *Authorize) forceSync(ctx context.Context, ss *sessions.State) (sessionOrServiceAccount, *user.User, error) {
|
||||||
ctx, span := trace.StartSpan(ctx, "authorize.forceSync")
|
ctx, span := trace.StartSpan(ctx, "authorize.forceSync")
|
||||||
defer span.End()
|
defer span.End()
|
||||||
if ss == nil {
|
if ss == nil {
|
||||||
return nil, nil
|
return nil, nil, nil
|
||||||
}
|
}
|
||||||
s := a.forceSyncSession(ctx, ss.ID)
|
s := a.forceSyncSession(ctx, ss.ID)
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return nil, errors.New("session not found")
|
return nil, nil, errors.New("session not found")
|
||||||
}
|
}
|
||||||
u := a.forceSyncUser(ctx, s.GetUserId())
|
u := a.forceSyncUser(ctx, s.GetUserId())
|
||||||
return u, nil
|
return s, u, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Authorize) forceSyncSession(ctx context.Context, sessionID string) sessionOrServiceAccount {
|
func (a *Authorize) forceSyncSession(ctx context.Context, sessionID string) sessionOrServiceAccount {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue