すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:機密インスタンスにおけるクラウドディスクの暗号化

最終更新日:Jan 27, 2026

機密コンピューティングのシナリオでは、機密コンピューティングアプリケーションが使用するデータは通常、レジスタとメモリの暗号化によって保護されます。しかし、プログラムコードとそれが処理するデータは、多くの場合、クラウドディスクに直接保存されます。これらの機密コンピューティング環境では、LUKS や BitLocker などの技術を使用して機密インスタンス内でデータ暗号化を実装できます。これにより、データが機密インスタンスのセキュリティ境界を離れる前に、クラウドサービスプロバイダーから独立してデータが暗号化されます。また、これにより、クラウドディスクの暗号鍵を管理することもできます。このトピックでは、機密コンピューティングインスタンス内でクラウドディスクを暗号化し、より高いレベルのセキュリティを提供する方法について説明します。この文脈における暗号化されたクラウドディスクは、機密クラウドディスクと呼ばれます。

説明

機密コンピューティングインスタンスではないインスタンスでディスクを暗号化するには、Alibaba Cloud Elastic Block Storage (EBS) が提供するディスク暗号化機能を使用してください。

暗号化の概要

暗号化の仕組み

機密クラウドディスクは、Linux の LUKS2 技術に基づいて、ブロックストレージレベルでデータの暗号化と保護を提供します。機密インスタンス上のクラウドディスクから機密クラウドディスクを作成するには、初期化プロシージャとオープンプロシージャを実行する必要があります。

  • 初期化プロシージャ:まず、初期化するブロックデバイスを特定します。これは通常、インスタンス内のクラウドディスクのパーティションに対応するブロックデバイスで、`/dev/nvme1n1p1` などです。このトピックでは、このブロックデバイスをボリュームと呼びます。Cryptpilot ツールを使用して、選択したボリュームを初期化します。その後、このボリュームを使用して、後続のプロシージャで機密データを保存できます。

    重要

    初期化プロシージャは、ブロックデバイス上の元のデータを消去します。操作ミスを防ぐため、慎重に進めてください。

  • オープンプロシージャ:Cryptpilot ツールを使用して、初期化されたボリュームを開きます。インスタンス内に新しい仮想ブロックデバイスが作成されます。このブロックデバイスに書き込まれたデータは暗号化され、暗号文として基盤となる Elastic Compute Service (ECS) クラウドディスクに保存されます。この仮想ブロックデバイスからデータを読み取ると、基盤となる ECS クラウドディスク上のデータは自動的に復号されます。暗号化と復号のプロセスは Linux カーネルで行われます。これにより、プレーンテキストがインスタンスの外部に漏洩するのを効果的に防ぎます。

暗号化アルゴリズム

機密クラウドディスクの暗号化プロセスでは、キー暗号化キー (KEK) とマスターキーによる 2 層のキー設計が使用されます。

  • 初期化プロシージャ中に、安全な乱数アルゴリズムを使用してマスターキーが生成されます。このキーは、業界標準の 256 ビット AES 暗号化アルゴリズムを使用して直接データ暗号化に使用されます。または、パスフレーズを提供してキーとして使用することもできます。初期化プロシージャは、このキーから鍵導出アルゴリズムを使用して KEK を生成し、その KEK を使用してマスターキーを暗号化します。

  • ボリュームを開くと、提供されたキーから KEK が生成されます。KEK はマスターキーの復号に使用され、マスターキーが機密データを復号します。インスタンスの AES ハードウェア暗号化機能により、暗号化と復号のプロセスが高速化されます。これにより、暗号化によるパフォーマンスオーバーヘッドが削減されます。

キーの保存

機密クラウドディスクは、複数のキー保存方法をサポートしています。ボリュームを開くために必要なキー情報を事前に設定できます。これにより、インスタンスが起動するたびに手動でキーを入力する必要がなくなります。

  • ワンタイムキー (OTP):これは特殊なキー保存方法です。このタイプのキーを設定すると、ボリュームの初期化とオープンのために安全な一時キーが自動的に生成されます。ボリュームを別途初期化する必要はありません。

    重要

    ボリュームを再オープンするたびに異なるキーが生成されます。この方法は、一時データディスクやスワップパーティションに適しています。インスタンスのシャットダウン後も永続化する必要がある機密データをこのタイプのボリュームに保存しないでください。

  • Key Management Service (KMS):この方法では、キーを Alibaba Cloud KMS に保存します。ECS インスタンスで KMS のアクセス情報を設定する必要があります。ボリュームが開かれると、ECS インスタンスは自動的に Alibaba Cloud KMS にアクセスして、ボリュームの暗号化と復号のためのキーを取得します。この方法は、永続化が必要な機密データの保存に適しています。

整合性のサポート

機密データへの不正アクセスや漏洩を防ぐことに加えて、攻撃者による機密データの改ざんも防ぐ必要があります。これは、大規模言語モデル (LLM) の重みやトレーニングデータセットを保存するなどのシナリオで重要です。機密クラウドディスクは、関連データ付き認証付き暗号 (AEAD) モードを使用してデータ整合性をサポートします。

注意事項

  • データディスクの暗号化は、TDX インスタンスまたは異種機密インスタンスでのみ可能です。

  • 機密クラウドディスクソリューションは、ディスクのロールバックを防ぎません。ロールバックはデータの整合性や機密性を損なうことはありませんが、データを古い状態に戻す可能性があります。したがって、このソリューションは、そのような潜在的な攻撃を特定するのには役立ちません。これらの問題に対処するには、セキュリティ要件に基づいてアプリケーション層でデータバージョンを確認する必要があります。

操作手順

ステップ 1: 環境の準備

  1. 機密コンピューティングインスタンスを作成します。

    データディスクの暗号化は、TDX 機密インスタンスまたは異種機密インスタンスでのみ可能です。

  2. 機密コンピューティングインスタンスにリモート接続します。

    詳細については、「Workbench を使用した Linux インスタンスへのログイン」をご参照ください。

  3. Cryptpilot をインストールします。

    sudo yum install -y cryptpilot-crypt
  4. Cryptpilot のバージョンを確認します。

    cryptpilot-crypt --version

    image

ステップ 2: クラウドディスクの作成とアタッチ

重要

クラウドディスクを暗号化すると、ブロックデバイス上の元のデータが消去されます。この操作には、新しいデータディスクを作成することを推奨します。

  1. 暗号化する空のデータディスクを作成します

  2. 作成したデータディスクを ECS インスタンスにアタッチします

  3. データディスクを初期化します

    データディスクを初期化する際は、パーティションとファイルシステムのみを作成します。ファイルシステムはまだマウントしないでください。ファイルシステムは、ディスクが暗号化された後にマウントする必要があります。

  4. アタッチされたクラウドディスクとパーティション情報を表示します。

    lsblk

    次の出力は、現在の ECS インスタンスに 2 つのクラウドディスクがアタッチされていることを示しています:

    • /dev/nvme0n1:元のシステムディスク。

    • /dev/nvme1n1:2 つの空のパーティション (/dev/nvme1n1p1/dev/nvme1n1p2) を持つ新しいデータディスク。image

ステップ 3: ext4 ファイルシステムを持つボリュームの作成

  • 一時ボリュームの場合、ボリューム内の機密データはボリュームが閉じられた後に失われます。これは、一時データディスクやスワップパーティションを使用するシナリオに適しています。

  • 永続ボリュームは、ボリュームが閉じられた後も機密データが永続化されることを保証します。これは、機密データの永続的な保存が必要なシナリオに適しています。

ext4 ファイルシステムを持つ一時ボリュームの作成

  1. /etc/cryptpilot/volumes/data0.toml ファイルを作成して設定します。

    説明

    設定ファイルは TOML 形式のテキストファイルです。ファイル名は .toml で終わる任意の名前でよく、ボリューム名と一致する必要はありません。

    必要に応じて、次の設定ファイルの設定情報を変更します。

    sudo bash -c 'cat > /etc/cryptpilot/volumes/data0.toml << EOF
    # ボリューム設定
    dev = "/dev/nvme1n1p1"    # 使用するブロックデバイスを指定します。これはクラウドディスクの空のパーティションです。この例では、データディスクの最初のパーティションである /dev/nvme1n1p1 を使用します。
    volume = "data0"          # ボリューム名を指定します。この例では data0 と名付けます。
    auto_open = false         # true はシステム起動時にボリュームが自動的に開かれることを意味します。false はボリュームを手動で開く必要があることを意味します。
    makefs = "ext4"           # 作成するファイルシステムのタイプを指定します。この例では ext4 を使用します。
    integrity = true          # true はデータ整合性サポートが有効であることを意味します。false はデータ整合性サポートが無効であることを意味します。
    
    # キー設定
    [encrypt.otp]             # キーの保存タイプを指定します。ここでは、ワンタイムキー (OTP) タイプが選択されています。
    EOF'
  2. ボリュームのステータスを表示します。

    sudo cryptpilot-crypt show data0

    data0 ボリュームの設定情報が出力に表示されます:

    • Initialized 列:ストレージタイプが OTP (ワンタイムキー) であるため、ボリュームを初期化する必要がないことを示します。

    • Openedボリュームが開かれていないことを示します。

      image

  3. ボリュームを開き、そのステータスを表示します。

    1. ボリュームを開きます。

      sudo cryptpilot-crypt open data0

      image

    2. ボリュームのステータスを表示できます。

      sudo cryptpilot-crypt show data0

      次の出力は Opened: True を示しており、ボリュームが開かれていることを意味します。image

    3. ボリュームに対応する仮想デバイスを確認します。

      sudo file -Ls /dev/mapper/data0

      ボリュームが開かれると、パス /dev/mapper/<volume name> に仮想ブロックデバイスが作成されます。

      image

  4. ファイルシステムをマウントし、結果を表示します。

    1. data0 ボリュームを /mnt/data0 パスにマウントします。

      sudo mkdir -p /mnt/data0
      sudo mount -t ext4 /dev/mapper/data0 /mnt/data0
    2. マウント結果を表示します。

      mount | grep data0
      ls -la /mnt/data0/

      次の出力は、ボリュームが正常にマウントされ、空の ext4 ファイルシステムが含まれていることを示しています。

      image

  5. ボリュームをオフラインにします。

    重要
    • この例では、ワンタイムキー (OTP) モデルを使用しています。ボリュームが閉じられると、そこに保存されている機密データは完全に失われます。

    • ボリュームを閉じる前に、ボリュームへの読み書きを行っているすべてのプロセスを停止してください。ボリュームが使用中でないことを確認するために、ボリュームからファイルシステムをアンマウントします。

    1. ファイルシステムをアンマウントします。

      sudo umount /mnt/data0
    2. ボリュームをオフラインにします。

      sudo cryptpilot-crypt close data0

      イメージ

    3. ボリュームのステータスを表示します。

      cryptpilot-crypt show data0

      次の出力は、ボリュームが閉じられていることを示しています。image

ext4 ファイルシステムを持つ永続ボリュームの作成

  1. 安全な環境で、ボリュームを暗号化するための Base64 エンコードされたキーをランダムに生成します。

    sudo yum install -y openssl
    openssl rand -base64 40

    後でアップロードするために、生成されたキーを保存します。image

  2. キーを保存するバックエンドを選択します

    永続ボリュームには、安定して再利用可能な暗号鍵が必要です。セキュリティのため、このキーをビジネスホストに直接保存するべきではありません。代わりに、専用のキー管理バックエンドに保存する必要があります。Cryptpilot は、ボリュームを開くときにバックエンドからキーを取得します。

    このトピックでは、2 つの一般的なバックエンドオプションについて説明します。ご利用の環境に基づいて 1 つを選択してください:

    • オプション 1: 自己構築の Trustee サービスを使用してキーを保存する。これは、独自のキー保存バックエンドを構築し、インスタンスのリモートアテステーション (トラステッドコンピューティング) が必要なシナリオに適しています。

    • オプション 2: Alibaba Cloud KMS を使用してキーを保存する。これは、クラウドでホストされるキー管理サービスを使用し、独自のサービスを構築する必要がないシナリオに適しています。

    これら 2 つの方法の準備手順を以下に説明します。

    自己構築 Trustee サービスの利用

    Trustee は、リモートアテステーションサービス (AS)、参照値プロバイダーサービス (RVPS)、およびキー仲介サービス (KBS) のコンポーネントで構成されるオープンソースの信頼管理サービスです。このソリューションでは、暗号鍵は KBS に保存されます。Cryptpilot は、ボリュームを開くときに KBS からキーを取得します。

    ステップ 1: Trustee サービスのデプロイと設定

    1. 別の ECS インスタンスなど、信頼できる環境で Trustee パッケージをインストールします:

      sudo yum install -y trustee
    2. (オプション) HTTPS アクセスの設定

      HTTPS 経由でのアクセスを有効にするには、/etc/trustee/gateway.yml を編集し、TLS 証明書の設定を入力します:

      server:
        insecure_http: false
        tls:
          cert_file: "<path_to_https_certificate_pem_file>"
          key_file: "<path_to_https_certificate_private_key_file>"
        # その他の設定...
    3. Alibaba Cloud Linux 3 インスタンスでは、systemd を使用して Trustee サービスを開始できます:

      sudo systemctl restart trustee

      Trustee が起動すると、ローカルマシンのポート 8081 でリッスンします。

    4. デフォルトのリモートアテステーションポリシーを変更します

      Trustee は、機密インスタンス内の TEE ハードウェア環境、ファイルシステム、プログラム、および設定をチェックし、チェック結果を提供します。

      簡単にするために、この例では有効な TEE ハードウェア環境のみをチェックします。`/opt/trustee/kbs/policy.rego` ファイルを次の内容に変更します。

      package policy
      
      import rego.v1
      
      default allow = false
      
      # ---------------------------
      # Resource path helpers
      # ---------------------------
      resource_path := data["resource-path"]
      path_parts := split(resource_path, "/")
      
      is_repo(name) if { count(path_parts) == 3; path_parts[0] == name }
      is_type(t)    if { count(path_parts) == 3; path_parts[1] == t }
      is_tag(tag)   if { count(path_parts) == 3; path_parts[2] == tag }
      
      # ---------------------------
      # Default decision
      # ---------------------------
      
      allow if {
              # cpu0 must exist
              s := input.submods["cpu0"]
              # cpu0 must carry a trustworthiness vector
              tv := s["ear.trustworthiness-vector"]
              # and it must pass the hardware check
              tv["hardware"] <= 32
      }
      説明

      より包括的な検証が必要な場合は、まず `/opt/trustee/attestation-service/policies/opa/default.rego` にあるリモートアテステーション検証ポリシーを参照してください。参照値設定ドキュメントリモートアテステーション設定ドキュメントを使用して参照値を設定します。これにより、リモートアテステーションの 4 つのディメンションすべての検証結果が信頼できると見なされるようになります (値が 32 以下)。その後、デフォルトのリソースポリシーの厳格な検証条件を満たすキーリソースリクエストを許可できます。

    5. ボリュームの暗号鍵を準備してアップロードします

      1. キー保存ディレクトリを作成します (KBS はデフォルトで /opt/trustee/kbs/repository/default/ を使用します):

        sudo mkdir -p /opt/trustee/kbs/repository/default/local-resources/
      2. 以前に生成したキーをローカルリソースファイルに書き込みます。例:

        sudo sh -c 'echo -n "<data1_volume_encryption_key>" > /opt/trustee/kbs/repository/default/local-resources/data1'

        <data1-volume-encryption-key> を以前に生成したランダムキーに置き換えます。対応する KBS リソース識別子は kbs:///default/local-resources/data1 であり、後続のステップで Cryptpilot ボリューム設定で参照できます。

    ステップ 2: 依存コンポーネントのインストール

    1. 機密インスタンスでリモートアテステーションを有効にし、Trustee サービスにアクセスしてキーを取得するには、追加の依存コンポーネントをインストールします。

      sudo yum install confidential-data-hub attestation-agent -y
      sudo systemctl enable --now attestation-agent.service

    ステップ 3: 暗号化ボリューム設定ファイルの作成

    1. /etc/cryptpilot/volumes/data1.toml ファイルを作成します。

    2. 設定ファイル

      説明

      設定ファイルは TOML 設定言語形式を使用しており、そのファイル名は .toml で終わる任意のテキストファイルでよく、ボリューム名と一致する必要はありません。

      必要に応じて、次の設定ファイルの設定情報を変更します。

      # ボリューム設定
      dev = "/dev/nvme1n1p2"        # 使用するブロックデバイスを指定します。これはクラウドディスクの空のパーティションです。この例では、データディスクの 2 番目のパーティションである /dev/nvme1n1p2 を使用します。
      volume = "data1"              # ボリューム名を指定します。この例では data1 と名付けます。
      auto_open = false             # true はシステム起動時にボリュームが自動的に開かれることを意味します。false はボリュームを手動で開く必要があることを意味します。
      makefs = "ext4"               # 作成するファイルシステムのタイプを指定します。この例では ext4 を使用します。
      integrity = true              # true はデータ整合性サポートが有効であることを意味します。false はデータ整合性サポートが無効であることを意味します。
      
      # キー設定 (Trustee KBS を介して取得)
      [encrypt.kbs]
      kbs_url = "http://<trustee-ip>:8081/api"               # <trustee-ip> を Trustee インスタンスのパブリック IP アドレスに置き換えます。
      key_uri = "kbs:///default/local-resources/data1"       # KBS に保存されている data1 ボリュームのキーのリソース URI。

    Alibaba Cloud KMS を使用したキーの保存

    Alibaba Cloud KMS は、クラウドベースのキー管理サービスです。Alibaba Cloud 上でキーをホストしたいシナリオに適しています。このソリューションでは、暗号鍵は KMS に汎用シークレットとして保存されます。Cryptpilot は、ボリュームを開くときに KMS からキーを取得します。

    ステップ 1: Alibaba Cloud KMS インスタンスと汎用シークレットの作成

    1. KMS インスタンスを購入して有効化します

    2. 説明
      • 機密クラウドディスクは、KMS インスタンスの [キー管理タイプ] に制限を課しません。セキュリティ要件に基づいてタイプを選択できます。このトピックでは、[ソフトウェアキー管理] タイプの KMS インスタンスを例として使用します。

      • KMS インスタンスは、ECS インスタンスと同じ Virtual Private Cloud (VPC) 内にある必要があります。

    3. ソフトウェア保護キーを作成します

    4. 汎用シークレットを作成します

      • [シークレット名]:汎用シークレットの名前を入力します。この例では、confidential_cloud_disk_passphrase を使用します。

      • [シークレット値]:[プレーンテキスト] を選択し、前のステップで生成したランダムキーを入力します。

      • [カスタマーマスターキー (CMK)]:前のステップで作成したソフトウェア保護キーを選択します。

      image

    5. アプリケーションアクセスポイントを作成し、KMS インスタンスの CA 証明書を取得します

      次の項目を取得したことを確認してください:

      • アプリケーション ID 認証情報 (ClientKeyContent):ファイル名はデフォルトで clientKey_****.json です。

      • 認証情報セキュリティトークン (ClientKeyPassword):ファイル名はデフォルトで clientKey_****_Password.txt です。

      • KMS インスタンス CA 証明書:ファイル名はデフォルトで PrivateKmsCA_kst-******.pem です。

    ステップ 2: 暗号化ボリューム設定ファイルの作成

    1. /etc/cryptpilot/volumes/data1.toml ファイルを作成します。

    2. 設定ファイル。

      説明

      設定ファイルは TOML 形式です。ファイル名は .toml で終わる必要がありますが、ボリューム名と一致する必要はありません。

      必要に応じて、次の設定ファイルの設定情報を変更します。

      # ボリューム設定
      dev = "/dev/nvme1n1p2"        # 使用するブロックデバイスを指定します。これはクラウドディスクの空のパーティションです。この例では、データディスクの最初のパーティションである /dev/nvme1n1p2 を使用します。
      volume = "data1"              # ボリューム名を指定します。この例では data1 と名付けます。
      auto_open = false             # true はシステム起動時にボリュームが自動的に開かれることを意味します。false はボリュームを手動で開く必要があることを意味します。
      makefs = "ext4"               # 作成するファイルシステムのタイプを指定します。この例では ext4 を使用します。
      integrity = true              # true はデータ整合性サポートが有効であることを意味します。false はデータ整合性サポートが無効であることを意味します。
      
      # キー設定
      [encrypt.kms]                 # キーの保存タイプを指定します。ここでは、Key Management Service (KMS) タイプが選択されています。
      secret_name = "confidential_cloud_disk_passphrase"   # KMS インスタンスに保存されているシークレット名。前の例では confidential_cloud_disk_passphrase です。
      # アプリケーション ID 認証情報ファイル (clientKey_****.json ファイル) の内容。
      client_key = '''
      {
        "KeyId": "KAAP.b183152a-c3bf-43ae-9399-a101607b****",
        "PrivateKeyData": "MIIJ0wIBAzCCCZ8GCSqGSIb3DQE****"
      }
      '''
      client_key_password = "258372e962f5204ce648bc66243f****"    # 認証情報セキュリティトークンファイル (clientKey_****_Password.txt ファイル) の内容。
      kms_instance_id = "kst-bjj67d004a85ykq80****"               # KMS インスタンス ID。
      # KMS インスタンス CA 証明書ファイル (PrivateKmsCA_kst-******.pem ファイル) の内容。
      kms_cert_pem = """
      -----BEGIN CERTIFICATE-----
      MIIDuzCCAqOgAwIBAgIJALTKwWAjvbMiMA0GCSqGSIb3DQEBCwUAMH****
      -----END CERTIFICATE-----
      -----BEGIN CERTIFICATE-----
      MIID3zCCAsegAwIBAgIJAO8qnQyTy8/kMA0GCSqGSIb3DQEBCwUAMH****
      -----END CERTIFICATE-----
      """
  3. ボリュームのステータスを表示します。

    sudo cryptpilot-crypt show data1

    data0 ボリュームの設定を表示できます:

    • Initialized 列:ボリュームが初期化されていないことを示します。

    • Openedボリュームが開かれていないことを示します。

    image

  4. ボリュームを初期化し、そのステータスを表示します。

    1. ボリュームを初期化します。

      sudo cryptpilot-crypt init data1
    2. ボリュームのステータスを表示します。

      sudo cryptpilot-crypt show data1

      次の出力は、ボリュームが初期化されたことを示しています (Initialized: True)。image

  5. ボリュームを開き、そのステータスを表示します。

    1. ボリュームを開きます。

      sudo cryptpilot-crypt open data1

      image

    2. ボリュームのステータスを表示します。

      sudo cryptpilot-crypt show

      次の出力は、ボリュームが開かれていることを示しています (Opened: True)。image

    3. ボリュームに対応する仮想デバイスを確認します。

      sudo file -Ls /dev/mapper/data1

      ボリュームが開かれると、次のパスに仮想ブロックデバイスが作成されます: /dev/mapper/<volume_name>

      image

  6. ファイルシステムをマウントしてデータを書き込みます。

    data1 ボリュームを /mnt/data1 パスにマウントし、機密データを表す /mnt/data1/data.txt ファイルを作成します。

    sudo mkdir -p /mnt/data1
    sudo mount -t ext4 /dev/mapper/data1 /mnt/data1
    echo "secret data" | sudo tee /mnt/data1/data.txt > /dev/null
  7. ボリュームを閉じて再度開き、以前に書き込まれたデータを確認します。

    重要
    • この例では、ワンタイムキー (OTP) モデルを使用しています。ボリュームがシャットダウンされると、そこに保存されている機密データは完全に削除されます。

    • ボリュームを閉じる前に、ボリュームへの読み書きを行っているすべてのプロセスを停止してください。ボリュームが使用中でないことを確認するために、ボリュームからファイルシステムをアンマウントします。

    1. ファイルシステムをアンマウントし、ボリュームを閉じます。

      sudo umount /mnt/data1
      sudo cryptpilot-crypt close data1
    2. ボリュームを再度開き、ファイルシステムをマウントし、ボリューム内のファイルにアクセスします。

      sudo cryptpilot-crypt open data1
      sudo mount -t ext4 /dev/mapper/data1 /mnt/data1
      cat /mnt/data1/data.txt

      出力は、以前に書き込まれたデータがまだ存在することを示しています。これにより、永続的な保存機能が検証されます。image

ステップ 4: 起動時にボリュームを自動的に開くようにインスタンスを設定

  1. 設定ファイルを変更します。

    自動的に開きたいボリュームについては、その設定ファイルの auto_open フィールドの値を true に変更します。image

  2. (オプション) 永続ボリュームの場合、インスタンス起動時に自動的に開かれるようにするには、事前に sudo cryptpilot-crypt init <volume_name> コマンドを実行してボリュームを手動で初期化する必要があります。

  3. cryptpilot サービスを開始し、起動時に自動的に開始するように有効化します。

    重要

    cryptpilot の設定を変更するたびに、cryptpilot サービスを開始し、起動時に自動的に開始するように有効化する必要があります。これにより、ボリュームの自動オープン機能が有効になります。

    sudo systemctl enable --now cryptpilot.service
  4. 手順

  5. ボリュームのステータスを表示します。

    sudo cryptpilot-crypt show

    次の出力は、ボリュームが自動的に開かれたことを示しています。image

Cryptpilot の設定

Cryptpilot のデフォルト設定ディレクトリは /etc/cryptpilot/ で、次の設定ファイルが含まれています:

  • ボリューム設定:デフォルトパスは /etc/cryptpilot/volumes/ です。各ボリュームは設定ファイルに対応しています。

    • 一時保存タイプ (OTP)

      # 復号されたデータを持つ結果のボリューム名。/dev/mapper/ 以下に設定されます。
      volume = "data0"
      # 基盤となる暗号化デバイスへのパス。
      dev = "/dev/nvme1n1p1"
      # 起動時に LUKS2 デバイスを開き、マッピングを設定するかどうか。デフォルト値は false です。
      auto_open = true
      # ボリューム上で初期化するファイルシステム。許可される値は ["swap", "ext4", "xfs", "vfat"] です。指定されていない場合、またはデバイスが「空」でない場合 (つまり、何らかの署名が含まれている場合)、操作はスキップされます。
      makefs = "ext4"
      # データ整合性のサポートを有効にするかどうか。デフォルト値は false です。整合性はリプレイ (ロールバック) 攻撃を防ぐことはできません。
      integrity = true
      
      # ワンタイムパスワード (一時ボリューム)
      [encrypt.otp]
    • 永続保存タイプ (自己構築 Trustee サービス)

      # 復号されたデータを持つ結果のボリューム名。/dev/mapper/ 以下に設定されます。
      volume = "data0"
      # 基盤となる暗号化デバイスへのパス。
      dev = "/dev/nvme1n1p1"
      # 起動時に LUKS2 デバイスを開き、マッピングを設定するかどうか。デフォルト値は false です。
      auto_open = true
      # ボリューム上で初期化するファイルシステム。許可される値は ["swap", "ext4", "xfs", "vfat"] です。指定されていない場合、またはデバイスが「空」でない場合 (つまり、何らかの署名が含まれている場合)、操作はスキップされます。
      makefs = "ext4"
      # データ整合性のサポートを有効にするかどうか。デフォルト値は false です。整合性はリプレイ (ロールバック) 攻撃を防ぐことはできません。
      integrity = true
      
      # キー仲介サービス
      [encrypt.kbs]
      # KBS インスタンスの HTTP URL。
      kbs_url = "http://<trustee-ip>:8081/api"
      # パスフレーズとして使用される KBS リソースを参照する KBS インスタンス内のリソース URI。`kbs:///<repo>/<type>/<tag>` の形式である必要があります。
      key_uri = "kbs:///default/mykey/volume_data0"
      # KBS インスタンスへの HTTPS 接続に使用される X.509 ルート証明書 (PEM 形式)。指定されていない場合、システム内のネイティブのルート CA 証明書ストアが使用されます。
      kbs_root_cert = """
      -----BEGIN CERTIFICATE-----
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -----END CERTIFICATE-----
      """
      
    • 永続保存タイプ (Alibaba Cloud KMS)

      # 復号されたデータを持つ結果のボリューム名。/dev/mapper/ 以下に設定されます。
      volume = "data0"
      # 基盤となる暗号化デバイスへのパス。
      dev = "/dev/nvme1n1p1"
      # 起動時に LUKS2 デバイスを開き、マッピングを設定するかどうか。デフォルト値は false です。
      auto_open = true
      # ボリューム上で初期化するファイルシステム。許可される値は ["swap", "ext4", "xfs", "vfat"] です。指定されていない場合、またはデバイスが「空」でない場合 (つまり、何らかの署名が含まれている場合)、操作はスキップされます。
      makefs = "ext4"
      # データ整合性のサポートを有効にするかどうか。デフォルト値は false です。整合性はリプレイ (ロールバック) 攻撃を防ぐことはできません。
      integrity = true
      
      # Aliyun KMS
      [encrypt.kms]
      # KMS インスタンスの ID
      kms_instance_id = "kst-XXXXXXXXX"
      # KMS インスタンスに保存されているシークレット名。
      secret_name = "XXXXXXXXX"
      # clientKey_****.json ファイルの内容。
      client_key = '''
      {
        "KeyId": "KAAP.XXXXXXXXX",
        "PrivateKeyData": "XXXXXXXXX"
      }'''
      # clientKey_****_Password.txt ファイルの内容。
      client_key_password = "XXXXXXXXX"
      # KMS の CA 証明書 (PrivateKmsCA_kst-******.pem ファイルの内容)。
      kms_cert_pem = """
      -----BEGIN CERTIFICATE-----
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -----END CERTIFICATE-----
      """