Security
Use the recommendations listed here to ensure your Astra Trident installation is secure.
Run Astra Trident in its own namespace
It is important to prevent applications, application administrators, users, and management applications from accessing Astra Trident object definitions or the pods to ensure reliable storage and block potential malicious activity.
To separate the other applications and users from Astra Trident, always install Astra Trident in its own Kubernetes namespace (trident
). Putting Astra Trident in its own namespace assures that only the Kubernetes administrative personnel have access to the Astra Trident pod and the artifacts (such as backend and CHAP secrets if applicable) stored in the namespaced CRD objects.
You should ensure that you allow only administrators access to the Astra Trident namespace and thus access to the tridentctl
application.
Use CHAP authentication with ONTAP SAN backends
Astra Trident supports CHAP-based authentication for ONTAP SAN workloads (using the ontap-san
and ontap-san-economy
drivers). NetApp recommends using bidirectional CHAP with Astra Trident for authentication between a host and the storage backend.
For ONTAP backends that use the SAN storage drivers, Astra Trident can set up bidirectional CHAP and manage CHAP usernames and secrets through tridentctl
.
See here to understand how Astra Trident configures CHAP on ONTAP backends.
CHAP support for ONTAP backends is available with Trident 20.04 and later. |
Use CHAP authentication with NetApp HCI and SolidFire backends
NetApp recommends deploying bidirectional CHAP to ensure authentication between a host and the NetApp HCI and SolidFire backends. Astra Trident uses a secret object that includes two CHAP passwords per tenant. When Trident is installed as a CSI provisioner, it manages the CHAP secrets and stores them in a tridentvolume
CR object for the respective PV. When you create a PV, CSI Astra Trident uses the CHAP secrets to initiate an iSCSI session and communicate with the NetApp HCI and SolidFire system over CHAP.
The volumes that are created by CSI Trident are not associated with any Volume Access Group. |
In the non-CSI frontend, the attachment of volumes as devices on the worker nodes is handled by Kubernetes. After volume creation, Astra Trident makes an API call to the NetApp HCI/SolidFire system to retrieve the secrets if the secret for that tenant does not already exist. Astra Trident then passes the secrets on to Kubernetes. The kubelet located on each node accesses the secrets via the Kubernetes API and uses them to run/enable CHAP between each node accessing the volume and the NetApp HCI/SolidFire system where the volumes are located.
Use Astra Trident with NVE and NAE
NetApp ONTAP provides data-at-rest encryption to protect sensitive data in the event a disk is stolen, returned, or repurposed. For details, refer to Configure NetApp Volume Encryption overview.
-
If NAE is enabled on the backend, any volume provisioned in Astra Trident will be NAE-enabled.
-
If NAE is not enabled on the backend, any volume provisioned in Astra Trident will be NVE-enabled unless you set the NVE encryption flag to
false
in the backend configuration.
Volumes created in Astra Trident on an NAE-enabled backend must be NVE or NAE encrypted.
|
-
You can manually create an NVE volume in Astra Trident by explicitly setting the NVE encryption flag to
true
.
For more information on backend configuration options, refer to:
Enable per-volume, host-side encryption using Linux Unified Key Setup (LUKS)
You can enable Linux Unified Key Setup (LUKS) to encrypt ONTAP SAN and ONTAP SAN ECONOMY volumes on Astra Trident. In Astra Trident, LUKS-encrypted volumes use the aes-xts-plain64 cypher and mode, as recommended by NIST.
For more information on backend configuration options for ONTAP SAN, refer to ONTAP SAN configuration options
-
Worker nodes must have cryptsetup 2.1 or higher installed. For more information, visit Gitlab: cryptsetup.
-
For performance reasons, we recommend that worker nodes support Advanced Encryption Standard New Instructions (AES-NI). To verify AES-NI support, run the following command:
grep "aes" /proc/cpuinfo
If nothing is returned, your processor does not support AES-NI. For more information on AES-NI, visit: Intel: Advanced Encryption Standard Instructions (AES-NI).
-
Define LUKS encryption attributes in the backend configuration.
"storage": [ { "labels":{"luks": "true"}, "zone":"us_east_1a", "defaults": { "luksEncryption": "true" } }, { "labels":{"luks": "false"}, "zone":"us_east_1a", "defaults": { "luksEncryption": "false" } }, ]
-
Use
parameters.selector
to define the storage pools using LUKS encryption. For example:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: luks provisioner: netapp.io/trident parameters: selector: "luks=true" csi.storage.k8s.io/node-stage-secret-name: luks-${pvc.name} csi.storage.k8s.io/node-stage-secret-namespace: ${pvc.namespace}
-
Create a Secret that contains the LUKS passphrase. For example:
apiVersion: v1 kind: Secret metadata: name: luks-pvc1 stringData: luks-passphrase-name: B luks-passphrase: secretB previous-luks-passphrase-name: A previous-luks-passphrase: secretA
Limitations
-
LUKS encrypted volumes will not be able to take advantage of ONTAP deduplication and compression.
-
LUKS passphrase rotation is not not supported at this time. To change passphrases, manually copy the data from one PVC to another.