ディスク暗号化は、ディスクに書き込まれるデータを自動的に暗号化し、読み取り時に復号します。KMS で管理されるキーを使用すると、独自の鍵管理インフラストラクチャを構築せずに、クラスターのディスクボリュームを暗号化できます。このトピックでは、KMS を使用して StorageClass を構成し、保管中のディスクボリュームを暗号化する方法について説明します。
このトピックでは、StorageClass を介したワークロードデータボリュームの暗号化について説明します。ノードのルートボリュームの暗号化は対象外です。
暗号化の仕組み
Alibaba Cloud のディスクは、KMS によって管理される AES-256 暗号化を使用します。KMS は、エンベロープ暗ho号化を使用して、カスタマーマスターキー (CMK) とデータキー (DK) からなる 2 階層のキー階層を実装します。
-
データキーの暗号化:KMS は CMK を使用して DK を暗号化します。暗号化された DK は暗号化されたデータとともに保存され、CMK なしでは復号できません。
-
暗号化データの保存と読み取り:暗号化されたデータを読み取る際、KMS はリクエストを検証した後に DK を復号します。プレーンテキストの DK はディスク I/O の間だけメモリ上に存在し、ストレージに書き込まれることはありません。
プレーンテキストの CMK が KMS によって管理されるハードウェアセキュリティモジュールから外部に出ることはありません。プレーンテキストの DK はハイパーバイザーのメモリ上にのみ存在し、ディスクに保存されることはありません。
詳細については、「暗号化プロセス」をご参照ください。
暗号化できるデータの種類
サポートされているディスクタイプ
次のディスクタイプは暗号化をサポートしています。
| ディスクタイプ | 暗号化のサポート |
|---|---|
| Enterprise SSDs (ESSDs) | はい |
| ESSD AutoPL disks | はい |
| ESSD Entry disks | はい |
| Standard SSDs | はい |
| Ultra disks | はい |
| Basic disks | はい |
| Local disks | いいえ |
制限事項
-
暗号化はディスク作成時にのみ設定でき、作成後に変更することはできません。マウントおよびアンマウントは暗号化に影響しません。
-
暗号化されていないディスクを暗号化すること、または暗号化ディスクを非暗号化することはサポートされていません。
ECS から KMS へのアクセス許可
AliyunECSDiskEncryptDefaultRole RAM ロールを設定して、Elastic Compute Service (ECS) に KMS へのアクセスを許可します。
-
次の値で RAM ロールを作成します (詳細については、「信頼できる Alibaba Cloud サービス用の RAM ロールを作成」をご参照ください)。
AliyunECSDiskEncryptDefaultRoleロールがすでに存在する場合は、この手順をスキップします。フィールド 値 [Principal Type] Cloud Service [Principal Name] Elastic Compute Service [Role Name] AliyunECSDiskEncryptDefaultRole -
次の値で
AliyunECSDiskEncryptDefaultRoleロールに権限を付与します (詳細については、「RAM ロールに権限を付与」をご参照ください)。重要AliyunKMSFullAccessは KMS のフル権限を付与します。最小権限でアクセスする場合は、次の権限を持つカスタムポリシーを使用してください。フィールド 値 [Resource Scope] Account [Policy] AliyunKMSFullAccess(KMS のフルアクセス) またはAliyunECSDiskEncryptCustomizedPolicy(必要最小限の権限){ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt", "kms:TagResource" ], "Resource": "*" } ] } -
[Grant permissions] をクリックします。
操作手順
暗号化は StorageClass レベルで構成します。暗号化が有効な StorageClass を使用する PersistentVolumeClaim (PVC) は、暗号化されたディスクによって提供されます。
前提条件
以下を確認してください。
-
Container Storage Interface (CSI) アドオン (csi-plugin および csi-provisioner) がインストールされていることを、[オペレーション] > [アドオン] > [ストレージ] で確認してください。 「csi-plugin と csi-provisioner を更新する」をご参照ください。
クラスターで FlexVolume を使用している場合は、続行する前に CSI に移行してください。FlexVolume はサポートが終了しました。詳細については、「FlexVolume から CSI へのアップグレード」をご参照ください。
-
KMS 権限が構成された
AliyunECSDiskEncryptDefaultRoleRAM ロールが作成されていること (詳細については、「ECS に KMS へのアクセスを許可」をご参照ください)。
手順 1:暗号化 StorageClass の作成
-
必要に応じてパラメーターを調整し、次の内容で
sc-kms.yamlという名前のファイルを作成します。パラメーター 説明 encryptedこの StorageClass によって作成されるディスクを暗号化するには、 "true"に設定します。kmsKeyIdディスク暗号化に使用する KMS キーです。未設定の場合、デフォルトの CMK が適用されます。 encryptedが"false"の場合は無視されます。typeディスクタイプです。 fsTypeファイルシステムタイプです。 apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-disk-encrypted provisioner: diskplugin.csi.alibabacloud.com parameters: fsType: ext4 type: cloud_essd encrypted: "true" kmsKeyId: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx reclaimPolicy: Delete上の表は、
parametersセクションにある暗号化関連パラメーターを説明しています。 -
StorageClass を作成します。
kubectl create -f sc-kms.yaml
手順 2:PVC の作成
-
次の内容で
sc-pvc.yamlという名前のファイルを作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: csi-disk-encrypted -
PVC を作成します。
kubectl create -f sc-pvc.yaml -
PVC がバインドされていることを確認します。
kubectl get pvcPVC のステータスは
Boundである必要があります。VOLUME列には、プロビジョニングされたディスク ID が表示されます。NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE disk-pvc Bound d-2ze0nmbv2var0d9h**** 20Gi RWO csi-disk-encrypted <unset> 6m20s
手順 3:ディスク暗号化の確認
次のステップ
詳細については、「クラウドディスクの暗号化」をご参照ください。