Linux Unified Key Setup(LUKS;統合キーセットアップ)
Linux Unified Key Setup(LUKS;ユニファイドキーセットアップ)を有効にして、Astra Trident上のONTAP SANおよびONTAP SANエコノミーボリュームを暗号化できます。Astra Tridentは、LUKS暗号化ボリュームのパスフレーズローテーションとボリューム拡張をサポートしています。
Astra Tridentでは、で推奨されるとおり、LUKSによって暗号化されたボリュームがAES-XTS -原64定型とモードを使用します "NIST"。
-
ワーカーノードにはcryptsetup 2.1以上(3.0よりも下位)がインストールされている必要があります。詳細については、を参照してください "Gitlab: cryptsetup"。
-
パフォーマンス上の理由から、ワーカーノードでAdvanced Encryption Standard New Instructions(AES-NI)をサポートすることを推奨します。AES-NIサポートを確認するには、次のコマンドを実行します。
grep "aes" /proc/cpuinfo
何も返されない場合、お使いのプロセッサはAES-NIをサポートしていません。AES-NIの詳細については、以下を参照してください。 "Intel:Advanced Encryption Standard Instructions(AES-NI)"。
LUKS暗号化を有効にします
ONTAP SANおよびONTAP SANエコノミーボリュームでは、Linux Unified Key Setup(LUKS;Linux統合キーセットアップ)を使用して、ボリューム単位のホスト側暗号化を有効にできます。
-
バックエンド構成でLUKS暗号化属性を定義します。ONTAP SANのバックエンド構成オプションの詳細については、を参照してください "ONTAP のSAN構成オプション"。
"storage": [ { "labels":{"luks": "true"}, "zone":"us_east_1a", "defaults": { "luksEncryption": "true" } }, { "labels":{"luks": "false"}, "zone":"us_east_1a", "defaults": { "luksEncryption": "false" } }, ]
-
使用
parameters.selector
LUKS暗号化を使用してストレージプールを定義する方法。例:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: luks provisioner: csi.trident.netapp.io 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}
-
LUKSパスフレーズを含むシークレットを作成します。例:
kubectl -n trident create -f luks-pvc1.yaml apiVersion: v1 kind: Secret metadata: name: luks-pvc1 stringData: luks-passphrase-name: A luks-passphrase: secretA
制限
LUKSで暗号化されたボリュームは、ONTAP の重複排除と圧縮を利用できません。
LUKSボリュームをインポートするためのバックエンド構成
LUKSボリュームをインポートするには、を設定する必要があります luksEncryption
終了:(true
バックエンドにあります。。 luksEncryption
optionを指定すると、ボリュームがLUKS準拠かどうかがAstra Tridentに通知されます (true
)またはLUKS準拠ではありません (false
)をクリックします。
version: 1 storageDriverName: ontap-san managementLIF: 10.0.0.1 dataLIF: 10.0.0.2 svm: trident_svm username: admin password: password defaults: luksEncryption: 'true' spaceAllocation: 'false' snapshotPolicy: default snapshotReserve: '10'
LUKSボリュームをインポートするためのPVC設定
LUKSボリュームを動的にインポートするには、 trident.netapp.io/luksEncryption
`true`次の例に示すように、アノテーションをに設定し、LUKS対応のストレージクラスをPVCに含めます。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: luks-pvc namespace: trident annotations: trident.netapp.io/luksEncryption: "true" spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi storageClassName: luks-sc
LUKSパスフレーズをローテーションします
LUKSのパスフレーズをローテーションしてローテーションを確認できます。
パスフレーズは、ボリューム、Snapshot、シークレットで参照されなくなることを確認するまで忘れないでください。参照されているパスフレーズが失われた場合、ボリュームをマウントできず、データが暗号化されたままアクセスできなくなることがあります。 |
LUKSパスフレーズのローテーションは、ボリュームをマウントするポッドが、新しいLUKSパスフレーズの指定後に作成されたときに行われます。新しいポッドが作成されると、Astra TridentはボリュームのLUKSパスフレーズをシークレット内のアクティブなパスフレーズと比較します。
-
ボリュームのパスフレーズがシークレットでアクティブなパスフレーズと一致しない場合、ローテーションが実行されます。
-
ボリュームのパスフレーズがシークレットのアクティブなパスフレーズと一致する場合は、を参照してください
previous-luks-passphrase
パラメータは無視されます。
-
を追加します
node-publish-secret-name
およびnode-publish-secret-namespace
StorageClassパラメータ。例:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-san provisioner: csi.trident.netapp.io parameters: trident.netapp.io/backendType: "ontap-san" csi.storage.k8s.io/node-stage-secret-name: luks csi.storage.k8s.io/node-stage-secret-namespace: ${pvc.namespace} csi.storage.k8s.io/node-publish-secret-name: luks csi.storage.k8s.io/node-publish-secret-namespace: ${pvc.namespace}
-
ボリュームまたはSnapshotの既存のパスフレーズを特定します。
ボリュームtridentctl -d get volume luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID> ...luksPassphraseNames:["A"]
スナップショットtridentctl -d get snapshot luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>/<snapshotID> ...luksPassphraseNames:["A"]
-
ボリュームのLUKSシークレットを更新して、新しいパスフレーズと前のパスフレーズを指定します。確認します
previous-luke-passphrase-name
およびprevious-luks-passphrase
前のパスフレーズと同じにします。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
-
ボリュームをマウントする新しいポッドを作成します。これはローテーションを開始するために必要です。
-
パスフレーズがローテーションされたことを確認します。
ボリュームtridentctl -d get volume luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID> ...luksPassphraseNames:["B"]
スナップショットtridentctl -d get snapshot luks-pvc1 GET http://127.0.0.1:8000/trident/v1/volume/<volumeID>/<snapshotID> ...luksPassphraseNames:["B"]
パスフレーズは、ボリュームとSnapshotに新しいパスフレーズのみが返されたときにローテーションされました。
たとえば、2つのパスフレーズが返された場合などです `luksPassphraseNames: ["B", "A"]`回転が不完全です。回転を完了するために、新しいポッドをトリガできます。 |
ボリュームの拡張を有効にします
LUKS暗号化ボリューム上でボリューム拡張を有効にできます。
-
を有効にします
CSINodeExpandSecret
機能ゲート(ベータ1.25+)。を参照してください "Kubernetes 1.25:CSIボリュームのノードベースの拡張にシークレットを使用します" を参照してください。 -
を追加します
node-expand-secret-name
およびnode-expand-secret-namespace
StorageClassパラメータ。例:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: luks provisioner: csi.trident.netapp.io 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} csi.storage.k8s.io/node-expand-secret-name: luks-${pvc.name} csi.storage.k8s.io/node-expand-secret-namespace: ${pvc.namespace} allowVolumeExpansion: true
ストレージのオンライン拡張を開始すると、ドライバに適切なクレデンシャルが渡されます。