Documentation ¶
Index ¶
- Constants
- Variables
- func VaultTransitNamespaceContext(namespace string) string
- type AnyResolver
- type Authentication
- type Authenticator
- type AuthenticatorOption
- type ChainIntermediary
- type ChainIntermediaryFunc
- type ChainWrapper
- type Claims
- type HTTPAuthorizationHeaderIntermediary
- type Injector
- type InjectorFunc
- type Intermediary
- type IntermediaryFunc
- type Issuer
- type IssuerFunc
- type KeyResolver
- type KeyResolverOption
- type KeySignerIssuer
- type KubernetesChainIntermediaryFunc
- type KubernetesInterface
- type KubernetesIntermediary
- type KubernetesIntermediaryMetadata
- type NotFoundError
- type Raw
- type Resolver
- type ResolverFunc
- type TektonInterface
- type Validator
- type ValidatorFunc
- type VaultResolver
- type VaultResolverInjector
- type VaultResolverInjectorFunc
- type VaultResolverMetadata
- type VaultResolverOption
- type VaultTransitIntermediary
- type VaultTransitIntermediaryOption
- type VaultTransitWrapper
- type VaultTransitWrapperOption
- type WrappedIssuer
- type Wrapper
- type WrapperFunc
Constants ¶
const ( ControllerIssuer = "controller.k8s.relay.sh" MetadataAPIAudienceV1 = "k8s.relay.sh/metadata-api/v1" )
const ( KubernetesTokenAnnotation = "relay.sh/token" KubernetesSubjectAnnotation = "relay.sh/subject" )
const (
PodValidationTimeout = 120 * time.Second
)
Variables ¶
var (
ErrMalformed = errors.New("authenticate: malformed token")
)
Functions ¶
Types ¶
type AnyResolver ¶
type AnyResolver struct {
// contains filtered or unexported fields
}
AnyResolver picks the first resolver that resolves claims successfully. If a resolver returns an error other than ErrNotFound, it is immediately propagated.
func NewAnyResolver ¶
func NewAnyResolver(delegates []Resolver) *AnyResolver
func (*AnyResolver) Resolve ¶
func (ar *AnyResolver) Resolve(ctx context.Context, state *Authentication, raw Raw) (*Claims, error)
type Authentication ¶
type Authentication struct {
// contains filtered or unexported fields
}
Authentication is the current authentication state. Intermediaries and resolvers can add new validators and injectors to the state.
func NewAuthentication ¶
func NewAuthentication() *Authentication
func NewInitializedAuthentication ¶
func NewInitializedAuthentication(validators *[]Validator, injectors *[]Injector) *Authentication
func (*Authentication) AddInjector ¶
func (a *Authentication) AddInjector(i Injector)
func (*Authentication) AddValidator ¶
func (a *Authentication) AddValidator(v Validator)
type Authenticator ¶
type Authenticator struct {
// contains filtered or unexported fields
}
Authenticator provides client authentication using a token. It resolves and validates claims, finally injecting contextual information as needed.
func NewAuthenticator ¶
func NewAuthenticator(intermediary Intermediary, resolver Resolver, opts ...AuthenticatorOption) *Authenticator
func (*Authenticator) Authenticate ¶
func (a *Authenticator) Authenticate(ctx context.Context) (bool, error)
type AuthenticatorOption ¶
type AuthenticatorOption func(a *Authenticator)
func AuthenticatorWithInjector ¶
func AuthenticatorWithInjector(i Injector) AuthenticatorOption
func AuthenticatorWithValidator ¶
func AuthenticatorWithValidator(v Validator) AuthenticatorOption
type ChainIntermediary ¶
type ChainIntermediary struct {
// contains filtered or unexported fields
}
func NewChainIntermediary ¶
func NewChainIntermediary(initial Intermediary, fns ...ChainIntermediaryFunc) *ChainIntermediary
func (*ChainIntermediary) Next ¶
func (ci *ChainIntermediary) Next(ctx context.Context, state *Authentication) (Raw, error)
type ChainIntermediaryFunc ¶
type ChainIntermediaryFunc func(ctx context.Context, prev Raw) (Intermediary, error)
func ChainVaultTransitIntermediary ¶
func ChainVaultTransitIntermediary(client *vaultapi.Client, path, key string, opts ...VaultTransitIntermediaryOption) ChainIntermediaryFunc
type ChainWrapper ¶
type ChainWrapper struct {
// contains filtered or unexported fields
}
func NewChainWrapper ¶
func NewChainWrapper(delegates ...Wrapper) *ChainWrapper
type Claims ¶
type Claims struct { *jwt.Claims `json:",inline"` KubernetesNamespaceName string `json:"k8s.io/namespace-name,omitempty"` KubernetesNamespaceUID string `json:"k8s.io/namespace-uid,omitempty"` KubernetesServiceAccountToken string `json:"k8s.io/service-account-token,omitempty"` // RelayDomainID represents a holder of tenants with high-level // configuration like connections. In our SaaS service, domains correspond // to accounts. RelayDomainID string `json:"relay.sh/domain-id,omitempty"` // RelayTenantID represents the root of configuration for secrets, etc. In // our SaaS service, tenants correspond to workflows. RelayTenantID string `json:"relay.sh/tenant-id,omitempty"` RelayName string `json:"relay.sh/name,omitempty"` RelayRunID string `json:"relay.sh/run-id,omitempty"` RelayKubernetesImmutableConfigMapName string `json:"relay.sh/k8s/immutable-config-map-name,omitempty"` RelayKubernetesMutableConfigMapName string `json:"relay.sh/k8s/mutable-config-map-name,omitempty"` RelayVaultEnginePath string `json:"relay.sh/vault/engine-path,omitempty"` RelayVaultSecretPath string `json:"relay.sh/vault/secret-path,omitempty"` RelayVaultConnectionPath string `json:"relay.sh/vault/connection-path,omitempty"` RelayEventAPIURL *types.URL `json:"relay.sh/event/api/url,omitempty"` RelayEventAPIToken string `json:"relay.sh/event/api/token,omitempty"` RelayWorkflowExecutionAPIURL *types.URL `json:"relay.sh/workflow-execution/api/url,omitempty"` RelayWorkflowExecutionAPIToken string `json:"relay.sh/workflow-execution/api/token,omitempty"` }
type HTTPAuthorizationHeaderIntermediary ¶
type HTTPAuthorizationHeaderIntermediary struct {
// contains filtered or unexported fields
}
func NewHTTPAuthorizationHeaderIntermediary ¶
func NewHTTPAuthorizationHeaderIntermediary(r *http.Request) *HTTPAuthorizationHeaderIntermediary
func (*HTTPAuthorizationHeaderIntermediary) Next ¶
func (hi *HTTPAuthorizationHeaderIntermediary) Next(ctx context.Context, state *Authentication) (Raw, error)
type Injector ¶
An Injector runs after validation is complete to provide additional context to consuming applications.
type InjectorFunc ¶
type Intermediary ¶
type Intermediary interface {
Next(ctx context.Context, state *Authentication) (Raw, error)
}
An Intermediary looks up a token from a source environment.
type IntermediaryFunc ¶
type IntermediaryFunc func(ctx context.Context, state *Authentication) (Raw, error)
func (IntermediaryFunc) Next ¶
func (ifn IntermediaryFunc) Next(ctx context.Context, state *Authentication) (Raw, error)
type IssuerFunc ¶
type KeyResolver ¶
type KeyResolver struct {
// contains filtered or unexported fields
}
func NewKeyResolver ¶
func NewKeyResolver(key interface{}, opts ...KeyResolverOption) *KeyResolver
func (*KeyResolver) Resolve ¶
func (kr *KeyResolver) Resolve(ctx context.Context, state *Authentication, raw Raw) (*Claims, error)
type KeyResolverOption ¶
type KeyResolverOption func(kr *KeyResolver)
func KeyResolverWithExpectation ¶
func KeyResolverWithExpectation(e jwt.Expected) KeyResolverOption
type KeySignerIssuer ¶
type KeySignerIssuer struct {
// contains filtered or unexported fields
}
func NewHS256KeySignerIssuer ¶
func NewHS256KeySignerIssuer(key []byte) (*KeySignerIssuer, error)
func NewKeySignerIssuer ¶
func NewKeySignerIssuer(signer jose.Signer) *KeySignerIssuer
type KubernetesChainIntermediaryFunc ¶
type KubernetesChainIntermediaryFunc func(ctx context.Context, raw Raw, md *KubernetesIntermediaryMetadata) (Intermediary, error)
type KubernetesInterface ¶
type KubernetesInterface struct { kubernetes.Interface TektonInterface }
func NewKubernetesInterfaceForConfig ¶
func NewKubernetesInterfaceForConfig(cfg *rest.Config) (*KubernetesInterface, error)
type KubernetesIntermediary ¶
type KubernetesIntermediary struct {
// contains filtered or unexported fields
}
KubernetesIntermediary looks up a pod by IP and reads the value of an annotation as the authentication credential.
func NewKubernetesIntermediary ¶
func NewKubernetesIntermediary(client *KubernetesInterface, ip net.IP) *KubernetesIntermediary
func (*KubernetesIntermediary) Chain ¶
func (ki *KubernetesIntermediary) Chain(fn KubernetesChainIntermediaryFunc) Intermediary
func (*KubernetesIntermediary) Next ¶
func (ki *KubernetesIntermediary) Next(ctx context.Context, state *Authentication) (Raw, error)
type NotFoundError ¶
func (*NotFoundError) Error ¶
func (e *NotFoundError) Error() string
type Resolver ¶
type Resolver interface {
Resolve(ctx context.Context, state *Authentication, raw Raw) (*Claims, error)
}
A Resolver finds the claims associated with a token.
type ResolverFunc ¶
func (ResolverFunc) Resolve ¶
func (rf ResolverFunc) Resolve(ctx context.Context, state *Authentication, raw Raw) (*Claims, error)
type TektonInterface ¶
type ValidatorFunc ¶
type VaultResolver ¶
type VaultResolver struct {
// contains filtered or unexported fields
}
func NewStubConfigVaultResolver ¶
func NewStubConfigVaultResolver(addr, path string, opts ...VaultResolverOption) *VaultResolver
func NewVaultResolver ¶
func NewVaultResolver(cfg *vaultapi.Config, path string, opts ...VaultResolverOption) *VaultResolver
func (*VaultResolver) Resolve ¶
func (vr *VaultResolver) Resolve(ctx context.Context, state *Authentication, raw Raw) (*Claims, error)
type VaultResolverInjector ¶
type VaultResolverInjector interface {
Inject(ctx context.Context, claims *Claims, md *VaultResolverMetadata) error
}
type VaultResolverInjectorFunc ¶
type VaultResolverInjectorFunc func(ctx context.Context, claims *Claims, md *VaultResolverMetadata) error
func (VaultResolverInjectorFunc) Inject ¶
func (vf VaultResolverInjectorFunc) Inject(ctx context.Context, claims *Claims, md *VaultResolverMetadata) error
type VaultResolverMetadata ¶
type VaultResolverOption ¶
type VaultResolverOption func(vr *VaultResolver)
func VaultResolverWithInjector ¶
func VaultResolverWithInjector(injector VaultResolverInjector) VaultResolverOption
func VaultResolverWithRole ¶
func VaultResolverWithRole(role string) VaultResolverOption
type VaultTransitIntermediary ¶
type VaultTransitIntermediary struct {
// contains filtered or unexported fields
}
func NewVaultTransitIntermediary ¶
func NewVaultTransitIntermediary(client *vaultapi.Client, path, key, ciphertext string, opts ...VaultTransitIntermediaryOption) *VaultTransitIntermediary
func (*VaultTransitIntermediary) Next ¶
func (vti *VaultTransitIntermediary) Next(ctx context.Context, state *Authentication) (Raw, error)
type VaultTransitIntermediaryOption ¶
type VaultTransitIntermediaryOption func(vti *VaultTransitIntermediary)
func VaultTransitIntermediaryWithContext ¶
func VaultTransitIntermediaryWithContext(context string) VaultTransitIntermediaryOption
type VaultTransitWrapper ¶
type VaultTransitWrapper struct {
// contains filtered or unexported fields
}
func NewVaultTransitWrapper ¶
func NewVaultTransitWrapper(client *vaultapi.Client, path, key string, opts ...VaultTransitWrapperOption) *VaultTransitWrapper
type VaultTransitWrapperOption ¶
type VaultTransitWrapperOption func(vtw *VaultTransitWrapper)
func VaultTransitWrapperWithContext ¶
func VaultTransitWrapperWithContext(context string) VaultTransitWrapperOption
type WrappedIssuer ¶
type WrappedIssuer struct {
// contains filtered or unexported fields
}
func NewWrappedIssuer ¶
func NewWrappedIssuer(delegate Issuer, wrapper Wrapper) *WrappedIssuer