Access control for Aerospike on Kubernetes
Enable security
To use Aerospike access control, you must enable security for the Aerospike clusters.
Enable security for your Aerospike clusters in the aerospikeConfig section of the custom resource (CR) file like so:
aerospikeConfig: ...security: {} ...Aerospike Access Control includes user, role, and privilege creation and maintenance. See the Aerospike Database documentation section for more information on Aerospike Access Control.
To manage your access controls from AKO, configure the spec.aerospikeAccessControl section in the Aerospike cluster’s CR file.
Disable security
You can disable security on a running Aerospike cluster. This is useful when you need to temporarily remove authentication requirements from the cluster.
Steps to disable security
To disable security in a running cluster, remove the security section from aerospikeConfig:
spec: ... # Keep the aerospikeAccessControl section - it cannot be removed once set aerospikeAccessControl: users: - name: admin secretName: auth-secret roles: - sys-admin - user-admin
aerospikeConfig: ... # Remove the security section to disable security # security: {} ...Apply the changes:
kubectl apply -f aerospike-cluster.yamlImportant behavior notes
-
aerospikeAccessControlcannot be removed: OnceaerospikeAccessControlis configured, it cannot be removed from the CR. AKO validates this and rejects any attempt to remove it. -
Users persist in the server: When security is disabled, all configured users remain stored in the Aerospike server. They are not deleted.
-
Users are resurrected on re-enable: When security is re-enabled, the existing users are automatically resurrected and become active again.
Re-enabling security
When re-enabling security on a cluster that previously had security disabled:
To re-enable security, add the security section back to aerospikeConfig:
spec: ... aerospikeAccessControl: users: - name: admin secretName: auth-secret roles: - sys-admin - user-admin
aerospikeConfig: ... security: {} ...Example access control tasks
Create or delete a role
Add a role in the roles list under spec.aerospikeAccessControl.
sys-admin and user-admin are standard predefined roles.
Here we add a new custom role called profiler, which has read privileges.
spec: ... aerospikeAccessControl: roles: - name: profiler privileges: - read users: - name: admin secretName: auth-secret roles: - sys-admin - user-adminTo remove an existing role, delete it from the roles category.
Save and exit the CR file, then use kubectl to apply the change.
kubectl apply -f aerospike-cluster.yamlAdd or remove privileges to a role
Under privileges for a certain role under spec.aerospikeAccessControl, add any additional privileges on new lines.
Here we add read-write to the profiler role.
Remove a privilege from the list under a role to remove the privilege from that role.
spec: ... aerospikeAccessControl: roles: - name: profiler privileges: - read - read-write users: - name: admin secretName: auth-secret roles: - sys-admin - user-adminSave and exit the CR file, then use kubectl to apply the change.
kubectl apply -f aerospike-cluster.yamlPrivilege scope
To scope privileges to a namespace or set, add the following to the profiler role in the roles list under spec.aerospikeAccessControl.
The order of the scope syntax is: privilege.namespace.set.
- To scope a
readprivilege to a namespace calledtest-namespace, add the privilege asread.test-namespace - To scope a
read-writeprivilege to a set calledtest-seton a different namespace calledtest-namespace-1, add the privilege asread-write.test-namespace-1.test-set
spec: ... aerospikeAccessControl: roles: - name: profiler privileges: - read.test-namespace - read-write.test-namespace-1.test-set users: - name: admin secretName: auth-secret roles: - sys-admin - user-adminSave and exit the CR file, then use kubectl to apply the change.
kubectl apply -f aerospike-cluster.yamlCreate or delete a user
Password based user (auth-mode=Internal)
Create the secret for the user and add the user in the users list under spec.aerospikeAccessControl.
Create a secret profile-user-secret containing the password for the user profiler by passing the password from the command line:
kubectl -n aerospike create secret generic profile-user-secret --from-literal=password='userpass'Add profileUser user with the profiler role.
spec: ... aerospikeAccessControl: roles: - name: profiler privileges: - read users: - name: profileUser authMode: Internal secretName: profile-user-secret roles: - profiler
- name: admin authMode: Internal secretName: auth-secret roles: - sys-admin - user-adminPKI only user (auth-mode=PKIOnly)
For PKI only user, set the authMode to PKIOnly.
When using PKIOnly authentication:
- The user authenticates using TLS client certificates where the certificate’s Common Name (CN) matches the username.
- Password-based authentication is disabled for the user.
- The
secretNamefield is no longer required since password authentication is disabled.
spec: ... aerospikeAccessControl: roles: - name: profiler privileges: - read users: - name: profileUser authMode: PKIOnly roles: - profiler
- name: admin authMode: PKIOnly roles: - sys-admin - user-adminTo remove a user, delete the entry from the users category.
Save and exit the CR file, then use kubectl to apply the change.
kubectl apply -f aerospike-cluster.yamlAdd or remove user roles
Add or remove roles in the desired user’s roles list.
Here we add user-admin and sys-admin to the profileUser roles list.
spec: ... aerospikeAccessControl: roles: - name: profiler privileges: - read users: - name: profileUser secretName: profile-user-secret roles: - profiler - user-admin - sys-admin
- name: admin secretName: auth-secret roles: - sys-admin - user-adminSave and exit the CR file, then use kubectl to apply the change.
kubectl apply -f aerospike-cluster.yamlChange a user’s authentication mode to PKI-Only
Change a user’s authentication mode from Internal to PKIOnly to enforce certificate-based authentication only. This is useful for environments requiring stricter security controls or FIPS compliance.
To change a user’s authentication mode, set the authMode to PKIOnly and remove the secretName field since password authentication is disabled:
spec: ... aerospikeAccessControl: - name: admin authMode: PKIOnly roles: - sys-admin - user-adminSave and exit the CR file, then use kubectl to apply the change.
kubectl apply -f aerospike-cluster.yamlChange a user’s password
Once a secret has been created, it cannot be changed. To change an existing password, create an entirely new secret and assign it to the user in place of the old secret.
Create a new secret new-profile-user-secret containing the password for Aerospike cluster user profileUser by passing the password from the command line:
kubectl -n aerospike create secret generic new-profile-user-secret --from-literal=password='newuserpass'Update the secretName for profileUser to the new secret name new-profile-user-secret.
spec: ... aerospikeAccessControl: roles: - name: profiler privileges: - read users: - name: profileUser secretName: new-profile-user-secret roles: - profiler - user-admin
- name: admin secretName: auth-secret roles: - sys-admin - user-adminSave and exit the CR file, then use kubectl to apply the change.
kubectl apply -f aerospike-cluster.yaml