|
| 1 | +--- |
| 2 | +title: "AC-06 Least Privilege" |
| 3 | +linktitle: "AC-06" |
| 4 | +url: /private-mendix-platform/nist-controls/ac-06/ |
| 5 | +description: "Documents the Private Mendix Platform's compliance with the AC-06 control of the NIST 800-53 framework." |
| 6 | +weight: 20 |
| 7 | +--- |
| 8 | + |
| 9 | +## Introduction |
| 10 | + |
| 11 | +This document describes how Private Mendix Platform fulfills the AC-06 control. |
| 12 | + |
| 13 | +| Control ID | AC-06 | |
| 14 | +| --- | --- | |
| 15 | +| Control category | AC - Access Control | |
| 16 | +| Requirement baseline | FEDRAMP MODERATE | |
| 17 | +| Responsibility and ownership | Mendix - Private Mendix Platform, Mendix - Operator, Mendix - Studio Pro/Runtime, Customer - Infra, Customer - Org | |
| 18 | + |
| 19 | +## Control |
| 20 | + |
| 21 | +The organization employs the principle of least privilege, allowing only authorized accesses for users (or processes acting on behalf of users) which are necessary to accomplish assigned tasks in accordance with organizational missions and business functions. |
| 22 | + |
| 23 | +### Supplemental Guidance |
| 24 | + |
| 25 | +Organizations employ least privilege for specific duties and information systems. The principle of least privilege is also applied to information system processes, ensuring that the processes operate at privilege levels no higher than necessary to accomplish required organizational missions/business functions. Organizations consider the creation of additional processes, roles, and information system accounts as necessary, to achieve least privilege. Organizations also apply least privilege to the development, implementation, and operation of organizational information systems. |
| 26 | + |
| 27 | +* AC-02 |
| 28 | +* [AC-03](/private-mendix-platform/nist-controls/ac-03/) |
| 29 | +* AC-05 |
| 30 | +* CM-06 |
| 31 | +* CM-07 |
| 32 | +* PL-02 |
| 33 | + |
| 34 | +## Responsibility |
| 35 | + |
| 36 | +### Mendix Responsibility |
| 37 | + |
| 38 | +#### Private Mendix Platform Installation |
| 39 | + |
| 40 | +Private Mendix Platform supports least privilege by requiring explicit configuration of infrastructure, separating operational scopes, and allowing customers to enable only the functions they need. Private Mendix Platform is deployed into customer-managed Kubernetes environments with defined namespaces, storage, database, registry, and identity settings rather than relying on broad default access. Private Mendix Platform also supports least privilege through controlled authentication and secret management. Sensitive configuration, including database, storage, and administrator credentials, can be sourced from external secret providers. |
| 41 | + |
| 42 | +##### Build Agent |
| 43 | + |
| 44 | +Private Mendix Platform provides a build agent to orchestrate build pods. Build agent implements a secure, least-privilege access model for creating Pods within the Kubernetes cluster. The core concept is to decouple the external user's permissions from the internal service's capabilities by leveraging Kubernetes RBAC (Role-Based Access Control). |
| 45 | + |
| 46 | +##### Connected Mode Deployment |
| 47 | + |
| 48 | +This supports least privilege by centralizing deployment functions in the operator and agent model and limiting the number of users who need direct cluster administration rights. Initial cluster registration and operator installation may still require elevated infrastructure permissions, but ongoing application deployment and environment management can be delegated through Private Mendix Platform without granting broad cluster privileges to all app-level users. |
| 49 | + |
| 50 | +#### Private Mendix Platform Operation (Admin Access) |
| 51 | + |
| 52 | +Private Mendix Platform restricts administrative access through role separation, configurable role assignment, and enterprise identity integration. Administrative duties are divided between Company admin and System admin roles. This separation limits unnecessary access to platform-wide configuration. |
| 53 | + |
| 54 | +Private Mendix Platform further supports least privilege through Dynamic Role Management. Predefined roles such as Developer, Contributor, Operator, and Administrator can be assigned and customized for project, cluster, and CI/CD permissions. Roles are assigned through group membership and applied only to owned or associated resources, allowing access to align with organizational and operational boundaries. |
| 55 | + |
| 56 | +#### Private Mendix Platform Application Management |
| 57 | + |
| 58 | +Private Mendix Platform associates access with apps, groups, namespaces, and roles. App owners can invite users and assign roles, while inherited group roles are synchronized to owned or associated resources. This means the control plane does not require every user to have direct broad access to clusters or all applications. Instead, access is derived from resource ownership and group-based role assignment. |
| 59 | + |
| 60 | +### Customer Responsibility |
| 61 | + |
| 62 | +* The customer cluster admin uses the Private Mendix Platform installer to grant these permissions to the build agent component. |
| 63 | +* The customer must correctly install components related to connected mode deployment, such as Interactor, Collector, and Authenticator. |
| 64 | +* The customer's administrator must properly grant specific people access to the cluster and namespace management for connected mode deployment. |
| 65 | +* The customer must grant proper permissions to give the Private Mendix Platform `mxpc-cli` access to the destination Kubernetes cluster. After that, a piece of script must be executed with `mxpc-cli`. |
| 66 | +* Customers must configure Private Mendix Platform roles, group and app ownership, and approval workflows, so that CI/CD and deployment actions are performed only by explicitly authorized users and services |
| 67 | +* App implementers and App operators must connect to the customer's IdP of choice, use Private Mendix Platform roles, group ownership, environment separation, application-level security, and controlled approval-based deployment processes, so that users and teams receive only the minimum access required for development, operations, and production deployment. |
| 68 | +* Infrastructure implementers and operators are responsible for deploying Private Mendix Platform in a least-privilege environment by separating namespaces where required, scoping Kubernetes RBAC and service identities to only required functions, using managed identity and centralized secret management where supported, restricting access to infrastructure services and tokens, and disabling unused platform capabilities. Because Private Mendix Platform cluster integration relies on customer-created tokens and RBAC objects, customers must demonstrate that these permissions are explicitly limited and justified rather than broadly granted. |
| 69 | + |
| 70 | +## Guidance |
| 71 | + |
| 72 | +### Mendix Responsibility |
| 73 | + |
| 74 | +#### Build Agent |
| 75 | + |
| 76 | +By defining `ServiceAccounts`, `Roles`, `RoleBindings`, and security policies in Helm charts, the Private Mendix Platform installer ensures that Kubernetes build agents operate under the principle of least privilege. This reduces security risks while maintaining CI/CD functionality. |
| 77 | + |
| 78 | +##### ServiceAccount |
| 79 | + |
| 80 | +```yaml |
| 81 | +apiVersion: v1 |
| 82 | +automountServiceAccountToken: true |
| 83 | +kind: ServiceAccount |
| 84 | +metadata: |
| 85 | + annotations: |
| 86 | + meta.helm.sh/release-name: mxplatform-kube-agent |
| 87 | + meta.helm.sh/release-namespace: build |
| 88 | + creationTimestamp: "2025-06-12T02:18:33Z" |
| 89 | + labels: |
| 90 | + app.kubernetes.io/instance: mxplatform-kube-agent |
| 91 | + app.kubernetes.io/managed-by: Helm |
| 92 | + app.kubernetes.io/name: mxplatform-kube-agent |
| 93 | + app.kubernetes.io/version: 1.16.0 |
| 94 | + helm.sh/chart: mxplatform-kube-agent-0.1.0 |
| 95 | + name: mxplatform-kube-agent |
| 96 | + namespace: build |
| 97 | + resourceVersion: "89036755" |
| 98 | + uid: 5a1d4e2d-5ac5-4e26-be59-8c95aabe62c9 |
| 99 | +``` |
| 100 | +
|
| 101 | +#### Role |
| 102 | +
|
| 103 | +```yaml |
| 104 | +apiVersion: rbac.authorization.k8s.io/v1 |
| 105 | +kind: Role |
| 106 | +metadata: |
| 107 | + annotations: |
| 108 | + meta.helm.sh/release-name: mxplatform-kube-agent |
| 109 | + meta.helm.sh/release-namespace: build |
| 110 | + creationTimestamp: "2025-06-12T02:18:33Z" |
| 111 | + labels: |
| 112 | + app.kubernetes.io/managed-by: Helm |
| 113 | + name: pod-manager-role |
| 114 | + namespace: build |
| 115 | + resourceVersion: "89036756" |
| 116 | + uid: 1ce6a19d-639f-4a17-84a4-91b526970df1 |
| 117 | +rules: |
| 118 | +- apiGroups: |
| 119 | + - "" |
| 120 | + resources: |
| 121 | + - pods |
| 122 | + verbs: |
| 123 | + - get |
| 124 | + - list |
| 125 | + - watch |
| 126 | + - create |
| 127 | + - delete |
| 128 | +``` |
| 129 | +
|
| 130 | +#### RoleBinding |
| 131 | +
|
| 132 | +```yaml |
| 133 | +apiVersion: rbac.authorization.k8s.io/v1 |
| 134 | +kind: RoleBinding |
| 135 | +metadata: |
| 136 | + annotations: |
| 137 | + meta.helm.sh/release-name: mxplatform-kube-agent |
| 138 | + meta.helm.sh/release-namespace: build |
| 139 | + creationTimestamp: "2025-06-12T02:18:33Z" |
| 140 | + labels: |
| 141 | + app.kubernetes.io/managed-by: Helm |
| 142 | + name: pod-manager-role-binding |
| 143 | + namespace: build |
| 144 | + resourceVersion: "89036757" |
| 145 | + uid: e873f68e-691c-495a-84d7-b43fbcca9609 |
| 146 | +roleRef: |
| 147 | + apiGroup: rbac.authorization.k8s.io |
| 148 | + kind: Role |
| 149 | + name: pod-manager-role |
| 150 | +subjects: |
| 151 | +- kind: ServiceAccount |
| 152 | + name: mxplatform-kube-agent |
| 153 | + namespace: build |
| 154 | + ``` |
| 155 | +
|
| 156 | +### Customer Responsibility |
| 157 | +
|
| 158 | +#### Connected Mode Deployment |
| 159 | +
|
| 160 | +* Customers can use the installer to install components related to connected mode deployment. |
| 161 | +* The customer organization must employ the principle of least privilege, allowing only authorized accesses for users (or processes acting on behalf of users) which are necessary to accomplish connected mode namespace configuration. |
| 162 | +* Customers can place one valid kubeconfig file which will grant `mxpc-cli` access to the destination cluster, and then execute the command line script shown in the **Installation** tab of the cluster namespace **Details** page in connected mode. |
| 163 | + |
| 164 | +## Proof and Remarks |
| 165 | + |
| 166 | +Private Mendix Platform provides a new **Build Utility** option to build customer Mendix applications. |
| 167 | + |
| 168 | +{{< figure src="/attachments/private-platform/nist-ac/nist-ac-06-1.png" class="no-border" >}} |
| 169 | + |
| 170 | +Kubernetes privilege credentials are removed from the build configuration. |
| 171 | + |
| 172 | +{{< figure src="/attachments/private-platform/nist-ac/nist-ac-06-2.png" class="no-border" >}} |
| 173 | + |
| 174 | +### Connected Mode Components Installation |
| 175 | + |
| 176 | +{{< figure src="/attachments/private-platform/nist-ac/nist-ac-06-3.png" class="no-border" >}} |
| 177 | + |
| 178 | +{{< figure src="/attachments/private-platform/nist-ac/nist-ac-06-4.png" class="no-border" >}} |
| 179 | + |
| 180 | +### Private Mendix Plaform Roles |
| 181 | + |
| 182 | +{{< figure src="/attachments/private-platform/nist-ac/nist-ac-06-5.png" class="no-border" >}} |
0 commit comments