From 39003465192e892272ee13ffef4d3422ee8c5db4 Mon Sep 17 00:00:00 2001 From: Rahul Anand Date: Tue, 7 Jun 2022 14:39:42 +0530 Subject: [PATCH] AuthPolicy proposal markdown (#162) * add proposal markdown and image * add new line to the doc --- doc/proposals/authpolicy-crd.md | 120 ++++++++++++++++++ .../images/authpolicy-control-structure.png | Bin 0 -> 47145 bytes 2 files changed, 120 insertions(+) create mode 100644 doc/proposals/authpolicy-crd.md create mode 100644 doc/proposals/images/authpolicy-control-structure.png diff --git a/doc/proposals/authpolicy-crd.md b/doc/proposals/authpolicy-crd.md new file mode 100644 index 0000000..3c04204 --- /dev/null +++ b/doc/proposals/authpolicy-crd.md @@ -0,0 +1,120 @@ +# AuthPolicy Proposal +Authors: Rahul Anand (rahanand@redhat.com), Craig Brookes (cbrookes@redhat.com) + +## Introduction +Istio offers an [AuthorizationPolicy](https://istio.io/latest/docs/reference/config/security/authorization-policy/) resource which requires it to be applied in the namespace of the workload. This means that all the configuration is completely decoupled from routing logic like hostnames and paths. For managed gateway scenario, users need to either ask cluster operator to apply their policies in the gateway's namespace (which is not scalable) or use sidecars/personal gateway for their workloads in their own namepsace which is not optimal. + +The new [GatewayAPI](https://gateway-api.sigs.k8s.io/) defines a standard [policy attachment mechanism](https://gateway-api.sigs.k8s.io/v1alpha2/references/policy-attachment/) for hierarchical effect of vendor specific policies. We believe creating a new CRD with concepts from Gateway API that solves use cases of Istio's AuthorizationPolicy plus its limitations as described above. + +## Goals + +With `targetRef` from policy attachment concept, following are the goals: +- Application developer should be able target [`HTTPRoute`](https://gateway-api.sigs.k8s.io/v1alpha2/references/spec/#gateway.networking.k8s.io/v1alpha2.HTTPRoute) object in their own namespace. This will define authorization policy at the hostname/domain/vHost level. +- Cluster operator should be able to target [`Gateway`](https://gateway-api.sigs.k8s.io/v1alpha2/references/spec/#gateway.networking.k8s.io/v1alpha2.Gateway) object along with HTTPRoute in the gateway's namespace. This will define policy at the listener level. +- To reduce context sharing at the gateway and external authorization provider, action type and auth-provider are defaulted to `CUSTOM` and authorino respectively. + +## Proposed Solution +Following is the proposed new CRD that combines policy attachment concepts with Istio's AuthorizationPolicy: + +```yaml= +apiVersion: apim.kuadrant.io/v1alpha1 +kind: AuthPolicy +metadata: + name: toystore +spec: + targetRef: + group: # Only takes gateway.networking.k8s.io + kind: HTTPRoute | Gateway + name: toystore + rules: + - hosts: ["*.toystore.com"] + methods: ["GET", "POST"] + paths: ["/admin"] + authSchemes: # Embedded AuthConfigs + - hosts: ["admin.toystore.com"] + identity: + - name: idp-users + oidc: + endpoint: https://my-idp.com/auth/realm + authorization: + - name: check-claim + json: + rules: + - selector: auth.identity.group + operator: eq + value: allowed-users +status: + conditions: + - lastTransitionTime: "2022-06-06T11:03:04Z" + message: HTTPRoute/Gateway is protected/Error + reason: HTTPRouteProtected/GatewayProtected/Error + status: "True" | "False" + type: Available + observedGeneration: 1 +``` + +### Target Reference +`targetRef` field is taken from [policy attachment's target reference API](https://gateway-api.sigs.k8s.io/v1alpha2/references/policy-attachment/#target-reference-api). It can only target one resource at a time. Fields included inside: +- `Group` is the group of the target resource. Only valid option is `gateway.networking.k8s.io`. +- `Kind` is kind of the target resource. Only valid options are `HTTPRoute` and `Gateway`. +- `Name` is the name of the target resource. +- `Namespace` is the namespace of the referent. Currently only local objects can be referred so value is ignored. + +### Rule objects +`rules` field describe the requests that will be routed to external authorization provider (like authorino). It includes: +- `hosts`: a host is matched over `Host` request header or `SNI` if TLS is used. + +**Note**: Each rule's host in a route level policy must match at least one hostname regex described in [HTTPRoute's `hostnames`](https://gateway-api.sigs.k8s.io/v1alpha2/references/spec/#gateway.networking.k8s.io/v1alpha2.Hostname) but Gateway level policies have no such restriction. +``` + targetRef + HTTPRoute ◄───────────────────────── AuthPolicy + hostnames: ["*.toystore.com"] rules: + ┌────────────────────────────┐ + Rejected Rule: │- hosts: ["*.carstore.com"] │ + Regex mismatch │ methods: ["GET", "DELETE"]│ + └────────────────────────────┘ + + ┌───────────────────────────────┐ + Accepted Rule: │- hosts: ["admin.toystore.com"]│ + Regex match │ methods: ["POST", "DELETE"] │ + └───────────────────────────────┘ +``` + +- `paths`: a path matches over request path like `/admin/`. +- `methods`: a method matches over request method like `DELETE`. + +All the rules in a AuthPolicy are translated into list of [`Operations`](https://istio.io/latest/docs/reference/config/security/authorization-policy/#Operation) under a single [Istio's AuthorizationPolicy](https://istio.io/latest/docs/reference/config/security/authorization-policy/) with CUSTOM [action](https://istio.io/latest/docs/reference/config/security/authorization-policy/#AuthorizationPolicy-Action) type and [external authorization provider](https://istio.io/latest/docs/reference/config/security/authorization-policy/#AuthorizationPolicy-ExtensionProvider) as authorino. + +### AuthScheme object +AuthScheme is embedded form of [Authorino's AuthConfig](https://github.com/Kuadrant/authorino/blob/main/docs/architecture.md#the-authorino-authconfig-custom-resource-definition-crd). Applying an AuthPolicy resource with at least one AuthScheme would create same number of AuthConfigs in the Gateway's namespace. + +**Note**: Following the heirarchial constraints, `spec.AuthSchemes.Hosts` must match at least one `spec.Hosts` for AuthPolicy to be validated. + +The example AuthPolicy showed above will create the following AuthConfig: + +```yaml= +apiVersion: authorino.kuadrant.io/v1beta1 +kind: AuthConfig +metadata: + name: default-toystore-1 +spec: + hosts: + - "admin.toystore.com" + identity: + - name: idp-users + oidc: + endpoint: https://my-idp.com/auth/realm + authorization: + - name: check-claim + json: + rules: + - selector: auth.identity.group + operator: eq + value: allowed-users +``` + +Overall control structure looks like the following between the developer and the kuadrant controller: +![](images/authpolicy-control-structure.png) + +## Checklist +- Issue tracking this proposal: https://github.com/Kuadrant/kuadrant-controller/issues/130 diff --git a/doc/proposals/images/authpolicy-control-structure.png b/doc/proposals/images/authpolicy-control-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f37352a88aa23a629c7f374762cf0b8db3ad8e GIT binary patch literal 47145 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