diff --git a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-Default.crd.yaml b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-Default.crd.yaml
deleted file mode 100644
index 6a6b7ff126e..00000000000
--- a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-Default.crd.yaml
+++ /dev/null
@@ -1,699 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- api-approved.openshift.io: https://github.com/openshift/api/pull/470
- api.openshift.io/merged-by-featuregates: "true"
- include.release.openshift.io/ibm-cloud-managed: "true"
- release.openshift.io/bootstrap-required: "true"
- release.openshift.io/feature-set: Default
- name: authentications.config.openshift.io
-spec:
- group: config.openshift.io
- names:
- kind: Authentication
- listKind: AuthenticationList
- plural: authentications
- singular: authentication
- scope: Cluster
- versions:
- - name: v1
- schema:
- openAPIV3Schema:
- description: |-
- Authentication specifies cluster-wide settings for authentication (like OAuth and
- webhook token authenticators). The canonical name of an instance is `cluster`.
-
- Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: spec holds user settable values for configuration
- properties:
- oauthMetadata:
- description: |-
- oauthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for an external OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- If oauthMetadata.name is non-empty, this value has precedence
- over any metadata reference stored in status.
- The key "oauthMetadata" is used to locate the data.
- If specified and the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcProviders:
- description: |-
- oidcProviders are OIDC identity providers that can issue tokens
- for this cluster
- Can only be set if "Type" is set to "OIDC".
-
- At most one provider can be configured.
- items:
- properties:
- claimMappings:
- description: |-
- claimMappings is an optional field that configures the rules to be used by
- the Kubernetes API server for translating claims in a JWT token, issued
- by the identity provider, to a cluster identity.
- properties:
- groups:
- description: |-
- groups is an optional field that configures how the groups of a cluster identity
- should be constructed from the claims in a JWT token issued
- by the identity provider.
- When referencing a claim, if the claim is present in the JWT
- token, its value must be a list of groups separated by a comma (',').
- For example - '"example"' and '"exampleOne", "exampleTwo", "exampleThree"' are valid claim values.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix is an optional field that configures the prefix that will be
- applied to the cluster identity attribute during the process of mapping
- JWT claims to cluster identity attributes.
-
- When omitted (""), no prefix is applied to the cluster identity attribute.
-
- Example: if `prefix` is set to "myoidc:" and the `claim` in JWT contains
- an array of strings "a", "b" and "c", the mapping will result in an
- array of string "myoidc:a", "myoidc:b" and "myoidc:c".
- type: string
- required:
- - claim
- type: object
- username:
- description: |-
- username is an optional field that configures how the username of a cluster identity
- should be constructed from the claims in a JWT token issued by the identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix configures the prefix that should be prepended to the value
- of the JWT claim.
-
- prefix must be set when prefixPolicy is set to 'Prefix' and must be unset otherwise.
- properties:
- prefixString:
- description: |-
- prefixString is a required field that configures the prefix that will
- be applied to cluster identity username attribute
- during the process of mapping JWT claims to cluster identity attributes.
-
- prefixString must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - prefixString
- type: object
- prefixPolicy:
- description: |-
- prefixPolicy is an optional field that configures how a prefix should be
- applied to the value of the JWT claim specified in the 'claim' field.
-
- Allowed values are 'Prefix', 'NoPrefix', and omitted (not provided or an empty string).
-
- When set to 'Prefix', the value specified in the prefix field will be
- prepended to the value of the JWT claim.
- The prefix field must be set when prefixPolicy is 'Prefix'.
-
- When set to 'NoPrefix', no prefix will be prepended to the value
- of the JWT claim.
-
- When omitted, this means no opinion and the platform is left to choose
- any prefixes that are applied which is subject to change over time.
- Currently, the platform prepends `{issuerURL}#` to the value of the JWT claim
- when the claim is not 'email'.
- As an example, consider the following scenario:
- `prefix` is unset, `issuerURL` is set to `https://myoidc.tld`,
- the JWT claims include "username":"userA" and "email":"userA@myoidc.tld",
- and `claim` is set to:
- - "username": the mapped value will be "https://myoidc.tld#userA"
- - "email": the mapped value will be "userA@myoidc.tld"
- enum:
- - ""
- - NoPrefix
- - Prefix
- type: string
- required:
- - claim
- type: object
- x-kubernetes-validations:
- - message: prefix must be set if prefixPolicy is 'Prefix',
- but must remain unset otherwise
- rule: 'has(self.prefixPolicy) && self.prefixPolicy ==
- ''Prefix'' ? (has(self.prefix) && size(self.prefix.prefixString)
- > 0) : !has(self.prefix)'
- type: object
- claimValidationRules:
- description: |-
- claimValidationRules is an optional field that configures the rules to
- be used by the Kubernetes API server for validating the claims in a JWT
- token issued by the identity provider.
-
- Validation rules are joined via an AND operation.
- items:
- properties:
- requiredClaim:
- description: |-
- requiredClaim is an optional field that configures the required claim
- and value that the Kubernetes API server will use to validate if an incoming
- JWT is valid for this identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the name of the required claim.
- When taken from the JWT claims, claim must be a string value.
-
- claim must not be an empty string ("").
- minLength: 1
- type: string
- requiredValue:
- description: |-
- requiredValue is a required field that configures the value that 'claim' must
- have when taken from the incoming JWT claims.
- If the value in the JWT claims does not match, the token
- will be rejected for authentication.
-
- requiredValue must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - claim
- - requiredValue
- type: object
- type:
- default: RequiredClaim
- description: |-
- type is an optional field that configures the type of the validation rule.
-
- Allowed values are 'RequiredClaim' and omitted (not provided or an empty string).
-
- When set to 'RequiredClaim', the Kubernetes API server
- will be configured to validate that the incoming JWT
- contains the required claim and that its value matches
- the required value.
-
- Defaults to 'RequiredClaim'.
- enum:
- - RequiredClaim
- type: string
- type: object
- type: array
- x-kubernetes-list-type: atomic
- issuer:
- description: |-
- issuer is a required field that configures how the platform interacts
- with the identity provider and how tokens issued from the identity provider
- are evaluated by the Kubernetes API server.
- properties:
- audiences:
- description: |-
- audiences is a required field that configures the acceptable audiences
- the JWT token, issued by the identity provider, must be issued to.
- At least one of the entries must match the 'aud' claim in the JWT token.
-
- audiences must contain at least one entry and must not exceed ten entries.
- items:
- minLength: 1
- type: string
- maxItems: 10
- minItems: 1
- type: array
- x-kubernetes-list-type: set
- issuerCertificateAuthority:
- description: |-
- issuerCertificateAuthority is an optional field that configures the
- certificate authority, used by the Kubernetes API server, to validate
- the connection to the identity provider when fetching discovery information.
-
- When not specified, the system trust is used.
-
- When specified, it must reference a ConfigMap in the openshift-config
- namespace containing the PEM-encoded CA certificates under the 'ca-bundle.crt'
- key in the data field of the ConfigMap.
- properties:
- name:
- description: name is the metadata.name of the referenced
- config map
- type: string
- required:
- - name
- type: object
- issuerURL:
- description: |-
- issuerURL is a required field that configures the URL used to issue tokens
- by the identity provider.
- The Kubernetes API server determines how authentication tokens should be handled
- by matching the 'iss' claim in the JWT to the issuerURL of configured identity providers.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- required:
- - audiences
- - issuerURL
- type: object
- name:
- description: |-
- name is a required field that configures the unique human-readable identifier
- associated with the identity provider.
- It is used to distinguish between multiple identity providers
- and has no impact on token validation or authentication mechanics.
-
- name must not be an empty string ("").
- minLength: 1
- type: string
- oidcClients:
- description: |-
- oidcClients is an optional field that configures how on-cluster,
- platform clients should request tokens from the identity provider.
- oidcClients must not exceed 20 entries and entries must have unique namespace/name pairs.
- items:
- description: |-
- OIDCClientConfig configures how platform clients
- interact with identity providers as an authentication
- method
- properties:
- clientID:
- description: |-
- clientID is a required field that configures the client identifier, from
- the identity provider, that the platform component uses for authentication
- requests made to the identity provider.
- The identity provider must accept this identifier for platform components
- to be able to use the identity provider as an authentication mode.
-
- clientID must not be an empty string ("").
- minLength: 1
- type: string
- clientSecret:
- description: |-
- clientSecret is an optional field that configures the client secret used
- by the platform component when making authentication requests to the identity provider.
-
- When not specified, no client secret will be used when making authentication requests
- to the identity provider.
-
- When specified, clientSecret references a Secret in the 'openshift-config'
- namespace that contains the client secret in the 'clientSecret' key of the '.data' field.
- The client secret will be used when making authentication requests to the identity provider.
-
- Public clients do not require a client secret but private
- clients do require a client secret to work with the identity provider.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component being configured to use the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component being configured to use the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- extraScopes:
- description: |-
- extraScopes is an optional field that configures the extra scopes that should
- be requested by the platform component when making authentication requests to the
- identity provider.
- This is useful if you have configured claim mappings that requires specific
- scopes to be requested beyond the standard OIDC scopes.
-
- When omitted, no additional scopes are requested.
- items:
- type: string
- type: array
- x-kubernetes-list-type: set
- required:
- - clientID
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- required:
- - issuer
- - name
- type: object
- maxItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- serviceAccountIssuer:
- description: |-
- serviceAccountIssuer is the identifier of the bound service account token
- issuer.
- The default is https://kubernetes.default.svc
- WARNING: Updating this field will not result in immediate invalidation of all bound tokens with the
- previous issuer value. Instead, the tokens issued by previous service account issuer will continue to
- be trusted for a time period chosen by the platform (currently set to 24h).
- This time period is subject to change over time.
- This allows internal components to transition to use new service account issuer without service distruption.
- type: string
- type:
- description: |-
- type identifies the cluster managed, user facing authentication mode in use.
- Specifically, it manages the component that responds to login attempts.
- The default is IntegratedOAuth.
- enum:
- - ""
- - None
- - IntegratedOAuth
- - OIDC
- type: string
- webhookTokenAuthenticator:
- description: |-
- webhookTokenAuthenticator configures a remote token reviewer.
- These remote authentication webhooks can be used to verify bearer tokens
- via the tokenreviews.authentication.k8s.io REST API. This is required to
- honor bearer tokens that are provisioned by an external authentication service.
-
- Can only be set if "Type" is set to "None".
- properties:
- kubeConfig:
- description: |-
- kubeConfig references a secret that contains kube config file data which
- describes how to access the remote webhook service.
- The namespace for the referenced secret is openshift-config.
-
- For further details, see:
-
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
-
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- properties:
- name:
- description: name is the metadata.name of the referenced secret
- type: string
- required:
- - name
- type: object
- required:
- - kubeConfig
- type: object
- webhookTokenAuthenticators:
- description: webhookTokenAuthenticators is DEPRECATED, setting it
- has no effect.
- items:
- description: |-
- deprecatedWebhookTokenAuthenticator holds the necessary configuration options for a remote token authenticator.
- It's the same as WebhookTokenAuthenticator but it's missing the 'required' validation on KubeConfig field.
- properties:
- kubeConfig:
- description: |-
- kubeConfig contains kube config file data which describes how to access the remote webhook service.
- For further details, see:
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- The namespace for this secret is determined by the point of use.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- type: object
- type: array
- x-kubernetes-list-type: atomic
- type: object
- status:
- description: status holds observed values from the cluster. They may not
- be overridden.
- properties:
- integratedOAuthMetadata:
- description: |-
- integratedOAuthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for the in-cluster integrated OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- This contains the observed value based on cluster state.
- An explicitly set value in spec.oauthMetadata has precedence over this field.
- This field has no meaning if authentication spec.type is not set to IntegratedOAuth.
- The key "oauthMetadata" is used to locate the data.
- If the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config-managed.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcClients:
- description: |-
- oidcClients is where participating operators place the current OIDC client status
- for OIDC clients that can be customized by the cluster-admin.
- items:
- description: |-
- OIDCClientStatus represents the current state
- of platform components and how they interact with
- the configured identity providers.
- properties:
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component using the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component using the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- conditions:
- description: |-
- conditions are used to communicate the state of the `oidcClients` entry.
-
- Supported conditions include Available, Degraded and Progressing.
-
- If Available is true, the component is successfully using the configured client.
- If Degraded is true, that means something has gone wrong trying to handle the client configuration.
- If Progressing is true, that means the component is taking some action related to the `oidcClients` entry.
- items:
- description: Condition contains details for one aspect of
- the current state of this API Resource.
- properties:
- lastTransitionTime:
- description: |-
- lastTransitionTime is the last time the condition transitioned from one status to another.
- This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
- format: date-time
- type: string
- message:
- description: |-
- message is a human readable message indicating details about the transition.
- This may be an empty string.
- maxLength: 32768
- type: string
- observedGeneration:
- description: |-
- observedGeneration represents the .metadata.generation that the condition was set based upon.
- For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
- with respect to the current state of the instance.
- format: int64
- minimum: 0
- type: integer
- reason:
- description: |-
- reason contains a programmatic identifier indicating the reason for the condition's last transition.
- Producers of specific condition types may define expected values and meanings for this field,
- and whether the values are considered a guaranteed API.
- The value should be a CamelCase string.
- This field may not be empty.
- maxLength: 1024
- minLength: 1
- pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
- type: string
- status:
- description: status of the condition, one of True, False,
- Unknown.
- enum:
- - "True"
- - "False"
- - Unknown
- type: string
- type:
- description: type of condition in CamelCase or in foo.example.com/CamelCase.
- maxLength: 316
- pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
- type: string
- required:
- - lastTransitionTime
- - message
- - reason
- - status
- - type
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - type
- x-kubernetes-list-type: map
- consumingUsers:
- description: |-
- consumingUsers is an optional list of ServiceAccounts requiring
- read permissions on the `clientSecret` secret.
-
- consumingUsers must not exceed 5 entries.
- items:
- description: ConsumingUser is an alias for string which we
- add validation to. Currently only service accounts are supported.
- maxLength: 512
- minLength: 1
- pattern: ^system:serviceaccount:[a-z0-9]([-a-z0-9]*[a-z0-9])?:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
- type: string
- maxItems: 5
- type: array
- x-kubernetes-list-type: set
- currentOIDCClients:
- description: |-
- currentOIDCClients is an optional list of clients that the component is currently using.
- Entries must have unique issuerURL/clientID pairs.
- items:
- description: |-
- OIDCClientReference is a reference to a platform component
- client configuration.
- properties:
- clientID:
- description: |-
- clientID is a required field that specifies the client identifier, from
- the identity provider, that the platform component is using for authentication
- requests made to the identity provider.
-
- clientID must not be empty.
- minLength: 1
- type: string
- issuerURL:
- description: |-
- issuerURL is a required field that specifies the URL of the identity
- provider that this client is configured to make requests against.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- oidcProviderName:
- description: |-
- oidcProviderName is a required reference to the 'name' of the identity provider
- configured in 'oidcProviders' that this client is associated with.
-
- oidcProviderName must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - clientID
- - issuerURL
- - oidcProviderName
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - issuerURL
- - clientID
- x-kubernetes-list-type: map
- required:
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- type: object
- required:
- - spec
- type: object
- x-kubernetes-validations:
- - message: all oidcClients in the oidcProviders must match their componentName
- and componentNamespace to either a previously configured oidcClient or
- they must exist in the status.oidcClients
- rule: '!has(self.spec.oidcProviders) || self.spec.oidcProviders.all(p, !has(p.oidcClients)
- || p.oidcClients.all(specC, self.status.oidcClients.exists(statusC, statusC.componentNamespace
- == specC.componentNamespace && statusC.componentName == specC.componentName)
- || (has(oldSelf.spec.oidcProviders) && oldSelf.spec.oidcProviders.exists(oldP,
- oldP.name == p.name && has(oldP.oidcClients) && oldP.oidcClients.exists(oldC,
- oldC.componentNamespace == specC.componentNamespace && oldC.componentName
- == specC.componentName)))))'
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-DevPreviewNoUpgrade.crd.yaml b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-DevPreviewNoUpgrade.crd.yaml
deleted file mode 100644
index 76ad704a153..00000000000
--- a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-DevPreviewNoUpgrade.crd.yaml
+++ /dev/null
@@ -1,850 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- api-approved.openshift.io: https://github.com/openshift/api/pull/470
- api.openshift.io/merged-by-featuregates: "true"
- include.release.openshift.io/ibm-cloud-managed: "true"
- release.openshift.io/bootstrap-required: "true"
- release.openshift.io/feature-set: DevPreviewNoUpgrade
- name: authentications.config.openshift.io
-spec:
- group: config.openshift.io
- names:
- kind: Authentication
- listKind: AuthenticationList
- plural: authentications
- singular: authentication
- scope: Cluster
- versions:
- - name: v1
- schema:
- openAPIV3Schema:
- description: |-
- Authentication specifies cluster-wide settings for authentication (like OAuth and
- webhook token authenticators). The canonical name of an instance is `cluster`.
-
- Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: spec holds user settable values for configuration
- properties:
- oauthMetadata:
- description: |-
- oauthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for an external OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- If oauthMetadata.name is non-empty, this value has precedence
- over any metadata reference stored in status.
- The key "oauthMetadata" is used to locate the data.
- If specified and the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcProviders:
- description: |-
- oidcProviders are OIDC identity providers that can issue tokens
- for this cluster
- Can only be set if "Type" is set to "OIDC".
-
- At most one provider can be configured.
- items:
- properties:
- claimMappings:
- description: |-
- claimMappings is an optional field that configures the rules to be used by
- the Kubernetes API server for translating claims in a JWT token, issued
- by the identity provider, to a cluster identity.
- properties:
- extra:
- description: |-
- extra is an optional field for configuring the mappings
- used to construct the extra attribute for the cluster identity.
- When omitted, no extra attributes will be present on the cluster identity.
- key values for extra mappings must be unique.
- A maximum of 64 extra attribute mappings may be provided.
- items:
- description: |-
- ExtraMapping allows specifying a key and CEL expression
- to evaluate the keys' value. It is used to create additional
- mappings and attributes added to a cluster identity from
- a provided authentication token.
- properties:
- key:
- description: |-
- key is a required field that specifies the string
- to use as the extra attribute key.
-
- key must be a domain-prefix path (e.g 'example.org/foo').
- key must not exceed 510 characters in length.
- key must contain the '/' character, separating the domain and path characters.
- key must not be empty.
-
- The domain portion of the key (string of characters prior to the '/') must be a valid RFC1123 subdomain.
- It must not exceed 253 characters in length.
- It must start and end with an alphanumeric character.
- It must only contain lower case alphanumeric characters and '-' or '.'.
- It must not use the reserved domains, or be subdomains of, "kubernetes.io", "k8s.io", and "openshift.io".
-
- The path portion of the key (string of characters after the '/') must not be empty and must consist of at least one
- alphanumeric character, percent-encoded octets, '-', '.', '_', '~', '!', '$', '&', ''', '(', ')', '*', '+', ',', ';', '=', and ':'.
- It must not exceed 256 characters in length.
- maxLength: 510
- minLength: 1
- type: string
- x-kubernetes-validations:
- - message: key must contain the '/' character
- rule: self.contains('/')
- - message: the domain of the key must consist of only
- lower case alphanumeric characters, '-' or '.',
- and must start and end with an alphanumeric character
- rule: self.split('/', 2)[0].matches("^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$")
- - message: the domain of the key must not exceed 253
- characters in length
- rule: self.split('/', 2)[0].size() <= 253
- - message: the domain 'kubernetes.io' is reserved
- for Kubernetes use
- rule: self.split('/', 2)[0] != 'kubernetes.io'
- - message: the subdomains '*.kubernetes.io' are reserved
- for Kubernetes use
- rule: '!self.split(''/'', 2)[0].endsWith(''.kubernetes.io'')'
- - message: the domain 'k8s.io' is reserved for Kubernetes
- use
- rule: self.split('/', 2)[0] != 'k8s.io'
- - message: the subdomains '*.k8s.io' are reserved
- for Kubernetes use
- rule: '!self.split(''/'', 2)[0].endsWith(''.k8s.io'')'
- - message: the domain 'openshift.io' is reserved for
- OpenShift use
- rule: self.split('/', 2)[0] != 'openshift.io'
- - message: the subdomains '*.openshift.io' are reserved
- for OpenShift use
- rule: '!self.split(''/'', 2)[0].endsWith(''.openshift.io'')'
- - message: the path of the key must not be empty and
- must consist of at least one alphanumeric character,
- percent-encoded octets, apostrophe, '-', '.',
- '_', '~', '!', '$', '&', '(', ')', '*', '+', ',',
- ';', '=', and ':'
- rule: self.split('/', 2)[1].matches('[A-Za-z0-9/\\-._~%!$&\'()*+;=:]+')
- - message: the path of the key must not exceed 256
- characters in length
- rule: self.split('/', 2)[1].size() <= 256
- valueExpression:
- description: |-
- valueExpression is a required field to specify the CEL expression to extract
- the extra attribute value from a JWT token's claims.
- valueExpression must produce a string or string array value.
- "", [], and null are treated as the extra mapping not being present.
- Empty string values within an array are filtered out.
-
- CEL expressions have access to the token claims
- through a CEL variable, 'claims'.
- 'claims' is a map of claim names to claim values.
- For example, the 'sub' claim value can be accessed as 'claims.sub'.
- Nested claims can be accessed using dot notation ('claims.foo.bar').
-
- valueExpression must not exceed 4096 characters in length.
- valueExpression must not be empty.
- maxLength: 4096
- minLength: 1
- type: string
- required:
- - key
- - valueExpression
- type: object
- maxItems: 64
- type: array
- x-kubernetes-list-map-keys:
- - key
- x-kubernetes-list-type: map
- groups:
- description: |-
- groups is an optional field that configures how the groups of a cluster identity
- should be constructed from the claims in a JWT token issued
- by the identity provider.
- When referencing a claim, if the claim is present in the JWT
- token, its value must be a list of groups separated by a comma (',').
- For example - '"example"' and '"exampleOne", "exampleTwo", "exampleThree"' are valid claim values.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix is an optional field that configures the prefix that will be
- applied to the cluster identity attribute during the process of mapping
- JWT claims to cluster identity attributes.
-
- When omitted (""), no prefix is applied to the cluster identity attribute.
-
- Example: if `prefix` is set to "myoidc:" and the `claim` in JWT contains
- an array of strings "a", "b" and "c", the mapping will result in an
- array of string "myoidc:a", "myoidc:b" and "myoidc:c".
- type: string
- required:
- - claim
- type: object
- uid:
- description: |-
- uid is an optional field for configuring the claim mapping
- used to construct the uid for the cluster identity.
-
- When using uid.claim to specify the claim it must be a single string value.
- When using uid.expression the expression must result in a single string value.
-
- When omitted, this means the user has no opinion and the platform
- is left to choose a default, which is subject to change over time.
- The current default is to use the 'sub' claim.
- properties:
- claim:
- description: |-
- claim is an optional field for specifying the
- JWT token claim that is used in the mapping.
- The value of this claim will be assigned to
- the field in which this mapping is associated.
-
- Precisely one of claim or expression must be set.
- claim must not be specified when expression is set.
- When specified, claim must be at least 1 character in length
- and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- expression:
- description: |-
- expression is an optional field for specifying a
- CEL expression that produces a string value from
- JWT token claims.
-
- CEL expressions have access to the token claims
- through a CEL variable, 'claims'.
- 'claims' is a map of claim names to claim values.
- For example, the 'sub' claim value can be accessed as 'claims.sub'.
- Nested claims can be accessed using dot notation ('claims.foo.bar').
-
- Precisely one of claim or expression must be set.
- expression must not be specified when claim is set.
- When specified, expression must be at least 1 character in length
- and must not exceed 4096 characters in length.
- maxLength: 4096
- minLength: 1
- type: string
- type: object
- x-kubernetes-validations:
- - message: precisely one of claim or expression must be
- set
- rule: 'has(self.claim) ? !has(self.expression) : has(self.expression)'
- username:
- description: |-
- username is an optional field that configures how the username of a cluster identity
- should be constructed from the claims in a JWT token issued by the identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix configures the prefix that should be prepended to the value
- of the JWT claim.
-
- prefix must be set when prefixPolicy is set to 'Prefix' and must be unset otherwise.
- properties:
- prefixString:
- description: |-
- prefixString is a required field that configures the prefix that will
- be applied to cluster identity username attribute
- during the process of mapping JWT claims to cluster identity attributes.
-
- prefixString must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - prefixString
- type: object
- prefixPolicy:
- description: |-
- prefixPolicy is an optional field that configures how a prefix should be
- applied to the value of the JWT claim specified in the 'claim' field.
-
- Allowed values are 'Prefix', 'NoPrefix', and omitted (not provided or an empty string).
-
- When set to 'Prefix', the value specified in the prefix field will be
- prepended to the value of the JWT claim.
- The prefix field must be set when prefixPolicy is 'Prefix'.
-
- When set to 'NoPrefix', no prefix will be prepended to the value
- of the JWT claim.
-
- When omitted, this means no opinion and the platform is left to choose
- any prefixes that are applied which is subject to change over time.
- Currently, the platform prepends `{issuerURL}#` to the value of the JWT claim
- when the claim is not 'email'.
- As an example, consider the following scenario:
- `prefix` is unset, `issuerURL` is set to `https://myoidc.tld`,
- the JWT claims include "username":"userA" and "email":"userA@myoidc.tld",
- and `claim` is set to:
- - "username": the mapped value will be "https://myoidc.tld#userA"
- - "email": the mapped value will be "userA@myoidc.tld"
- enum:
- - ""
- - NoPrefix
- - Prefix
- type: string
- required:
- - claim
- type: object
- x-kubernetes-validations:
- - message: prefix must be set if prefixPolicy is 'Prefix',
- but must remain unset otherwise
- rule: 'has(self.prefixPolicy) && self.prefixPolicy ==
- ''Prefix'' ? (has(self.prefix) && size(self.prefix.prefixString)
- > 0) : !has(self.prefix)'
- type: object
- claimValidationRules:
- description: |-
- claimValidationRules is an optional field that configures the rules to
- be used by the Kubernetes API server for validating the claims in a JWT
- token issued by the identity provider.
-
- Validation rules are joined via an AND operation.
- items:
- properties:
- requiredClaim:
- description: |-
- requiredClaim is an optional field that configures the required claim
- and value that the Kubernetes API server will use to validate if an incoming
- JWT is valid for this identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the name of the required claim.
- When taken from the JWT claims, claim must be a string value.
-
- claim must not be an empty string ("").
- minLength: 1
- type: string
- requiredValue:
- description: |-
- requiredValue is a required field that configures the value that 'claim' must
- have when taken from the incoming JWT claims.
- If the value in the JWT claims does not match, the token
- will be rejected for authentication.
-
- requiredValue must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - claim
- - requiredValue
- type: object
- type:
- default: RequiredClaim
- description: |-
- type is an optional field that configures the type of the validation rule.
-
- Allowed values are 'RequiredClaim' and omitted (not provided or an empty string).
-
- When set to 'RequiredClaim', the Kubernetes API server
- will be configured to validate that the incoming JWT
- contains the required claim and that its value matches
- the required value.
-
- Defaults to 'RequiredClaim'.
- enum:
- - RequiredClaim
- type: string
- type: object
- type: array
- x-kubernetes-list-type: atomic
- issuer:
- description: |-
- issuer is a required field that configures how the platform interacts
- with the identity provider and how tokens issued from the identity provider
- are evaluated by the Kubernetes API server.
- properties:
- audiences:
- description: |-
- audiences is a required field that configures the acceptable audiences
- the JWT token, issued by the identity provider, must be issued to.
- At least one of the entries must match the 'aud' claim in the JWT token.
-
- audiences must contain at least one entry and must not exceed ten entries.
- items:
- minLength: 1
- type: string
- maxItems: 10
- minItems: 1
- type: array
- x-kubernetes-list-type: set
- issuerCertificateAuthority:
- description: |-
- issuerCertificateAuthority is an optional field that configures the
- certificate authority, used by the Kubernetes API server, to validate
- the connection to the identity provider when fetching discovery information.
-
- When not specified, the system trust is used.
-
- When specified, it must reference a ConfigMap in the openshift-config
- namespace containing the PEM-encoded CA certificates under the 'ca-bundle.crt'
- key in the data field of the ConfigMap.
- properties:
- name:
- description: name is the metadata.name of the referenced
- config map
- type: string
- required:
- - name
- type: object
- issuerURL:
- description: |-
- issuerURL is a required field that configures the URL used to issue tokens
- by the identity provider.
- The Kubernetes API server determines how authentication tokens should be handled
- by matching the 'iss' claim in the JWT to the issuerURL of configured identity providers.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- required:
- - audiences
- - issuerURL
- type: object
- name:
- description: |-
- name is a required field that configures the unique human-readable identifier
- associated with the identity provider.
- It is used to distinguish between multiple identity providers
- and has no impact on token validation or authentication mechanics.
-
- name must not be an empty string ("").
- minLength: 1
- type: string
- oidcClients:
- description: |-
- oidcClients is an optional field that configures how on-cluster,
- platform clients should request tokens from the identity provider.
- oidcClients must not exceed 20 entries and entries must have unique namespace/name pairs.
- items:
- description: |-
- OIDCClientConfig configures how platform clients
- interact with identity providers as an authentication
- method
- properties:
- clientID:
- description: |-
- clientID is a required field that configures the client identifier, from
- the identity provider, that the platform component uses for authentication
- requests made to the identity provider.
- The identity provider must accept this identifier for platform components
- to be able to use the identity provider as an authentication mode.
-
- clientID must not be an empty string ("").
- minLength: 1
- type: string
- clientSecret:
- description: |-
- clientSecret is an optional field that configures the client secret used
- by the platform component when making authentication requests to the identity provider.
-
- When not specified, no client secret will be used when making authentication requests
- to the identity provider.
-
- When specified, clientSecret references a Secret in the 'openshift-config'
- namespace that contains the client secret in the 'clientSecret' key of the '.data' field.
- The client secret will be used when making authentication requests to the identity provider.
-
- Public clients do not require a client secret but private
- clients do require a client secret to work with the identity provider.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component being configured to use the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component being configured to use the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- extraScopes:
- description: |-
- extraScopes is an optional field that configures the extra scopes that should
- be requested by the platform component when making authentication requests to the
- identity provider.
- This is useful if you have configured claim mappings that requires specific
- scopes to be requested beyond the standard OIDC scopes.
-
- When omitted, no additional scopes are requested.
- items:
- type: string
- type: array
- x-kubernetes-list-type: set
- required:
- - clientID
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- required:
- - issuer
- - name
- type: object
- maxItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- serviceAccountIssuer:
- description: |-
- serviceAccountIssuer is the identifier of the bound service account token
- issuer.
- The default is https://kubernetes.default.svc
- WARNING: Updating this field will not result in immediate invalidation of all bound tokens with the
- previous issuer value. Instead, the tokens issued by previous service account issuer will continue to
- be trusted for a time period chosen by the platform (currently set to 24h).
- This time period is subject to change over time.
- This allows internal components to transition to use new service account issuer without service distruption.
- type: string
- type:
- description: |-
- type identifies the cluster managed, user facing authentication mode in use.
- Specifically, it manages the component that responds to login attempts.
- The default is IntegratedOAuth.
- enum:
- - ""
- - None
- - IntegratedOAuth
- - OIDC
- type: string
- webhookTokenAuthenticator:
- description: |-
- webhookTokenAuthenticator configures a remote token reviewer.
- These remote authentication webhooks can be used to verify bearer tokens
- via the tokenreviews.authentication.k8s.io REST API. This is required to
- honor bearer tokens that are provisioned by an external authentication service.
-
- Can only be set if "Type" is set to "None".
- properties:
- kubeConfig:
- description: |-
- kubeConfig references a secret that contains kube config file data which
- describes how to access the remote webhook service.
- The namespace for the referenced secret is openshift-config.
-
- For further details, see:
-
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
-
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- properties:
- name:
- description: name is the metadata.name of the referenced secret
- type: string
- required:
- - name
- type: object
- required:
- - kubeConfig
- type: object
- webhookTokenAuthenticators:
- description: webhookTokenAuthenticators is DEPRECATED, setting it
- has no effect.
- items:
- description: |-
- deprecatedWebhookTokenAuthenticator holds the necessary configuration options for a remote token authenticator.
- It's the same as WebhookTokenAuthenticator but it's missing the 'required' validation on KubeConfig field.
- properties:
- kubeConfig:
- description: |-
- kubeConfig contains kube config file data which describes how to access the remote webhook service.
- For further details, see:
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- The namespace for this secret is determined by the point of use.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- type: object
- type: array
- x-kubernetes-list-type: atomic
- type: object
- status:
- description: status holds observed values from the cluster. They may not
- be overridden.
- properties:
- integratedOAuthMetadata:
- description: |-
- integratedOAuthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for the in-cluster integrated OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- This contains the observed value based on cluster state.
- An explicitly set value in spec.oauthMetadata has precedence over this field.
- This field has no meaning if authentication spec.type is not set to IntegratedOAuth.
- The key "oauthMetadata" is used to locate the data.
- If the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config-managed.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcClients:
- description: |-
- oidcClients is where participating operators place the current OIDC client status
- for OIDC clients that can be customized by the cluster-admin.
- items:
- description: |-
- OIDCClientStatus represents the current state
- of platform components and how they interact with
- the configured identity providers.
- properties:
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component using the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component using the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- conditions:
- description: |-
- conditions are used to communicate the state of the `oidcClients` entry.
-
- Supported conditions include Available, Degraded and Progressing.
-
- If Available is true, the component is successfully using the configured client.
- If Degraded is true, that means something has gone wrong trying to handle the client configuration.
- If Progressing is true, that means the component is taking some action related to the `oidcClients` entry.
- items:
- description: Condition contains details for one aspect of
- the current state of this API Resource.
- properties:
- lastTransitionTime:
- description: |-
- lastTransitionTime is the last time the condition transitioned from one status to another.
- This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
- format: date-time
- type: string
- message:
- description: |-
- message is a human readable message indicating details about the transition.
- This may be an empty string.
- maxLength: 32768
- type: string
- observedGeneration:
- description: |-
- observedGeneration represents the .metadata.generation that the condition was set based upon.
- For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
- with respect to the current state of the instance.
- format: int64
- minimum: 0
- type: integer
- reason:
- description: |-
- reason contains a programmatic identifier indicating the reason for the condition's last transition.
- Producers of specific condition types may define expected values and meanings for this field,
- and whether the values are considered a guaranteed API.
- The value should be a CamelCase string.
- This field may not be empty.
- maxLength: 1024
- minLength: 1
- pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
- type: string
- status:
- description: status of the condition, one of True, False,
- Unknown.
- enum:
- - "True"
- - "False"
- - Unknown
- type: string
- type:
- description: type of condition in CamelCase or in foo.example.com/CamelCase.
- maxLength: 316
- pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
- type: string
- required:
- - lastTransitionTime
- - message
- - reason
- - status
- - type
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - type
- x-kubernetes-list-type: map
- consumingUsers:
- description: |-
- consumingUsers is an optional list of ServiceAccounts requiring
- read permissions on the `clientSecret` secret.
-
- consumingUsers must not exceed 5 entries.
- items:
- description: ConsumingUser is an alias for string which we
- add validation to. Currently only service accounts are supported.
- maxLength: 512
- minLength: 1
- pattern: ^system:serviceaccount:[a-z0-9]([-a-z0-9]*[a-z0-9])?:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
- type: string
- maxItems: 5
- type: array
- x-kubernetes-list-type: set
- currentOIDCClients:
- description: |-
- currentOIDCClients is an optional list of clients that the component is currently using.
- Entries must have unique issuerURL/clientID pairs.
- items:
- description: |-
- OIDCClientReference is a reference to a platform component
- client configuration.
- properties:
- clientID:
- description: |-
- clientID is a required field that specifies the client identifier, from
- the identity provider, that the platform component is using for authentication
- requests made to the identity provider.
-
- clientID must not be empty.
- minLength: 1
- type: string
- issuerURL:
- description: |-
- issuerURL is a required field that specifies the URL of the identity
- provider that this client is configured to make requests against.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- oidcProviderName:
- description: |-
- oidcProviderName is a required reference to the 'name' of the identity provider
- configured in 'oidcProviders' that this client is associated with.
-
- oidcProviderName must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - clientID
- - issuerURL
- - oidcProviderName
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - issuerURL
- - clientID
- x-kubernetes-list-type: map
- required:
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- type: object
- required:
- - spec
- type: object
- x-kubernetes-validations:
- - message: all oidcClients in the oidcProviders must match their componentName
- and componentNamespace to either a previously configured oidcClient or
- they must exist in the status.oidcClients
- rule: '!has(self.spec.oidcProviders) || self.spec.oidcProviders.all(p, !has(p.oidcClients)
- || p.oidcClients.all(specC, self.status.oidcClients.exists(statusC, statusC.componentNamespace
- == specC.componentNamespace && statusC.componentName == specC.componentName)
- || (has(oldSelf.spec.oidcProviders) && oldSelf.spec.oidcProviders.exists(oldP,
- oldP.name == p.name && has(oldP.oidcClients) && oldP.oidcClients.exists(oldC,
- oldC.componentNamespace == specC.componentNamespace && oldC.componentName
- == specC.componentName)))))'
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-TechPreviewNoUpgrade.crd.yaml b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-TechPreviewNoUpgrade.crd.yaml
deleted file mode 100644
index 21ab3c98122..00000000000
--- a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-TechPreviewNoUpgrade.crd.yaml
+++ /dev/null
@@ -1,850 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- api-approved.openshift.io: https://github.com/openshift/api/pull/470
- api.openshift.io/merged-by-featuregates: "true"
- include.release.openshift.io/ibm-cloud-managed: "true"
- release.openshift.io/bootstrap-required: "true"
- release.openshift.io/feature-set: TechPreviewNoUpgrade
- name: authentications.config.openshift.io
-spec:
- group: config.openshift.io
- names:
- kind: Authentication
- listKind: AuthenticationList
- plural: authentications
- singular: authentication
- scope: Cluster
- versions:
- - name: v1
- schema:
- openAPIV3Schema:
- description: |-
- Authentication specifies cluster-wide settings for authentication (like OAuth and
- webhook token authenticators). The canonical name of an instance is `cluster`.
-
- Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: spec holds user settable values for configuration
- properties:
- oauthMetadata:
- description: |-
- oauthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for an external OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- If oauthMetadata.name is non-empty, this value has precedence
- over any metadata reference stored in status.
- The key "oauthMetadata" is used to locate the data.
- If specified and the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcProviders:
- description: |-
- oidcProviders are OIDC identity providers that can issue tokens
- for this cluster
- Can only be set if "Type" is set to "OIDC".
-
- At most one provider can be configured.
- items:
- properties:
- claimMappings:
- description: |-
- claimMappings is an optional field that configures the rules to be used by
- the Kubernetes API server for translating claims in a JWT token, issued
- by the identity provider, to a cluster identity.
- properties:
- extra:
- description: |-
- extra is an optional field for configuring the mappings
- used to construct the extra attribute for the cluster identity.
- When omitted, no extra attributes will be present on the cluster identity.
- key values for extra mappings must be unique.
- A maximum of 64 extra attribute mappings may be provided.
- items:
- description: |-
- ExtraMapping allows specifying a key and CEL expression
- to evaluate the keys' value. It is used to create additional
- mappings and attributes added to a cluster identity from
- a provided authentication token.
- properties:
- key:
- description: |-
- key is a required field that specifies the string
- to use as the extra attribute key.
-
- key must be a domain-prefix path (e.g 'example.org/foo').
- key must not exceed 510 characters in length.
- key must contain the '/' character, separating the domain and path characters.
- key must not be empty.
-
- The domain portion of the key (string of characters prior to the '/') must be a valid RFC1123 subdomain.
- It must not exceed 253 characters in length.
- It must start and end with an alphanumeric character.
- It must only contain lower case alphanumeric characters and '-' or '.'.
- It must not use the reserved domains, or be subdomains of, "kubernetes.io", "k8s.io", and "openshift.io".
-
- The path portion of the key (string of characters after the '/') must not be empty and must consist of at least one
- alphanumeric character, percent-encoded octets, '-', '.', '_', '~', '!', '$', '&', ''', '(', ')', '*', '+', ',', ';', '=', and ':'.
- It must not exceed 256 characters in length.
- maxLength: 510
- minLength: 1
- type: string
- x-kubernetes-validations:
- - message: key must contain the '/' character
- rule: self.contains('/')
- - message: the domain of the key must consist of only
- lower case alphanumeric characters, '-' or '.',
- and must start and end with an alphanumeric character
- rule: self.split('/', 2)[0].matches("^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$")
- - message: the domain of the key must not exceed 253
- characters in length
- rule: self.split('/', 2)[0].size() <= 253
- - message: the domain 'kubernetes.io' is reserved
- for Kubernetes use
- rule: self.split('/', 2)[0] != 'kubernetes.io'
- - message: the subdomains '*.kubernetes.io' are reserved
- for Kubernetes use
- rule: '!self.split(''/'', 2)[0].endsWith(''.kubernetes.io'')'
- - message: the domain 'k8s.io' is reserved for Kubernetes
- use
- rule: self.split('/', 2)[0] != 'k8s.io'
- - message: the subdomains '*.k8s.io' are reserved
- for Kubernetes use
- rule: '!self.split(''/'', 2)[0].endsWith(''.k8s.io'')'
- - message: the domain 'openshift.io' is reserved for
- OpenShift use
- rule: self.split('/', 2)[0] != 'openshift.io'
- - message: the subdomains '*.openshift.io' are reserved
- for OpenShift use
- rule: '!self.split(''/'', 2)[0].endsWith(''.openshift.io'')'
- - message: the path of the key must not be empty and
- must consist of at least one alphanumeric character,
- percent-encoded octets, apostrophe, '-', '.',
- '_', '~', '!', '$', '&', '(', ')', '*', '+', ',',
- ';', '=', and ':'
- rule: self.split('/', 2)[1].matches('[A-Za-z0-9/\\-._~%!$&\'()*+;=:]+')
- - message: the path of the key must not exceed 256
- characters in length
- rule: self.split('/', 2)[1].size() <= 256
- valueExpression:
- description: |-
- valueExpression is a required field to specify the CEL expression to extract
- the extra attribute value from a JWT token's claims.
- valueExpression must produce a string or string array value.
- "", [], and null are treated as the extra mapping not being present.
- Empty string values within an array are filtered out.
-
- CEL expressions have access to the token claims
- through a CEL variable, 'claims'.
- 'claims' is a map of claim names to claim values.
- For example, the 'sub' claim value can be accessed as 'claims.sub'.
- Nested claims can be accessed using dot notation ('claims.foo.bar').
-
- valueExpression must not exceed 4096 characters in length.
- valueExpression must not be empty.
- maxLength: 4096
- minLength: 1
- type: string
- required:
- - key
- - valueExpression
- type: object
- maxItems: 64
- type: array
- x-kubernetes-list-map-keys:
- - key
- x-kubernetes-list-type: map
- groups:
- description: |-
- groups is an optional field that configures how the groups of a cluster identity
- should be constructed from the claims in a JWT token issued
- by the identity provider.
- When referencing a claim, if the claim is present in the JWT
- token, its value must be a list of groups separated by a comma (',').
- For example - '"example"' and '"exampleOne", "exampleTwo", "exampleThree"' are valid claim values.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix is an optional field that configures the prefix that will be
- applied to the cluster identity attribute during the process of mapping
- JWT claims to cluster identity attributes.
-
- When omitted (""), no prefix is applied to the cluster identity attribute.
-
- Example: if `prefix` is set to "myoidc:" and the `claim` in JWT contains
- an array of strings "a", "b" and "c", the mapping will result in an
- array of string "myoidc:a", "myoidc:b" and "myoidc:c".
- type: string
- required:
- - claim
- type: object
- uid:
- description: |-
- uid is an optional field for configuring the claim mapping
- used to construct the uid for the cluster identity.
-
- When using uid.claim to specify the claim it must be a single string value.
- When using uid.expression the expression must result in a single string value.
-
- When omitted, this means the user has no opinion and the platform
- is left to choose a default, which is subject to change over time.
- The current default is to use the 'sub' claim.
- properties:
- claim:
- description: |-
- claim is an optional field for specifying the
- JWT token claim that is used in the mapping.
- The value of this claim will be assigned to
- the field in which this mapping is associated.
-
- Precisely one of claim or expression must be set.
- claim must not be specified when expression is set.
- When specified, claim must be at least 1 character in length
- and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- expression:
- description: |-
- expression is an optional field for specifying a
- CEL expression that produces a string value from
- JWT token claims.
-
- CEL expressions have access to the token claims
- through a CEL variable, 'claims'.
- 'claims' is a map of claim names to claim values.
- For example, the 'sub' claim value can be accessed as 'claims.sub'.
- Nested claims can be accessed using dot notation ('claims.foo.bar').
-
- Precisely one of claim or expression must be set.
- expression must not be specified when claim is set.
- When specified, expression must be at least 1 character in length
- and must not exceed 4096 characters in length.
- maxLength: 4096
- minLength: 1
- type: string
- type: object
- x-kubernetes-validations:
- - message: precisely one of claim or expression must be
- set
- rule: 'has(self.claim) ? !has(self.expression) : has(self.expression)'
- username:
- description: |-
- username is an optional field that configures how the username of a cluster identity
- should be constructed from the claims in a JWT token issued by the identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix configures the prefix that should be prepended to the value
- of the JWT claim.
-
- prefix must be set when prefixPolicy is set to 'Prefix' and must be unset otherwise.
- properties:
- prefixString:
- description: |-
- prefixString is a required field that configures the prefix that will
- be applied to cluster identity username attribute
- during the process of mapping JWT claims to cluster identity attributes.
-
- prefixString must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - prefixString
- type: object
- prefixPolicy:
- description: |-
- prefixPolicy is an optional field that configures how a prefix should be
- applied to the value of the JWT claim specified in the 'claim' field.
-
- Allowed values are 'Prefix', 'NoPrefix', and omitted (not provided or an empty string).
-
- When set to 'Prefix', the value specified in the prefix field will be
- prepended to the value of the JWT claim.
- The prefix field must be set when prefixPolicy is 'Prefix'.
-
- When set to 'NoPrefix', no prefix will be prepended to the value
- of the JWT claim.
-
- When omitted, this means no opinion and the platform is left to choose
- any prefixes that are applied which is subject to change over time.
- Currently, the platform prepends `{issuerURL}#` to the value of the JWT claim
- when the claim is not 'email'.
- As an example, consider the following scenario:
- `prefix` is unset, `issuerURL` is set to `https://myoidc.tld`,
- the JWT claims include "username":"userA" and "email":"userA@myoidc.tld",
- and `claim` is set to:
- - "username": the mapped value will be "https://myoidc.tld#userA"
- - "email": the mapped value will be "userA@myoidc.tld"
- enum:
- - ""
- - NoPrefix
- - Prefix
- type: string
- required:
- - claim
- type: object
- x-kubernetes-validations:
- - message: prefix must be set if prefixPolicy is 'Prefix',
- but must remain unset otherwise
- rule: 'has(self.prefixPolicy) && self.prefixPolicy ==
- ''Prefix'' ? (has(self.prefix) && size(self.prefix.prefixString)
- > 0) : !has(self.prefix)'
- type: object
- claimValidationRules:
- description: |-
- claimValidationRules is an optional field that configures the rules to
- be used by the Kubernetes API server for validating the claims in a JWT
- token issued by the identity provider.
-
- Validation rules are joined via an AND operation.
- items:
- properties:
- requiredClaim:
- description: |-
- requiredClaim is an optional field that configures the required claim
- and value that the Kubernetes API server will use to validate if an incoming
- JWT is valid for this identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the name of the required claim.
- When taken from the JWT claims, claim must be a string value.
-
- claim must not be an empty string ("").
- minLength: 1
- type: string
- requiredValue:
- description: |-
- requiredValue is a required field that configures the value that 'claim' must
- have when taken from the incoming JWT claims.
- If the value in the JWT claims does not match, the token
- will be rejected for authentication.
-
- requiredValue must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - claim
- - requiredValue
- type: object
- type:
- default: RequiredClaim
- description: |-
- type is an optional field that configures the type of the validation rule.
-
- Allowed values are 'RequiredClaim' and omitted (not provided or an empty string).
-
- When set to 'RequiredClaim', the Kubernetes API server
- will be configured to validate that the incoming JWT
- contains the required claim and that its value matches
- the required value.
-
- Defaults to 'RequiredClaim'.
- enum:
- - RequiredClaim
- type: string
- type: object
- type: array
- x-kubernetes-list-type: atomic
- issuer:
- description: |-
- issuer is a required field that configures how the platform interacts
- with the identity provider and how tokens issued from the identity provider
- are evaluated by the Kubernetes API server.
- properties:
- audiences:
- description: |-
- audiences is a required field that configures the acceptable audiences
- the JWT token, issued by the identity provider, must be issued to.
- At least one of the entries must match the 'aud' claim in the JWT token.
-
- audiences must contain at least one entry and must not exceed ten entries.
- items:
- minLength: 1
- type: string
- maxItems: 10
- minItems: 1
- type: array
- x-kubernetes-list-type: set
- issuerCertificateAuthority:
- description: |-
- issuerCertificateAuthority is an optional field that configures the
- certificate authority, used by the Kubernetes API server, to validate
- the connection to the identity provider when fetching discovery information.
-
- When not specified, the system trust is used.
-
- When specified, it must reference a ConfigMap in the openshift-config
- namespace containing the PEM-encoded CA certificates under the 'ca-bundle.crt'
- key in the data field of the ConfigMap.
- properties:
- name:
- description: name is the metadata.name of the referenced
- config map
- type: string
- required:
- - name
- type: object
- issuerURL:
- description: |-
- issuerURL is a required field that configures the URL used to issue tokens
- by the identity provider.
- The Kubernetes API server determines how authentication tokens should be handled
- by matching the 'iss' claim in the JWT to the issuerURL of configured identity providers.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- required:
- - audiences
- - issuerURL
- type: object
- name:
- description: |-
- name is a required field that configures the unique human-readable identifier
- associated with the identity provider.
- It is used to distinguish between multiple identity providers
- and has no impact on token validation or authentication mechanics.
-
- name must not be an empty string ("").
- minLength: 1
- type: string
- oidcClients:
- description: |-
- oidcClients is an optional field that configures how on-cluster,
- platform clients should request tokens from the identity provider.
- oidcClients must not exceed 20 entries and entries must have unique namespace/name pairs.
- items:
- description: |-
- OIDCClientConfig configures how platform clients
- interact with identity providers as an authentication
- method
- properties:
- clientID:
- description: |-
- clientID is a required field that configures the client identifier, from
- the identity provider, that the platform component uses for authentication
- requests made to the identity provider.
- The identity provider must accept this identifier for platform components
- to be able to use the identity provider as an authentication mode.
-
- clientID must not be an empty string ("").
- minLength: 1
- type: string
- clientSecret:
- description: |-
- clientSecret is an optional field that configures the client secret used
- by the platform component when making authentication requests to the identity provider.
-
- When not specified, no client secret will be used when making authentication requests
- to the identity provider.
-
- When specified, clientSecret references a Secret in the 'openshift-config'
- namespace that contains the client secret in the 'clientSecret' key of the '.data' field.
- The client secret will be used when making authentication requests to the identity provider.
-
- Public clients do not require a client secret but private
- clients do require a client secret to work with the identity provider.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component being configured to use the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component being configured to use the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- extraScopes:
- description: |-
- extraScopes is an optional field that configures the extra scopes that should
- be requested by the platform component when making authentication requests to the
- identity provider.
- This is useful if you have configured claim mappings that requires specific
- scopes to be requested beyond the standard OIDC scopes.
-
- When omitted, no additional scopes are requested.
- items:
- type: string
- type: array
- x-kubernetes-list-type: set
- required:
- - clientID
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- required:
- - issuer
- - name
- type: object
- maxItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- serviceAccountIssuer:
- description: |-
- serviceAccountIssuer is the identifier of the bound service account token
- issuer.
- The default is https://kubernetes.default.svc
- WARNING: Updating this field will not result in immediate invalidation of all bound tokens with the
- previous issuer value. Instead, the tokens issued by previous service account issuer will continue to
- be trusted for a time period chosen by the platform (currently set to 24h).
- This time period is subject to change over time.
- This allows internal components to transition to use new service account issuer without service distruption.
- type: string
- type:
- description: |-
- type identifies the cluster managed, user facing authentication mode in use.
- Specifically, it manages the component that responds to login attempts.
- The default is IntegratedOAuth.
- enum:
- - ""
- - None
- - IntegratedOAuth
- - OIDC
- type: string
- webhookTokenAuthenticator:
- description: |-
- webhookTokenAuthenticator configures a remote token reviewer.
- These remote authentication webhooks can be used to verify bearer tokens
- via the tokenreviews.authentication.k8s.io REST API. This is required to
- honor bearer tokens that are provisioned by an external authentication service.
-
- Can only be set if "Type" is set to "None".
- properties:
- kubeConfig:
- description: |-
- kubeConfig references a secret that contains kube config file data which
- describes how to access the remote webhook service.
- The namespace for the referenced secret is openshift-config.
-
- For further details, see:
-
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
-
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- properties:
- name:
- description: name is the metadata.name of the referenced secret
- type: string
- required:
- - name
- type: object
- required:
- - kubeConfig
- type: object
- webhookTokenAuthenticators:
- description: webhookTokenAuthenticators is DEPRECATED, setting it
- has no effect.
- items:
- description: |-
- deprecatedWebhookTokenAuthenticator holds the necessary configuration options for a remote token authenticator.
- It's the same as WebhookTokenAuthenticator but it's missing the 'required' validation on KubeConfig field.
- properties:
- kubeConfig:
- description: |-
- kubeConfig contains kube config file data which describes how to access the remote webhook service.
- For further details, see:
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- The namespace for this secret is determined by the point of use.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- type: object
- type: array
- x-kubernetes-list-type: atomic
- type: object
- status:
- description: status holds observed values from the cluster. They may not
- be overridden.
- properties:
- integratedOAuthMetadata:
- description: |-
- integratedOAuthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for the in-cluster integrated OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- This contains the observed value based on cluster state.
- An explicitly set value in spec.oauthMetadata has precedence over this field.
- This field has no meaning if authentication spec.type is not set to IntegratedOAuth.
- The key "oauthMetadata" is used to locate the data.
- If the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config-managed.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcClients:
- description: |-
- oidcClients is where participating operators place the current OIDC client status
- for OIDC clients that can be customized by the cluster-admin.
- items:
- description: |-
- OIDCClientStatus represents the current state
- of platform components and how they interact with
- the configured identity providers.
- properties:
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component using the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component using the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- conditions:
- description: |-
- conditions are used to communicate the state of the `oidcClients` entry.
-
- Supported conditions include Available, Degraded and Progressing.
-
- If Available is true, the component is successfully using the configured client.
- If Degraded is true, that means something has gone wrong trying to handle the client configuration.
- If Progressing is true, that means the component is taking some action related to the `oidcClients` entry.
- items:
- description: Condition contains details for one aspect of
- the current state of this API Resource.
- properties:
- lastTransitionTime:
- description: |-
- lastTransitionTime is the last time the condition transitioned from one status to another.
- This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
- format: date-time
- type: string
- message:
- description: |-
- message is a human readable message indicating details about the transition.
- This may be an empty string.
- maxLength: 32768
- type: string
- observedGeneration:
- description: |-
- observedGeneration represents the .metadata.generation that the condition was set based upon.
- For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
- with respect to the current state of the instance.
- format: int64
- minimum: 0
- type: integer
- reason:
- description: |-
- reason contains a programmatic identifier indicating the reason for the condition's last transition.
- Producers of specific condition types may define expected values and meanings for this field,
- and whether the values are considered a guaranteed API.
- The value should be a CamelCase string.
- This field may not be empty.
- maxLength: 1024
- minLength: 1
- pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
- type: string
- status:
- description: status of the condition, one of True, False,
- Unknown.
- enum:
- - "True"
- - "False"
- - Unknown
- type: string
- type:
- description: type of condition in CamelCase or in foo.example.com/CamelCase.
- maxLength: 316
- pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
- type: string
- required:
- - lastTransitionTime
- - message
- - reason
- - status
- - type
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - type
- x-kubernetes-list-type: map
- consumingUsers:
- description: |-
- consumingUsers is an optional list of ServiceAccounts requiring
- read permissions on the `clientSecret` secret.
-
- consumingUsers must not exceed 5 entries.
- items:
- description: ConsumingUser is an alias for string which we
- add validation to. Currently only service accounts are supported.
- maxLength: 512
- minLength: 1
- pattern: ^system:serviceaccount:[a-z0-9]([-a-z0-9]*[a-z0-9])?:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
- type: string
- maxItems: 5
- type: array
- x-kubernetes-list-type: set
- currentOIDCClients:
- description: |-
- currentOIDCClients is an optional list of clients that the component is currently using.
- Entries must have unique issuerURL/clientID pairs.
- items:
- description: |-
- OIDCClientReference is a reference to a platform component
- client configuration.
- properties:
- clientID:
- description: |-
- clientID is a required field that specifies the client identifier, from
- the identity provider, that the platform component is using for authentication
- requests made to the identity provider.
-
- clientID must not be empty.
- minLength: 1
- type: string
- issuerURL:
- description: |-
- issuerURL is a required field that specifies the URL of the identity
- provider that this client is configured to make requests against.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- oidcProviderName:
- description: |-
- oidcProviderName is a required reference to the 'name' of the identity provider
- configured in 'oidcProviders' that this client is associated with.
-
- oidcProviderName must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - clientID
- - issuerURL
- - oidcProviderName
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - issuerURL
- - clientID
- x-kubernetes-list-type: map
- required:
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- type: object
- required:
- - spec
- type: object
- x-kubernetes-validations:
- - message: all oidcClients in the oidcProviders must match their componentName
- and componentNamespace to either a previously configured oidcClient or
- they must exist in the status.oidcClients
- rule: '!has(self.spec.oidcProviders) || self.spec.oidcProviders.all(p, !has(p.oidcClients)
- || p.oidcClients.all(specC, self.status.oidcClients.exists(statusC, statusC.componentNamespace
- == specC.componentNamespace && statusC.componentName == specC.componentName)
- || (has(oldSelf.spec.oidcProviders) && oldSelf.spec.oidcProviders.exists(oldP,
- oldP.name == p.name && has(oldP.oidcClients) && oldP.oidcClients.exists(oldC,
- oldC.componentNamespace == specC.componentNamespace && oldC.componentName
- == specC.componentName)))))'
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-CustomNoUpgrade.crd.yaml b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift.crd.yaml
similarity index 99%
rename from config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-CustomNoUpgrade.crd.yaml
rename to config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift.crd.yaml
index f6c3e4607c7..e16554e7044 100644
--- a/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift-CustomNoUpgrade.crd.yaml
+++ b/config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_authentications-Hypershift.crd.yaml
@@ -6,7 +6,6 @@ metadata:
api.openshift.io/merged-by-featuregates: "true"
include.release.openshift.io/ibm-cloud-managed: "true"
release.openshift.io/bootstrap-required: "true"
- release.openshift.io/feature-set: CustomNoUpgrade
name: authentications.config.openshift.io
spec:
group: config.openshift.io
diff --git a/features.md b/features.md
index f63c1615ae2..e322daba7b8 100644
--- a/features.md
+++ b/features.md
@@ -27,7 +27,6 @@
| DynamicResourceAllocation| | | Enabled | Enabled | Enabled | Enabled |
| EtcdBackendQuota| | | Enabled | Enabled | Enabled | Enabled |
| Example| | | Enabled | Enabled | Enabled | Enabled |
-| ExternalOIDCWithUIDAndExtraClaimMappings| | | Enabled | Enabled | Enabled | Enabled |
| GCPClusterHostedDNS| | | Enabled | Enabled | Enabled | Enabled |
| GCPCustomAPIEndpoints| | | Enabled | Enabled | Enabled | Enabled |
| HighlyAvailableArbiter| | | Enabled | Enabled | Enabled | Enabled |
@@ -61,6 +60,7 @@
| VolumeAttributesClass| | | Enabled | Enabled | Enabled | Enabled |
| VolumeGroupSnapshot| | | Enabled | Enabled | Enabled | Enabled |
| ExternalOIDC| Enabled | | Enabled | Enabled | Enabled | Enabled |
+| ExternalOIDCWithUIDAndExtraClaimMappings| Enabled | | Enabled | Enabled | Enabled | Enabled |
| AWSEFSDriverVolumeMetrics| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| AdditionalRoutingCapabilities| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| AdminNetworkPolicy| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
diff --git a/features/features.go b/features/features.go
index a4aea354f1c..f2d50c23ab3 100644
--- a/features/features.go
+++ b/features/features.go
@@ -464,7 +464,7 @@ var (
productScope(ocpSpecific).
enhancementPR("https://github.com/openshift/enhancements/pull/1777").
enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade).
- enableForClusterProfile(Hypershift, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade).
+ enableForClusterProfile(Hypershift, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade, configv1.Default).
mustRegister()
FeatureGateExample = newFeatureGate("Example").
@@ -814,7 +814,7 @@ var (
enhancementPR("https://github.com/openshift/enhancements/pull/1779").
enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade).
mustRegister()
-
+
FeatureGateAWSDedicatedHosts = newFeatureGate("AWSDedicatedHosts").
reportProblemsToJiraComponent("Installer").
contactPerson("faermanj").
diff --git a/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-Default.crd.yaml b/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-Default.crd.yaml
deleted file mode 100644
index 6a6b7ff126e..00000000000
--- a/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-Default.crd.yaml
+++ /dev/null
@@ -1,699 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- api-approved.openshift.io: https://github.com/openshift/api/pull/470
- api.openshift.io/merged-by-featuregates: "true"
- include.release.openshift.io/ibm-cloud-managed: "true"
- release.openshift.io/bootstrap-required: "true"
- release.openshift.io/feature-set: Default
- name: authentications.config.openshift.io
-spec:
- group: config.openshift.io
- names:
- kind: Authentication
- listKind: AuthenticationList
- plural: authentications
- singular: authentication
- scope: Cluster
- versions:
- - name: v1
- schema:
- openAPIV3Schema:
- description: |-
- Authentication specifies cluster-wide settings for authentication (like OAuth and
- webhook token authenticators). The canonical name of an instance is `cluster`.
-
- Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: spec holds user settable values for configuration
- properties:
- oauthMetadata:
- description: |-
- oauthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for an external OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- If oauthMetadata.name is non-empty, this value has precedence
- over any metadata reference stored in status.
- The key "oauthMetadata" is used to locate the data.
- If specified and the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcProviders:
- description: |-
- oidcProviders are OIDC identity providers that can issue tokens
- for this cluster
- Can only be set if "Type" is set to "OIDC".
-
- At most one provider can be configured.
- items:
- properties:
- claimMappings:
- description: |-
- claimMappings is an optional field that configures the rules to be used by
- the Kubernetes API server for translating claims in a JWT token, issued
- by the identity provider, to a cluster identity.
- properties:
- groups:
- description: |-
- groups is an optional field that configures how the groups of a cluster identity
- should be constructed from the claims in a JWT token issued
- by the identity provider.
- When referencing a claim, if the claim is present in the JWT
- token, its value must be a list of groups separated by a comma (',').
- For example - '"example"' and '"exampleOne", "exampleTwo", "exampleThree"' are valid claim values.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix is an optional field that configures the prefix that will be
- applied to the cluster identity attribute during the process of mapping
- JWT claims to cluster identity attributes.
-
- When omitted (""), no prefix is applied to the cluster identity attribute.
-
- Example: if `prefix` is set to "myoidc:" and the `claim` in JWT contains
- an array of strings "a", "b" and "c", the mapping will result in an
- array of string "myoidc:a", "myoidc:b" and "myoidc:c".
- type: string
- required:
- - claim
- type: object
- username:
- description: |-
- username is an optional field that configures how the username of a cluster identity
- should be constructed from the claims in a JWT token issued by the identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix configures the prefix that should be prepended to the value
- of the JWT claim.
-
- prefix must be set when prefixPolicy is set to 'Prefix' and must be unset otherwise.
- properties:
- prefixString:
- description: |-
- prefixString is a required field that configures the prefix that will
- be applied to cluster identity username attribute
- during the process of mapping JWT claims to cluster identity attributes.
-
- prefixString must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - prefixString
- type: object
- prefixPolicy:
- description: |-
- prefixPolicy is an optional field that configures how a prefix should be
- applied to the value of the JWT claim specified in the 'claim' field.
-
- Allowed values are 'Prefix', 'NoPrefix', and omitted (not provided or an empty string).
-
- When set to 'Prefix', the value specified in the prefix field will be
- prepended to the value of the JWT claim.
- The prefix field must be set when prefixPolicy is 'Prefix'.
-
- When set to 'NoPrefix', no prefix will be prepended to the value
- of the JWT claim.
-
- When omitted, this means no opinion and the platform is left to choose
- any prefixes that are applied which is subject to change over time.
- Currently, the platform prepends `{issuerURL}#` to the value of the JWT claim
- when the claim is not 'email'.
- As an example, consider the following scenario:
- `prefix` is unset, `issuerURL` is set to `https://myoidc.tld`,
- the JWT claims include "username":"userA" and "email":"userA@myoidc.tld",
- and `claim` is set to:
- - "username": the mapped value will be "https://myoidc.tld#userA"
- - "email": the mapped value will be "userA@myoidc.tld"
- enum:
- - ""
- - NoPrefix
- - Prefix
- type: string
- required:
- - claim
- type: object
- x-kubernetes-validations:
- - message: prefix must be set if prefixPolicy is 'Prefix',
- but must remain unset otherwise
- rule: 'has(self.prefixPolicy) && self.prefixPolicy ==
- ''Prefix'' ? (has(self.prefix) && size(self.prefix.prefixString)
- > 0) : !has(self.prefix)'
- type: object
- claimValidationRules:
- description: |-
- claimValidationRules is an optional field that configures the rules to
- be used by the Kubernetes API server for validating the claims in a JWT
- token issued by the identity provider.
-
- Validation rules are joined via an AND operation.
- items:
- properties:
- requiredClaim:
- description: |-
- requiredClaim is an optional field that configures the required claim
- and value that the Kubernetes API server will use to validate if an incoming
- JWT is valid for this identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the name of the required claim.
- When taken from the JWT claims, claim must be a string value.
-
- claim must not be an empty string ("").
- minLength: 1
- type: string
- requiredValue:
- description: |-
- requiredValue is a required field that configures the value that 'claim' must
- have when taken from the incoming JWT claims.
- If the value in the JWT claims does not match, the token
- will be rejected for authentication.
-
- requiredValue must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - claim
- - requiredValue
- type: object
- type:
- default: RequiredClaim
- description: |-
- type is an optional field that configures the type of the validation rule.
-
- Allowed values are 'RequiredClaim' and omitted (not provided or an empty string).
-
- When set to 'RequiredClaim', the Kubernetes API server
- will be configured to validate that the incoming JWT
- contains the required claim and that its value matches
- the required value.
-
- Defaults to 'RequiredClaim'.
- enum:
- - RequiredClaim
- type: string
- type: object
- type: array
- x-kubernetes-list-type: atomic
- issuer:
- description: |-
- issuer is a required field that configures how the platform interacts
- with the identity provider and how tokens issued from the identity provider
- are evaluated by the Kubernetes API server.
- properties:
- audiences:
- description: |-
- audiences is a required field that configures the acceptable audiences
- the JWT token, issued by the identity provider, must be issued to.
- At least one of the entries must match the 'aud' claim in the JWT token.
-
- audiences must contain at least one entry and must not exceed ten entries.
- items:
- minLength: 1
- type: string
- maxItems: 10
- minItems: 1
- type: array
- x-kubernetes-list-type: set
- issuerCertificateAuthority:
- description: |-
- issuerCertificateAuthority is an optional field that configures the
- certificate authority, used by the Kubernetes API server, to validate
- the connection to the identity provider when fetching discovery information.
-
- When not specified, the system trust is used.
-
- When specified, it must reference a ConfigMap in the openshift-config
- namespace containing the PEM-encoded CA certificates under the 'ca-bundle.crt'
- key in the data field of the ConfigMap.
- properties:
- name:
- description: name is the metadata.name of the referenced
- config map
- type: string
- required:
- - name
- type: object
- issuerURL:
- description: |-
- issuerURL is a required field that configures the URL used to issue tokens
- by the identity provider.
- The Kubernetes API server determines how authentication tokens should be handled
- by matching the 'iss' claim in the JWT to the issuerURL of configured identity providers.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- required:
- - audiences
- - issuerURL
- type: object
- name:
- description: |-
- name is a required field that configures the unique human-readable identifier
- associated with the identity provider.
- It is used to distinguish between multiple identity providers
- and has no impact on token validation or authentication mechanics.
-
- name must not be an empty string ("").
- minLength: 1
- type: string
- oidcClients:
- description: |-
- oidcClients is an optional field that configures how on-cluster,
- platform clients should request tokens from the identity provider.
- oidcClients must not exceed 20 entries and entries must have unique namespace/name pairs.
- items:
- description: |-
- OIDCClientConfig configures how platform clients
- interact with identity providers as an authentication
- method
- properties:
- clientID:
- description: |-
- clientID is a required field that configures the client identifier, from
- the identity provider, that the platform component uses for authentication
- requests made to the identity provider.
- The identity provider must accept this identifier for platform components
- to be able to use the identity provider as an authentication mode.
-
- clientID must not be an empty string ("").
- minLength: 1
- type: string
- clientSecret:
- description: |-
- clientSecret is an optional field that configures the client secret used
- by the platform component when making authentication requests to the identity provider.
-
- When not specified, no client secret will be used when making authentication requests
- to the identity provider.
-
- When specified, clientSecret references a Secret in the 'openshift-config'
- namespace that contains the client secret in the 'clientSecret' key of the '.data' field.
- The client secret will be used when making authentication requests to the identity provider.
-
- Public clients do not require a client secret but private
- clients do require a client secret to work with the identity provider.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component being configured to use the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component being configured to use the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- extraScopes:
- description: |-
- extraScopes is an optional field that configures the extra scopes that should
- be requested by the platform component when making authentication requests to the
- identity provider.
- This is useful if you have configured claim mappings that requires specific
- scopes to be requested beyond the standard OIDC scopes.
-
- When omitted, no additional scopes are requested.
- items:
- type: string
- type: array
- x-kubernetes-list-type: set
- required:
- - clientID
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- required:
- - issuer
- - name
- type: object
- maxItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- serviceAccountIssuer:
- description: |-
- serviceAccountIssuer is the identifier of the bound service account token
- issuer.
- The default is https://kubernetes.default.svc
- WARNING: Updating this field will not result in immediate invalidation of all bound tokens with the
- previous issuer value. Instead, the tokens issued by previous service account issuer will continue to
- be trusted for a time period chosen by the platform (currently set to 24h).
- This time period is subject to change over time.
- This allows internal components to transition to use new service account issuer without service distruption.
- type: string
- type:
- description: |-
- type identifies the cluster managed, user facing authentication mode in use.
- Specifically, it manages the component that responds to login attempts.
- The default is IntegratedOAuth.
- enum:
- - ""
- - None
- - IntegratedOAuth
- - OIDC
- type: string
- webhookTokenAuthenticator:
- description: |-
- webhookTokenAuthenticator configures a remote token reviewer.
- These remote authentication webhooks can be used to verify bearer tokens
- via the tokenreviews.authentication.k8s.io REST API. This is required to
- honor bearer tokens that are provisioned by an external authentication service.
-
- Can only be set if "Type" is set to "None".
- properties:
- kubeConfig:
- description: |-
- kubeConfig references a secret that contains kube config file data which
- describes how to access the remote webhook service.
- The namespace for the referenced secret is openshift-config.
-
- For further details, see:
-
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
-
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- properties:
- name:
- description: name is the metadata.name of the referenced secret
- type: string
- required:
- - name
- type: object
- required:
- - kubeConfig
- type: object
- webhookTokenAuthenticators:
- description: webhookTokenAuthenticators is DEPRECATED, setting it
- has no effect.
- items:
- description: |-
- deprecatedWebhookTokenAuthenticator holds the necessary configuration options for a remote token authenticator.
- It's the same as WebhookTokenAuthenticator but it's missing the 'required' validation on KubeConfig field.
- properties:
- kubeConfig:
- description: |-
- kubeConfig contains kube config file data which describes how to access the remote webhook service.
- For further details, see:
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- The namespace for this secret is determined by the point of use.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- type: object
- type: array
- x-kubernetes-list-type: atomic
- type: object
- status:
- description: status holds observed values from the cluster. They may not
- be overridden.
- properties:
- integratedOAuthMetadata:
- description: |-
- integratedOAuthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for the in-cluster integrated OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- This contains the observed value based on cluster state.
- An explicitly set value in spec.oauthMetadata has precedence over this field.
- This field has no meaning if authentication spec.type is not set to IntegratedOAuth.
- The key "oauthMetadata" is used to locate the data.
- If the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config-managed.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcClients:
- description: |-
- oidcClients is where participating operators place the current OIDC client status
- for OIDC clients that can be customized by the cluster-admin.
- items:
- description: |-
- OIDCClientStatus represents the current state
- of platform components and how they interact with
- the configured identity providers.
- properties:
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component using the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component using the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- conditions:
- description: |-
- conditions are used to communicate the state of the `oidcClients` entry.
-
- Supported conditions include Available, Degraded and Progressing.
-
- If Available is true, the component is successfully using the configured client.
- If Degraded is true, that means something has gone wrong trying to handle the client configuration.
- If Progressing is true, that means the component is taking some action related to the `oidcClients` entry.
- items:
- description: Condition contains details for one aspect of
- the current state of this API Resource.
- properties:
- lastTransitionTime:
- description: |-
- lastTransitionTime is the last time the condition transitioned from one status to another.
- This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
- format: date-time
- type: string
- message:
- description: |-
- message is a human readable message indicating details about the transition.
- This may be an empty string.
- maxLength: 32768
- type: string
- observedGeneration:
- description: |-
- observedGeneration represents the .metadata.generation that the condition was set based upon.
- For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
- with respect to the current state of the instance.
- format: int64
- minimum: 0
- type: integer
- reason:
- description: |-
- reason contains a programmatic identifier indicating the reason for the condition's last transition.
- Producers of specific condition types may define expected values and meanings for this field,
- and whether the values are considered a guaranteed API.
- The value should be a CamelCase string.
- This field may not be empty.
- maxLength: 1024
- minLength: 1
- pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
- type: string
- status:
- description: status of the condition, one of True, False,
- Unknown.
- enum:
- - "True"
- - "False"
- - Unknown
- type: string
- type:
- description: type of condition in CamelCase or in foo.example.com/CamelCase.
- maxLength: 316
- pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
- type: string
- required:
- - lastTransitionTime
- - message
- - reason
- - status
- - type
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - type
- x-kubernetes-list-type: map
- consumingUsers:
- description: |-
- consumingUsers is an optional list of ServiceAccounts requiring
- read permissions on the `clientSecret` secret.
-
- consumingUsers must not exceed 5 entries.
- items:
- description: ConsumingUser is an alias for string which we
- add validation to. Currently only service accounts are supported.
- maxLength: 512
- minLength: 1
- pattern: ^system:serviceaccount:[a-z0-9]([-a-z0-9]*[a-z0-9])?:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
- type: string
- maxItems: 5
- type: array
- x-kubernetes-list-type: set
- currentOIDCClients:
- description: |-
- currentOIDCClients is an optional list of clients that the component is currently using.
- Entries must have unique issuerURL/clientID pairs.
- items:
- description: |-
- OIDCClientReference is a reference to a platform component
- client configuration.
- properties:
- clientID:
- description: |-
- clientID is a required field that specifies the client identifier, from
- the identity provider, that the platform component is using for authentication
- requests made to the identity provider.
-
- clientID must not be empty.
- minLength: 1
- type: string
- issuerURL:
- description: |-
- issuerURL is a required field that specifies the URL of the identity
- provider that this client is configured to make requests against.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- oidcProviderName:
- description: |-
- oidcProviderName is a required reference to the 'name' of the identity provider
- configured in 'oidcProviders' that this client is associated with.
-
- oidcProviderName must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - clientID
- - issuerURL
- - oidcProviderName
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - issuerURL
- - clientID
- x-kubernetes-list-type: map
- required:
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- type: object
- required:
- - spec
- type: object
- x-kubernetes-validations:
- - message: all oidcClients in the oidcProviders must match their componentName
- and componentNamespace to either a previously configured oidcClient or
- they must exist in the status.oidcClients
- rule: '!has(self.spec.oidcProviders) || self.spec.oidcProviders.all(p, !has(p.oidcClients)
- || p.oidcClients.all(specC, self.status.oidcClients.exists(statusC, statusC.componentNamespace
- == specC.componentNamespace && statusC.componentName == specC.componentName)
- || (has(oldSelf.spec.oidcProviders) && oldSelf.spec.oidcProviders.exists(oldP,
- oldP.name == p.name && has(oldP.oidcClients) && oldP.oidcClients.exists(oldC,
- oldC.componentNamespace == specC.componentNamespace && oldC.componentName
- == specC.componentName)))))'
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-DevPreviewNoUpgrade.crd.yaml b/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-DevPreviewNoUpgrade.crd.yaml
deleted file mode 100644
index 76ad704a153..00000000000
--- a/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-DevPreviewNoUpgrade.crd.yaml
+++ /dev/null
@@ -1,850 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- api-approved.openshift.io: https://github.com/openshift/api/pull/470
- api.openshift.io/merged-by-featuregates: "true"
- include.release.openshift.io/ibm-cloud-managed: "true"
- release.openshift.io/bootstrap-required: "true"
- release.openshift.io/feature-set: DevPreviewNoUpgrade
- name: authentications.config.openshift.io
-spec:
- group: config.openshift.io
- names:
- kind: Authentication
- listKind: AuthenticationList
- plural: authentications
- singular: authentication
- scope: Cluster
- versions:
- - name: v1
- schema:
- openAPIV3Schema:
- description: |-
- Authentication specifies cluster-wide settings for authentication (like OAuth and
- webhook token authenticators). The canonical name of an instance is `cluster`.
-
- Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: spec holds user settable values for configuration
- properties:
- oauthMetadata:
- description: |-
- oauthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for an external OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- If oauthMetadata.name is non-empty, this value has precedence
- over any metadata reference stored in status.
- The key "oauthMetadata" is used to locate the data.
- If specified and the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcProviders:
- description: |-
- oidcProviders are OIDC identity providers that can issue tokens
- for this cluster
- Can only be set if "Type" is set to "OIDC".
-
- At most one provider can be configured.
- items:
- properties:
- claimMappings:
- description: |-
- claimMappings is an optional field that configures the rules to be used by
- the Kubernetes API server for translating claims in a JWT token, issued
- by the identity provider, to a cluster identity.
- properties:
- extra:
- description: |-
- extra is an optional field for configuring the mappings
- used to construct the extra attribute for the cluster identity.
- When omitted, no extra attributes will be present on the cluster identity.
- key values for extra mappings must be unique.
- A maximum of 64 extra attribute mappings may be provided.
- items:
- description: |-
- ExtraMapping allows specifying a key and CEL expression
- to evaluate the keys' value. It is used to create additional
- mappings and attributes added to a cluster identity from
- a provided authentication token.
- properties:
- key:
- description: |-
- key is a required field that specifies the string
- to use as the extra attribute key.
-
- key must be a domain-prefix path (e.g 'example.org/foo').
- key must not exceed 510 characters in length.
- key must contain the '/' character, separating the domain and path characters.
- key must not be empty.
-
- The domain portion of the key (string of characters prior to the '/') must be a valid RFC1123 subdomain.
- It must not exceed 253 characters in length.
- It must start and end with an alphanumeric character.
- It must only contain lower case alphanumeric characters and '-' or '.'.
- It must not use the reserved domains, or be subdomains of, "kubernetes.io", "k8s.io", and "openshift.io".
-
- The path portion of the key (string of characters after the '/') must not be empty and must consist of at least one
- alphanumeric character, percent-encoded octets, '-', '.', '_', '~', '!', '$', '&', ''', '(', ')', '*', '+', ',', ';', '=', and ':'.
- It must not exceed 256 characters in length.
- maxLength: 510
- minLength: 1
- type: string
- x-kubernetes-validations:
- - message: key must contain the '/' character
- rule: self.contains('/')
- - message: the domain of the key must consist of only
- lower case alphanumeric characters, '-' or '.',
- and must start and end with an alphanumeric character
- rule: self.split('/', 2)[0].matches("^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$")
- - message: the domain of the key must not exceed 253
- characters in length
- rule: self.split('/', 2)[0].size() <= 253
- - message: the domain 'kubernetes.io' is reserved
- for Kubernetes use
- rule: self.split('/', 2)[0] != 'kubernetes.io'
- - message: the subdomains '*.kubernetes.io' are reserved
- for Kubernetes use
- rule: '!self.split(''/'', 2)[0].endsWith(''.kubernetes.io'')'
- - message: the domain 'k8s.io' is reserved for Kubernetes
- use
- rule: self.split('/', 2)[0] != 'k8s.io'
- - message: the subdomains '*.k8s.io' are reserved
- for Kubernetes use
- rule: '!self.split(''/'', 2)[0].endsWith(''.k8s.io'')'
- - message: the domain 'openshift.io' is reserved for
- OpenShift use
- rule: self.split('/', 2)[0] != 'openshift.io'
- - message: the subdomains '*.openshift.io' are reserved
- for OpenShift use
- rule: '!self.split(''/'', 2)[0].endsWith(''.openshift.io'')'
- - message: the path of the key must not be empty and
- must consist of at least one alphanumeric character,
- percent-encoded octets, apostrophe, '-', '.',
- '_', '~', '!', '$', '&', '(', ')', '*', '+', ',',
- ';', '=', and ':'
- rule: self.split('/', 2)[1].matches('[A-Za-z0-9/\\-._~%!$&\'()*+;=:]+')
- - message: the path of the key must not exceed 256
- characters in length
- rule: self.split('/', 2)[1].size() <= 256
- valueExpression:
- description: |-
- valueExpression is a required field to specify the CEL expression to extract
- the extra attribute value from a JWT token's claims.
- valueExpression must produce a string or string array value.
- "", [], and null are treated as the extra mapping not being present.
- Empty string values within an array are filtered out.
-
- CEL expressions have access to the token claims
- through a CEL variable, 'claims'.
- 'claims' is a map of claim names to claim values.
- For example, the 'sub' claim value can be accessed as 'claims.sub'.
- Nested claims can be accessed using dot notation ('claims.foo.bar').
-
- valueExpression must not exceed 4096 characters in length.
- valueExpression must not be empty.
- maxLength: 4096
- minLength: 1
- type: string
- required:
- - key
- - valueExpression
- type: object
- maxItems: 64
- type: array
- x-kubernetes-list-map-keys:
- - key
- x-kubernetes-list-type: map
- groups:
- description: |-
- groups is an optional field that configures how the groups of a cluster identity
- should be constructed from the claims in a JWT token issued
- by the identity provider.
- When referencing a claim, if the claim is present in the JWT
- token, its value must be a list of groups separated by a comma (',').
- For example - '"example"' and '"exampleOne", "exampleTwo", "exampleThree"' are valid claim values.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix is an optional field that configures the prefix that will be
- applied to the cluster identity attribute during the process of mapping
- JWT claims to cluster identity attributes.
-
- When omitted (""), no prefix is applied to the cluster identity attribute.
-
- Example: if `prefix` is set to "myoidc:" and the `claim` in JWT contains
- an array of strings "a", "b" and "c", the mapping will result in an
- array of string "myoidc:a", "myoidc:b" and "myoidc:c".
- type: string
- required:
- - claim
- type: object
- uid:
- description: |-
- uid is an optional field for configuring the claim mapping
- used to construct the uid for the cluster identity.
-
- When using uid.claim to specify the claim it must be a single string value.
- When using uid.expression the expression must result in a single string value.
-
- When omitted, this means the user has no opinion and the platform
- is left to choose a default, which is subject to change over time.
- The current default is to use the 'sub' claim.
- properties:
- claim:
- description: |-
- claim is an optional field for specifying the
- JWT token claim that is used in the mapping.
- The value of this claim will be assigned to
- the field in which this mapping is associated.
-
- Precisely one of claim or expression must be set.
- claim must not be specified when expression is set.
- When specified, claim must be at least 1 character in length
- and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- expression:
- description: |-
- expression is an optional field for specifying a
- CEL expression that produces a string value from
- JWT token claims.
-
- CEL expressions have access to the token claims
- through a CEL variable, 'claims'.
- 'claims' is a map of claim names to claim values.
- For example, the 'sub' claim value can be accessed as 'claims.sub'.
- Nested claims can be accessed using dot notation ('claims.foo.bar').
-
- Precisely one of claim or expression must be set.
- expression must not be specified when claim is set.
- When specified, expression must be at least 1 character in length
- and must not exceed 4096 characters in length.
- maxLength: 4096
- minLength: 1
- type: string
- type: object
- x-kubernetes-validations:
- - message: precisely one of claim or expression must be
- set
- rule: 'has(self.claim) ? !has(self.expression) : has(self.expression)'
- username:
- description: |-
- username is an optional field that configures how the username of a cluster identity
- should be constructed from the claims in a JWT token issued by the identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix configures the prefix that should be prepended to the value
- of the JWT claim.
-
- prefix must be set when prefixPolicy is set to 'Prefix' and must be unset otherwise.
- properties:
- prefixString:
- description: |-
- prefixString is a required field that configures the prefix that will
- be applied to cluster identity username attribute
- during the process of mapping JWT claims to cluster identity attributes.
-
- prefixString must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - prefixString
- type: object
- prefixPolicy:
- description: |-
- prefixPolicy is an optional field that configures how a prefix should be
- applied to the value of the JWT claim specified in the 'claim' field.
-
- Allowed values are 'Prefix', 'NoPrefix', and omitted (not provided or an empty string).
-
- When set to 'Prefix', the value specified in the prefix field will be
- prepended to the value of the JWT claim.
- The prefix field must be set when prefixPolicy is 'Prefix'.
-
- When set to 'NoPrefix', no prefix will be prepended to the value
- of the JWT claim.
-
- When omitted, this means no opinion and the platform is left to choose
- any prefixes that are applied which is subject to change over time.
- Currently, the platform prepends `{issuerURL}#` to the value of the JWT claim
- when the claim is not 'email'.
- As an example, consider the following scenario:
- `prefix` is unset, `issuerURL` is set to `https://myoidc.tld`,
- the JWT claims include "username":"userA" and "email":"userA@myoidc.tld",
- and `claim` is set to:
- - "username": the mapped value will be "https://myoidc.tld#userA"
- - "email": the mapped value will be "userA@myoidc.tld"
- enum:
- - ""
- - NoPrefix
- - Prefix
- type: string
- required:
- - claim
- type: object
- x-kubernetes-validations:
- - message: prefix must be set if prefixPolicy is 'Prefix',
- but must remain unset otherwise
- rule: 'has(self.prefixPolicy) && self.prefixPolicy ==
- ''Prefix'' ? (has(self.prefix) && size(self.prefix.prefixString)
- > 0) : !has(self.prefix)'
- type: object
- claimValidationRules:
- description: |-
- claimValidationRules is an optional field that configures the rules to
- be used by the Kubernetes API server for validating the claims in a JWT
- token issued by the identity provider.
-
- Validation rules are joined via an AND operation.
- items:
- properties:
- requiredClaim:
- description: |-
- requiredClaim is an optional field that configures the required claim
- and value that the Kubernetes API server will use to validate if an incoming
- JWT is valid for this identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the name of the required claim.
- When taken from the JWT claims, claim must be a string value.
-
- claim must not be an empty string ("").
- minLength: 1
- type: string
- requiredValue:
- description: |-
- requiredValue is a required field that configures the value that 'claim' must
- have when taken from the incoming JWT claims.
- If the value in the JWT claims does not match, the token
- will be rejected for authentication.
-
- requiredValue must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - claim
- - requiredValue
- type: object
- type:
- default: RequiredClaim
- description: |-
- type is an optional field that configures the type of the validation rule.
-
- Allowed values are 'RequiredClaim' and omitted (not provided or an empty string).
-
- When set to 'RequiredClaim', the Kubernetes API server
- will be configured to validate that the incoming JWT
- contains the required claim and that its value matches
- the required value.
-
- Defaults to 'RequiredClaim'.
- enum:
- - RequiredClaim
- type: string
- type: object
- type: array
- x-kubernetes-list-type: atomic
- issuer:
- description: |-
- issuer is a required field that configures how the platform interacts
- with the identity provider and how tokens issued from the identity provider
- are evaluated by the Kubernetes API server.
- properties:
- audiences:
- description: |-
- audiences is a required field that configures the acceptable audiences
- the JWT token, issued by the identity provider, must be issued to.
- At least one of the entries must match the 'aud' claim in the JWT token.
-
- audiences must contain at least one entry and must not exceed ten entries.
- items:
- minLength: 1
- type: string
- maxItems: 10
- minItems: 1
- type: array
- x-kubernetes-list-type: set
- issuerCertificateAuthority:
- description: |-
- issuerCertificateAuthority is an optional field that configures the
- certificate authority, used by the Kubernetes API server, to validate
- the connection to the identity provider when fetching discovery information.
-
- When not specified, the system trust is used.
-
- When specified, it must reference a ConfigMap in the openshift-config
- namespace containing the PEM-encoded CA certificates under the 'ca-bundle.crt'
- key in the data field of the ConfigMap.
- properties:
- name:
- description: name is the metadata.name of the referenced
- config map
- type: string
- required:
- - name
- type: object
- issuerURL:
- description: |-
- issuerURL is a required field that configures the URL used to issue tokens
- by the identity provider.
- The Kubernetes API server determines how authentication tokens should be handled
- by matching the 'iss' claim in the JWT to the issuerURL of configured identity providers.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- required:
- - audiences
- - issuerURL
- type: object
- name:
- description: |-
- name is a required field that configures the unique human-readable identifier
- associated with the identity provider.
- It is used to distinguish between multiple identity providers
- and has no impact on token validation or authentication mechanics.
-
- name must not be an empty string ("").
- minLength: 1
- type: string
- oidcClients:
- description: |-
- oidcClients is an optional field that configures how on-cluster,
- platform clients should request tokens from the identity provider.
- oidcClients must not exceed 20 entries and entries must have unique namespace/name pairs.
- items:
- description: |-
- OIDCClientConfig configures how platform clients
- interact with identity providers as an authentication
- method
- properties:
- clientID:
- description: |-
- clientID is a required field that configures the client identifier, from
- the identity provider, that the platform component uses for authentication
- requests made to the identity provider.
- The identity provider must accept this identifier for platform components
- to be able to use the identity provider as an authentication mode.
-
- clientID must not be an empty string ("").
- minLength: 1
- type: string
- clientSecret:
- description: |-
- clientSecret is an optional field that configures the client secret used
- by the platform component when making authentication requests to the identity provider.
-
- When not specified, no client secret will be used when making authentication requests
- to the identity provider.
-
- When specified, clientSecret references a Secret in the 'openshift-config'
- namespace that contains the client secret in the 'clientSecret' key of the '.data' field.
- The client secret will be used when making authentication requests to the identity provider.
-
- Public clients do not require a client secret but private
- clients do require a client secret to work with the identity provider.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component being configured to use the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component being configured to use the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- extraScopes:
- description: |-
- extraScopes is an optional field that configures the extra scopes that should
- be requested by the platform component when making authentication requests to the
- identity provider.
- This is useful if you have configured claim mappings that requires specific
- scopes to be requested beyond the standard OIDC scopes.
-
- When omitted, no additional scopes are requested.
- items:
- type: string
- type: array
- x-kubernetes-list-type: set
- required:
- - clientID
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- required:
- - issuer
- - name
- type: object
- maxItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- serviceAccountIssuer:
- description: |-
- serviceAccountIssuer is the identifier of the bound service account token
- issuer.
- The default is https://kubernetes.default.svc
- WARNING: Updating this field will not result in immediate invalidation of all bound tokens with the
- previous issuer value. Instead, the tokens issued by previous service account issuer will continue to
- be trusted for a time period chosen by the platform (currently set to 24h).
- This time period is subject to change over time.
- This allows internal components to transition to use new service account issuer without service distruption.
- type: string
- type:
- description: |-
- type identifies the cluster managed, user facing authentication mode in use.
- Specifically, it manages the component that responds to login attempts.
- The default is IntegratedOAuth.
- enum:
- - ""
- - None
- - IntegratedOAuth
- - OIDC
- type: string
- webhookTokenAuthenticator:
- description: |-
- webhookTokenAuthenticator configures a remote token reviewer.
- These remote authentication webhooks can be used to verify bearer tokens
- via the tokenreviews.authentication.k8s.io REST API. This is required to
- honor bearer tokens that are provisioned by an external authentication service.
-
- Can only be set if "Type" is set to "None".
- properties:
- kubeConfig:
- description: |-
- kubeConfig references a secret that contains kube config file data which
- describes how to access the remote webhook service.
- The namespace for the referenced secret is openshift-config.
-
- For further details, see:
-
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
-
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- properties:
- name:
- description: name is the metadata.name of the referenced secret
- type: string
- required:
- - name
- type: object
- required:
- - kubeConfig
- type: object
- webhookTokenAuthenticators:
- description: webhookTokenAuthenticators is DEPRECATED, setting it
- has no effect.
- items:
- description: |-
- deprecatedWebhookTokenAuthenticator holds the necessary configuration options for a remote token authenticator.
- It's the same as WebhookTokenAuthenticator but it's missing the 'required' validation on KubeConfig field.
- properties:
- kubeConfig:
- description: |-
- kubeConfig contains kube config file data which describes how to access the remote webhook service.
- For further details, see:
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- The namespace for this secret is determined by the point of use.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- type: object
- type: array
- x-kubernetes-list-type: atomic
- type: object
- status:
- description: status holds observed values from the cluster. They may not
- be overridden.
- properties:
- integratedOAuthMetadata:
- description: |-
- integratedOAuthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for the in-cluster integrated OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- This contains the observed value based on cluster state.
- An explicitly set value in spec.oauthMetadata has precedence over this field.
- This field has no meaning if authentication spec.type is not set to IntegratedOAuth.
- The key "oauthMetadata" is used to locate the data.
- If the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config-managed.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcClients:
- description: |-
- oidcClients is where participating operators place the current OIDC client status
- for OIDC clients that can be customized by the cluster-admin.
- items:
- description: |-
- OIDCClientStatus represents the current state
- of platform components and how they interact with
- the configured identity providers.
- properties:
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component using the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component using the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- conditions:
- description: |-
- conditions are used to communicate the state of the `oidcClients` entry.
-
- Supported conditions include Available, Degraded and Progressing.
-
- If Available is true, the component is successfully using the configured client.
- If Degraded is true, that means something has gone wrong trying to handle the client configuration.
- If Progressing is true, that means the component is taking some action related to the `oidcClients` entry.
- items:
- description: Condition contains details for one aspect of
- the current state of this API Resource.
- properties:
- lastTransitionTime:
- description: |-
- lastTransitionTime is the last time the condition transitioned from one status to another.
- This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
- format: date-time
- type: string
- message:
- description: |-
- message is a human readable message indicating details about the transition.
- This may be an empty string.
- maxLength: 32768
- type: string
- observedGeneration:
- description: |-
- observedGeneration represents the .metadata.generation that the condition was set based upon.
- For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
- with respect to the current state of the instance.
- format: int64
- minimum: 0
- type: integer
- reason:
- description: |-
- reason contains a programmatic identifier indicating the reason for the condition's last transition.
- Producers of specific condition types may define expected values and meanings for this field,
- and whether the values are considered a guaranteed API.
- The value should be a CamelCase string.
- This field may not be empty.
- maxLength: 1024
- minLength: 1
- pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
- type: string
- status:
- description: status of the condition, one of True, False,
- Unknown.
- enum:
- - "True"
- - "False"
- - Unknown
- type: string
- type:
- description: type of condition in CamelCase or in foo.example.com/CamelCase.
- maxLength: 316
- pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
- type: string
- required:
- - lastTransitionTime
- - message
- - reason
- - status
- - type
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - type
- x-kubernetes-list-type: map
- consumingUsers:
- description: |-
- consumingUsers is an optional list of ServiceAccounts requiring
- read permissions on the `clientSecret` secret.
-
- consumingUsers must not exceed 5 entries.
- items:
- description: ConsumingUser is an alias for string which we
- add validation to. Currently only service accounts are supported.
- maxLength: 512
- minLength: 1
- pattern: ^system:serviceaccount:[a-z0-9]([-a-z0-9]*[a-z0-9])?:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
- type: string
- maxItems: 5
- type: array
- x-kubernetes-list-type: set
- currentOIDCClients:
- description: |-
- currentOIDCClients is an optional list of clients that the component is currently using.
- Entries must have unique issuerURL/clientID pairs.
- items:
- description: |-
- OIDCClientReference is a reference to a platform component
- client configuration.
- properties:
- clientID:
- description: |-
- clientID is a required field that specifies the client identifier, from
- the identity provider, that the platform component is using for authentication
- requests made to the identity provider.
-
- clientID must not be empty.
- minLength: 1
- type: string
- issuerURL:
- description: |-
- issuerURL is a required field that specifies the URL of the identity
- provider that this client is configured to make requests against.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- oidcProviderName:
- description: |-
- oidcProviderName is a required reference to the 'name' of the identity provider
- configured in 'oidcProviders' that this client is associated with.
-
- oidcProviderName must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - clientID
- - issuerURL
- - oidcProviderName
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - issuerURL
- - clientID
- x-kubernetes-list-type: map
- required:
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- type: object
- required:
- - spec
- type: object
- x-kubernetes-validations:
- - message: all oidcClients in the oidcProviders must match their componentName
- and componentNamespace to either a previously configured oidcClient or
- they must exist in the status.oidcClients
- rule: '!has(self.spec.oidcProviders) || self.spec.oidcProviders.all(p, !has(p.oidcClients)
- || p.oidcClients.all(specC, self.status.oidcClients.exists(statusC, statusC.componentNamespace
- == specC.componentNamespace && statusC.componentName == specC.componentName)
- || (has(oldSelf.spec.oidcProviders) && oldSelf.spec.oidcProviders.exists(oldP,
- oldP.name == p.name && has(oldP.oidcClients) && oldP.oidcClients.exists(oldC,
- oldC.componentNamespace == specC.componentNamespace && oldC.componentName
- == specC.componentName)))))'
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-TechPreviewNoUpgrade.crd.yaml b/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-TechPreviewNoUpgrade.crd.yaml
deleted file mode 100644
index 21ab3c98122..00000000000
--- a/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-TechPreviewNoUpgrade.crd.yaml
+++ /dev/null
@@ -1,850 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- api-approved.openshift.io: https://github.com/openshift/api/pull/470
- api.openshift.io/merged-by-featuregates: "true"
- include.release.openshift.io/ibm-cloud-managed: "true"
- release.openshift.io/bootstrap-required: "true"
- release.openshift.io/feature-set: TechPreviewNoUpgrade
- name: authentications.config.openshift.io
-spec:
- group: config.openshift.io
- names:
- kind: Authentication
- listKind: AuthenticationList
- plural: authentications
- singular: authentication
- scope: Cluster
- versions:
- - name: v1
- schema:
- openAPIV3Schema:
- description: |-
- Authentication specifies cluster-wide settings for authentication (like OAuth and
- webhook token authenticators). The canonical name of an instance is `cluster`.
-
- Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).
- properties:
- apiVersion:
- description: |-
- APIVersion defines the versioned schema of this representation of an object.
- Servers should convert recognized schemas to the latest internal value, and
- may reject unrecognized values.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
- type: string
- kind:
- description: |-
- Kind is a string value representing the REST resource this object represents.
- Servers may infer this from the endpoint the client submits requests to.
- Cannot be updated.
- In CamelCase.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- metadata:
- type: object
- spec:
- description: spec holds user settable values for configuration
- properties:
- oauthMetadata:
- description: |-
- oauthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for an external OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- If oauthMetadata.name is non-empty, this value has precedence
- over any metadata reference stored in status.
- The key "oauthMetadata" is used to locate the data.
- If specified and the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcProviders:
- description: |-
- oidcProviders are OIDC identity providers that can issue tokens
- for this cluster
- Can only be set if "Type" is set to "OIDC".
-
- At most one provider can be configured.
- items:
- properties:
- claimMappings:
- description: |-
- claimMappings is an optional field that configures the rules to be used by
- the Kubernetes API server for translating claims in a JWT token, issued
- by the identity provider, to a cluster identity.
- properties:
- extra:
- description: |-
- extra is an optional field for configuring the mappings
- used to construct the extra attribute for the cluster identity.
- When omitted, no extra attributes will be present on the cluster identity.
- key values for extra mappings must be unique.
- A maximum of 64 extra attribute mappings may be provided.
- items:
- description: |-
- ExtraMapping allows specifying a key and CEL expression
- to evaluate the keys' value. It is used to create additional
- mappings and attributes added to a cluster identity from
- a provided authentication token.
- properties:
- key:
- description: |-
- key is a required field that specifies the string
- to use as the extra attribute key.
-
- key must be a domain-prefix path (e.g 'example.org/foo').
- key must not exceed 510 characters in length.
- key must contain the '/' character, separating the domain and path characters.
- key must not be empty.
-
- The domain portion of the key (string of characters prior to the '/') must be a valid RFC1123 subdomain.
- It must not exceed 253 characters in length.
- It must start and end with an alphanumeric character.
- It must only contain lower case alphanumeric characters and '-' or '.'.
- It must not use the reserved domains, or be subdomains of, "kubernetes.io", "k8s.io", and "openshift.io".
-
- The path portion of the key (string of characters after the '/') must not be empty and must consist of at least one
- alphanumeric character, percent-encoded octets, '-', '.', '_', '~', '!', '$', '&', ''', '(', ')', '*', '+', ',', ';', '=', and ':'.
- It must not exceed 256 characters in length.
- maxLength: 510
- minLength: 1
- type: string
- x-kubernetes-validations:
- - message: key must contain the '/' character
- rule: self.contains('/')
- - message: the domain of the key must consist of only
- lower case alphanumeric characters, '-' or '.',
- and must start and end with an alphanumeric character
- rule: self.split('/', 2)[0].matches("^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$")
- - message: the domain of the key must not exceed 253
- characters in length
- rule: self.split('/', 2)[0].size() <= 253
- - message: the domain 'kubernetes.io' is reserved
- for Kubernetes use
- rule: self.split('/', 2)[0] != 'kubernetes.io'
- - message: the subdomains '*.kubernetes.io' are reserved
- for Kubernetes use
- rule: '!self.split(''/'', 2)[0].endsWith(''.kubernetes.io'')'
- - message: the domain 'k8s.io' is reserved for Kubernetes
- use
- rule: self.split('/', 2)[0] != 'k8s.io'
- - message: the subdomains '*.k8s.io' are reserved
- for Kubernetes use
- rule: '!self.split(''/'', 2)[0].endsWith(''.k8s.io'')'
- - message: the domain 'openshift.io' is reserved for
- OpenShift use
- rule: self.split('/', 2)[0] != 'openshift.io'
- - message: the subdomains '*.openshift.io' are reserved
- for OpenShift use
- rule: '!self.split(''/'', 2)[0].endsWith(''.openshift.io'')'
- - message: the path of the key must not be empty and
- must consist of at least one alphanumeric character,
- percent-encoded octets, apostrophe, '-', '.',
- '_', '~', '!', '$', '&', '(', ')', '*', '+', ',',
- ';', '=', and ':'
- rule: self.split('/', 2)[1].matches('[A-Za-z0-9/\\-._~%!$&\'()*+;=:]+')
- - message: the path of the key must not exceed 256
- characters in length
- rule: self.split('/', 2)[1].size() <= 256
- valueExpression:
- description: |-
- valueExpression is a required field to specify the CEL expression to extract
- the extra attribute value from a JWT token's claims.
- valueExpression must produce a string or string array value.
- "", [], and null are treated as the extra mapping not being present.
- Empty string values within an array are filtered out.
-
- CEL expressions have access to the token claims
- through a CEL variable, 'claims'.
- 'claims' is a map of claim names to claim values.
- For example, the 'sub' claim value can be accessed as 'claims.sub'.
- Nested claims can be accessed using dot notation ('claims.foo.bar').
-
- valueExpression must not exceed 4096 characters in length.
- valueExpression must not be empty.
- maxLength: 4096
- minLength: 1
- type: string
- required:
- - key
- - valueExpression
- type: object
- maxItems: 64
- type: array
- x-kubernetes-list-map-keys:
- - key
- x-kubernetes-list-type: map
- groups:
- description: |-
- groups is an optional field that configures how the groups of a cluster identity
- should be constructed from the claims in a JWT token issued
- by the identity provider.
- When referencing a claim, if the claim is present in the JWT
- token, its value must be a list of groups separated by a comma (',').
- For example - '"example"' and '"exampleOne", "exampleTwo", "exampleThree"' are valid claim values.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix is an optional field that configures the prefix that will be
- applied to the cluster identity attribute during the process of mapping
- JWT claims to cluster identity attributes.
-
- When omitted (""), no prefix is applied to the cluster identity attribute.
-
- Example: if `prefix` is set to "myoidc:" and the `claim` in JWT contains
- an array of strings "a", "b" and "c", the mapping will result in an
- array of string "myoidc:a", "myoidc:b" and "myoidc:c".
- type: string
- required:
- - claim
- type: object
- uid:
- description: |-
- uid is an optional field for configuring the claim mapping
- used to construct the uid for the cluster identity.
-
- When using uid.claim to specify the claim it must be a single string value.
- When using uid.expression the expression must result in a single string value.
-
- When omitted, this means the user has no opinion and the platform
- is left to choose a default, which is subject to change over time.
- The current default is to use the 'sub' claim.
- properties:
- claim:
- description: |-
- claim is an optional field for specifying the
- JWT token claim that is used in the mapping.
- The value of this claim will be assigned to
- the field in which this mapping is associated.
-
- Precisely one of claim or expression must be set.
- claim must not be specified when expression is set.
- When specified, claim must be at least 1 character in length
- and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- expression:
- description: |-
- expression is an optional field for specifying a
- CEL expression that produces a string value from
- JWT token claims.
-
- CEL expressions have access to the token claims
- through a CEL variable, 'claims'.
- 'claims' is a map of claim names to claim values.
- For example, the 'sub' claim value can be accessed as 'claims.sub'.
- Nested claims can be accessed using dot notation ('claims.foo.bar').
-
- Precisely one of claim or expression must be set.
- expression must not be specified when claim is set.
- When specified, expression must be at least 1 character in length
- and must not exceed 4096 characters in length.
- maxLength: 4096
- minLength: 1
- type: string
- type: object
- x-kubernetes-validations:
- - message: precisely one of claim or expression must be
- set
- rule: 'has(self.claim) ? !has(self.expression) : has(self.expression)'
- username:
- description: |-
- username is an optional field that configures how the username of a cluster identity
- should be constructed from the claims in a JWT token issued by the identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the JWT token
- claim whose value is assigned to the cluster identity
- field associated with this mapping.
- type: string
- prefix:
- description: |-
- prefix configures the prefix that should be prepended to the value
- of the JWT claim.
-
- prefix must be set when prefixPolicy is set to 'Prefix' and must be unset otherwise.
- properties:
- prefixString:
- description: |-
- prefixString is a required field that configures the prefix that will
- be applied to cluster identity username attribute
- during the process of mapping JWT claims to cluster identity attributes.
-
- prefixString must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - prefixString
- type: object
- prefixPolicy:
- description: |-
- prefixPolicy is an optional field that configures how a prefix should be
- applied to the value of the JWT claim specified in the 'claim' field.
-
- Allowed values are 'Prefix', 'NoPrefix', and omitted (not provided or an empty string).
-
- When set to 'Prefix', the value specified in the prefix field will be
- prepended to the value of the JWT claim.
- The prefix field must be set when prefixPolicy is 'Prefix'.
-
- When set to 'NoPrefix', no prefix will be prepended to the value
- of the JWT claim.
-
- When omitted, this means no opinion and the platform is left to choose
- any prefixes that are applied which is subject to change over time.
- Currently, the platform prepends `{issuerURL}#` to the value of the JWT claim
- when the claim is not 'email'.
- As an example, consider the following scenario:
- `prefix` is unset, `issuerURL` is set to `https://myoidc.tld`,
- the JWT claims include "username":"userA" and "email":"userA@myoidc.tld",
- and `claim` is set to:
- - "username": the mapped value will be "https://myoidc.tld#userA"
- - "email": the mapped value will be "userA@myoidc.tld"
- enum:
- - ""
- - NoPrefix
- - Prefix
- type: string
- required:
- - claim
- type: object
- x-kubernetes-validations:
- - message: prefix must be set if prefixPolicy is 'Prefix',
- but must remain unset otherwise
- rule: 'has(self.prefixPolicy) && self.prefixPolicy ==
- ''Prefix'' ? (has(self.prefix) && size(self.prefix.prefixString)
- > 0) : !has(self.prefix)'
- type: object
- claimValidationRules:
- description: |-
- claimValidationRules is an optional field that configures the rules to
- be used by the Kubernetes API server for validating the claims in a JWT
- token issued by the identity provider.
-
- Validation rules are joined via an AND operation.
- items:
- properties:
- requiredClaim:
- description: |-
- requiredClaim is an optional field that configures the required claim
- and value that the Kubernetes API server will use to validate if an incoming
- JWT is valid for this identity provider.
- properties:
- claim:
- description: |-
- claim is a required field that configures the name of the required claim.
- When taken from the JWT claims, claim must be a string value.
-
- claim must not be an empty string ("").
- minLength: 1
- type: string
- requiredValue:
- description: |-
- requiredValue is a required field that configures the value that 'claim' must
- have when taken from the incoming JWT claims.
- If the value in the JWT claims does not match, the token
- will be rejected for authentication.
-
- requiredValue must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - claim
- - requiredValue
- type: object
- type:
- default: RequiredClaim
- description: |-
- type is an optional field that configures the type of the validation rule.
-
- Allowed values are 'RequiredClaim' and omitted (not provided or an empty string).
-
- When set to 'RequiredClaim', the Kubernetes API server
- will be configured to validate that the incoming JWT
- contains the required claim and that its value matches
- the required value.
-
- Defaults to 'RequiredClaim'.
- enum:
- - RequiredClaim
- type: string
- type: object
- type: array
- x-kubernetes-list-type: atomic
- issuer:
- description: |-
- issuer is a required field that configures how the platform interacts
- with the identity provider and how tokens issued from the identity provider
- are evaluated by the Kubernetes API server.
- properties:
- audiences:
- description: |-
- audiences is a required field that configures the acceptable audiences
- the JWT token, issued by the identity provider, must be issued to.
- At least one of the entries must match the 'aud' claim in the JWT token.
-
- audiences must contain at least one entry and must not exceed ten entries.
- items:
- minLength: 1
- type: string
- maxItems: 10
- minItems: 1
- type: array
- x-kubernetes-list-type: set
- issuerCertificateAuthority:
- description: |-
- issuerCertificateAuthority is an optional field that configures the
- certificate authority, used by the Kubernetes API server, to validate
- the connection to the identity provider when fetching discovery information.
-
- When not specified, the system trust is used.
-
- When specified, it must reference a ConfigMap in the openshift-config
- namespace containing the PEM-encoded CA certificates under the 'ca-bundle.crt'
- key in the data field of the ConfigMap.
- properties:
- name:
- description: name is the metadata.name of the referenced
- config map
- type: string
- required:
- - name
- type: object
- issuerURL:
- description: |-
- issuerURL is a required field that configures the URL used to issue tokens
- by the identity provider.
- The Kubernetes API server determines how authentication tokens should be handled
- by matching the 'iss' claim in the JWT to the issuerURL of configured identity providers.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- required:
- - audiences
- - issuerURL
- type: object
- name:
- description: |-
- name is a required field that configures the unique human-readable identifier
- associated with the identity provider.
- It is used to distinguish between multiple identity providers
- and has no impact on token validation or authentication mechanics.
-
- name must not be an empty string ("").
- minLength: 1
- type: string
- oidcClients:
- description: |-
- oidcClients is an optional field that configures how on-cluster,
- platform clients should request tokens from the identity provider.
- oidcClients must not exceed 20 entries and entries must have unique namespace/name pairs.
- items:
- description: |-
- OIDCClientConfig configures how platform clients
- interact with identity providers as an authentication
- method
- properties:
- clientID:
- description: |-
- clientID is a required field that configures the client identifier, from
- the identity provider, that the platform component uses for authentication
- requests made to the identity provider.
- The identity provider must accept this identifier for platform components
- to be able to use the identity provider as an authentication mode.
-
- clientID must not be an empty string ("").
- minLength: 1
- type: string
- clientSecret:
- description: |-
- clientSecret is an optional field that configures the client secret used
- by the platform component when making authentication requests to the identity provider.
-
- When not specified, no client secret will be used when making authentication requests
- to the identity provider.
-
- When specified, clientSecret references a Secret in the 'openshift-config'
- namespace that contains the client secret in the 'clientSecret' key of the '.data' field.
- The client secret will be used when making authentication requests to the identity provider.
-
- Public clients do not require a client secret but private
- clients do require a client secret to work with the identity provider.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component being configured to use the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component being configured to use the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- extraScopes:
- description: |-
- extraScopes is an optional field that configures the extra scopes that should
- be requested by the platform component when making authentication requests to the
- identity provider.
- This is useful if you have configured claim mappings that requires specific
- scopes to be requested beyond the standard OIDC scopes.
-
- When omitted, no additional scopes are requested.
- items:
- type: string
- type: array
- x-kubernetes-list-type: set
- required:
- - clientID
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- required:
- - issuer
- - name
- type: object
- maxItems: 1
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- serviceAccountIssuer:
- description: |-
- serviceAccountIssuer is the identifier of the bound service account token
- issuer.
- The default is https://kubernetes.default.svc
- WARNING: Updating this field will not result in immediate invalidation of all bound tokens with the
- previous issuer value. Instead, the tokens issued by previous service account issuer will continue to
- be trusted for a time period chosen by the platform (currently set to 24h).
- This time period is subject to change over time.
- This allows internal components to transition to use new service account issuer without service distruption.
- type: string
- type:
- description: |-
- type identifies the cluster managed, user facing authentication mode in use.
- Specifically, it manages the component that responds to login attempts.
- The default is IntegratedOAuth.
- enum:
- - ""
- - None
- - IntegratedOAuth
- - OIDC
- type: string
- webhookTokenAuthenticator:
- description: |-
- webhookTokenAuthenticator configures a remote token reviewer.
- These remote authentication webhooks can be used to verify bearer tokens
- via the tokenreviews.authentication.k8s.io REST API. This is required to
- honor bearer tokens that are provisioned by an external authentication service.
-
- Can only be set if "Type" is set to "None".
- properties:
- kubeConfig:
- description: |-
- kubeConfig references a secret that contains kube config file data which
- describes how to access the remote webhook service.
- The namespace for the referenced secret is openshift-config.
-
- For further details, see:
-
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
-
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- properties:
- name:
- description: name is the metadata.name of the referenced secret
- type: string
- required:
- - name
- type: object
- required:
- - kubeConfig
- type: object
- webhookTokenAuthenticators:
- description: webhookTokenAuthenticators is DEPRECATED, setting it
- has no effect.
- items:
- description: |-
- deprecatedWebhookTokenAuthenticator holds the necessary configuration options for a remote token authenticator.
- It's the same as WebhookTokenAuthenticator but it's missing the 'required' validation on KubeConfig field.
- properties:
- kubeConfig:
- description: |-
- kubeConfig contains kube config file data which describes how to access the remote webhook service.
- For further details, see:
- https://kubernetes.io/docs/reference/access-authn-authz/authentication/#webhook-token-authentication
- The key "kubeConfig" is used to locate the data.
- If the secret or expected key is not found, the webhook is not honored.
- If the specified kube config data is not valid, the webhook is not honored.
- The namespace for this secret is determined by the point of use.
- properties:
- name:
- description: name is the metadata.name of the referenced
- secret
- type: string
- required:
- - name
- type: object
- type: object
- type: array
- x-kubernetes-list-type: atomic
- type: object
- status:
- description: status holds observed values from the cluster. They may not
- be overridden.
- properties:
- integratedOAuthMetadata:
- description: |-
- integratedOAuthMetadata contains the discovery endpoint data for OAuth 2.0
- Authorization Server Metadata for the in-cluster integrated OAuth server.
- This discovery document can be viewed from its served location:
- oc get --raw '/.well-known/oauth-authorization-server'
- For further details, see the IETF Draft:
- https://tools.ietf.org/html/draft-ietf-oauth-discovery-04#section-2
- This contains the observed value based on cluster state.
- An explicitly set value in spec.oauthMetadata has precedence over this field.
- This field has no meaning if authentication spec.type is not set to IntegratedOAuth.
- The key "oauthMetadata" is used to locate the data.
- If the config map or expected key is not found, no metadata is served.
- If the specified metadata is not valid, no metadata is served.
- The namespace for this config map is openshift-config-managed.
- properties:
- name:
- description: name is the metadata.name of the referenced config
- map
- type: string
- required:
- - name
- type: object
- oidcClients:
- description: |-
- oidcClients is where participating operators place the current OIDC client status
- for OIDC clients that can be customized by the cluster-admin.
- items:
- description: |-
- OIDCClientStatus represents the current state
- of platform components and how they interact with
- the configured identity providers.
- properties:
- componentName:
- description: |-
- componentName is a required field that specifies the name of the platform
- component using the identity provider as an authentication mode.
- It is used in combination with componentNamespace as a unique identifier.
-
- componentName must not be an empty string ("") and must not exceed 256 characters in length.
- maxLength: 256
- minLength: 1
- type: string
- componentNamespace:
- description: |-
- componentNamespace is a required field that specifies the namespace in which the
- platform component using the identity provider as an authentication
- mode is running.
- It is used in combination with componentName as a unique identifier.
-
- componentNamespace must not be an empty string ("") and must not exceed 63 characters in length.
- maxLength: 63
- minLength: 1
- type: string
- conditions:
- description: |-
- conditions are used to communicate the state of the `oidcClients` entry.
-
- Supported conditions include Available, Degraded and Progressing.
-
- If Available is true, the component is successfully using the configured client.
- If Degraded is true, that means something has gone wrong trying to handle the client configuration.
- If Progressing is true, that means the component is taking some action related to the `oidcClients` entry.
- items:
- description: Condition contains details for one aspect of
- the current state of this API Resource.
- properties:
- lastTransitionTime:
- description: |-
- lastTransitionTime is the last time the condition transitioned from one status to another.
- This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
- format: date-time
- type: string
- message:
- description: |-
- message is a human readable message indicating details about the transition.
- This may be an empty string.
- maxLength: 32768
- type: string
- observedGeneration:
- description: |-
- observedGeneration represents the .metadata.generation that the condition was set based upon.
- For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
- with respect to the current state of the instance.
- format: int64
- minimum: 0
- type: integer
- reason:
- description: |-
- reason contains a programmatic identifier indicating the reason for the condition's last transition.
- Producers of specific condition types may define expected values and meanings for this field,
- and whether the values are considered a guaranteed API.
- The value should be a CamelCase string.
- This field may not be empty.
- maxLength: 1024
- minLength: 1
- pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
- type: string
- status:
- description: status of the condition, one of True, False,
- Unknown.
- enum:
- - "True"
- - "False"
- - Unknown
- type: string
- type:
- description: type of condition in CamelCase or in foo.example.com/CamelCase.
- maxLength: 316
- pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
- type: string
- required:
- - lastTransitionTime
- - message
- - reason
- - status
- - type
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - type
- x-kubernetes-list-type: map
- consumingUsers:
- description: |-
- consumingUsers is an optional list of ServiceAccounts requiring
- read permissions on the `clientSecret` secret.
-
- consumingUsers must not exceed 5 entries.
- items:
- description: ConsumingUser is an alias for string which we
- add validation to. Currently only service accounts are supported.
- maxLength: 512
- minLength: 1
- pattern: ^system:serviceaccount:[a-z0-9]([-a-z0-9]*[a-z0-9])?:[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$
- type: string
- maxItems: 5
- type: array
- x-kubernetes-list-type: set
- currentOIDCClients:
- description: |-
- currentOIDCClients is an optional list of clients that the component is currently using.
- Entries must have unique issuerURL/clientID pairs.
- items:
- description: |-
- OIDCClientReference is a reference to a platform component
- client configuration.
- properties:
- clientID:
- description: |-
- clientID is a required field that specifies the client identifier, from
- the identity provider, that the platform component is using for authentication
- requests made to the identity provider.
-
- clientID must not be empty.
- minLength: 1
- type: string
- issuerURL:
- description: |-
- issuerURL is a required field that specifies the URL of the identity
- provider that this client is configured to make requests against.
-
- issuerURL must use the 'https' scheme.
- pattern: ^https:\/\/[^\s]
- type: string
- oidcProviderName:
- description: |-
- oidcProviderName is a required reference to the 'name' of the identity provider
- configured in 'oidcProviders' that this client is associated with.
-
- oidcProviderName must not be an empty string ("").
- minLength: 1
- type: string
- required:
- - clientID
- - issuerURL
- - oidcProviderName
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - issuerURL
- - clientID
- x-kubernetes-list-type: map
- required:
- - componentName
- - componentNamespace
- type: object
- maxItems: 20
- type: array
- x-kubernetes-list-map-keys:
- - componentNamespace
- - componentName
- x-kubernetes-list-type: map
- type: object
- required:
- - spec
- type: object
- x-kubernetes-validations:
- - message: all oidcClients in the oidcProviders must match their componentName
- and componentNamespace to either a previously configured oidcClient or
- they must exist in the status.oidcClients
- rule: '!has(self.spec.oidcProviders) || self.spec.oidcProviders.all(p, !has(p.oidcClients)
- || p.oidcClients.all(specC, self.status.oidcClients.exists(statusC, statusC.componentNamespace
- == specC.componentNamespace && statusC.componentName == specC.componentName)
- || (has(oldSelf.spec.oidcProviders) && oldSelf.spec.oidcProviders.exists(oldP,
- oldP.name == p.name && has(oldP.oidcClients) && oldP.oidcClients.exists(oldC,
- oldC.componentNamespace == specC.componentNamespace && oldC.componentName
- == specC.componentName)))))'
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-CustomNoUpgrade.crd.yaml b/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift.crd.yaml
similarity index 99%
rename from payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-CustomNoUpgrade.crd.yaml
rename to payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift.crd.yaml
index f6c3e4607c7..e16554e7044 100644
--- a/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift-CustomNoUpgrade.crd.yaml
+++ b/payload-manifests/crds/0000_10_config-operator_01_authentications-Hypershift.crd.yaml
@@ -6,7 +6,6 @@ metadata:
api.openshift.io/merged-by-featuregates: "true"
include.release.openshift.io/ibm-cloud-managed: "true"
release.openshift.io/bootstrap-required: "true"
- release.openshift.io/feature-set: CustomNoUpgrade
name: authentications.config.openshift.io
spec:
group: config.openshift.io
diff --git a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml
index 6310d7730c9..b7378a7c7a2 100644
--- a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml
+++ b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml
@@ -64,9 +64,6 @@
{
"name": "Example2"
},
- {
- "name": "ExternalOIDCWithUIDAndExtraClaimMappings"
- },
{
"name": "GCPClusterHostedDNS"
},
@@ -225,6 +222,9 @@
{
"name": "ExternalOIDC"
},
+ {
+ "name": "ExternalOIDCWithUIDAndExtraClaimMappings"
+ },
{
"name": "GCPLabelsTags"
},