LUKSでClevisを使用

LUKSで暗号化されているボリュームまたはデバイスの場合、ClevisをLUKSスロットにバインドできます。ClevisがLUKSスロットにバインドされると、ユーザーがLUKSパスフレーズの入力を求められるときに、ネットワーク・バインドの自動復号化がトリガーされます。

次の手順では、LUKSスロットに対してClevisをバインドおよびバインド解除し、ClevisがボリュームまたはデバイスのLUKSと統合されていることを確認し、Tangキーがローテーションされる場合はボリュームまたはデバイスのClevisを更新する方法について説明します。

ClevisをLUKSスロットにバインド

ClevisをLUKSスロットにバインドして、Tangサーバーを使用してLUKS暗号化デバイスをロック解除するには、clevis luks bindコマンドを実行します。このコマンドでは、Tangサーバーによって通知されるキーを信頼するように求められます。同様に、このコマンドはLUKSパスワードの入力を求めます。

コマンドを入力するときは、LUKSで暗号化されたデバイスへのパスを指定します。次の例では、システムはLVMを使用し、ルート・ボリュームはLUKSで暗号化されているため、デバイス・パスとして/dev/ol/rootが使用されます。/dev/sda1などのブロック・デバイスを同様に使用できます。また、JSON文字列で、TangサーバーへのURLを指定する必要があります。

次の例を参照してください。

sudo clevis luks bind -d /dev/ol/root tang '{"url": "http://tang-server.example.org:7500"}'
...
The advertisement is signed with the following keys:
        i9sPMu_sn6vMjzyJm8ZALj7opDE

Do you wish to trust the advertisement? [yN] y
Enter existing LUKS password:

この操作では、いくつかの手順が実行されます。

  • Clevisは、プライマリLUKSキーと同じエントロピを持つ新しいキーを作成します。
  • 新しいキーは、Tangキーを使用してClevisによって暗号化されます。
  • Clevisは、LUKSヘッダーのTangサーバーに接続するためのトークンおよびメタデータを格納します。
  • キーはLUKSで使用可能です。

ClevisとLUKSの統合の検証

ClevisとLUKSの統合は、いくつかの方法で確認できます。
  1. cryptsetupコマンドを使用して、デバイスのLUKSMeta情報を確認します。
    sudo cryptsetup luksDump /dev/ol/root              

    Clevisキーがいずれかのスロットに追加され、そのスロットにclevisトークンが割り当てられていることが示されます。

  2. clevis luks listコマンドを実行して、Clevisが使用するスロットと、バインディングのTangサーバー情報を確認します。
    sudo clevis luks list -d /dev/ol/root            
  3. ブート時にデバイスが自動的にロック解除されるかどうかを確認します。

    ブート時にデバイスが必要で、clevis-dracutがインストールおよび構成されている場合、システムはブート時にLUKSパスフレーズの入力を求め続けます。ただし、ClevisはTangサーバーを使用してキーを復号化しようとし、デバイスを自動的にロック解除します。Clevisが成功すると、パスフレーズ・プロンプトは一定期間の経過後に閉じます。

 Tangキー・ローテーションのためのClevisの更新

Tangサーバー管理者は、定期的にサーバーのTangキーをローテーションして、セキュリティを強化できます。これが発生した場合、ClevisはLUKSトークンを正しく復号化できなくなる可能性があり、新しいTangキーを使用して再生成する必要があります。ClevisがLUKSトークンの復号化に失敗した場合、ブート時にパスフレーズの入力を使用してLUKSに対して認証する必要があります。

Tangキーがローテーションされているかどうかを確認し、新しく暗号化されたトークンを再生成するには、次の手順を実行します。

  1. 指定したデバイスに対してClevisがバインドされているLUKSスロットを特定します。
    sudo clevis luks list -d /dev/ol/root

    次のような出力が表示されることがあります。

    1: tang '{"url":"http://tang-server.example.org:7500"}'
  2. Clevisを取得して、指定したスロットでTangキーが更新されているかどうかを報告し、LUKSトークンを自動的に再生成します。
    sudo clevis luks report -d /dev/ol/root -s 1
    次のような出力が表示されることがあります。
    ...
    Report detected that some keys were rotated.
    Do you want to regenerate luks metadata with 
    "clevis luks regen -d /dev/ol/root -s 1"? [ynYN]

    ClevisがLUKSトークンを自動的に再生成できるようにするには、yを入力します。

トークンの再生成手順が機能しない場合は、オプションで既存のLUKSスロットからClevisをバインド解除すると再度バインドできます。

LUKSスロットからのClevisのバインド解除

clevis luks unbindコマンドを使用して、LUKSスロットからClevisをバインド解除できます。

-sオプションに続けてスロット番号を指定して、Clevisがバインドされているスロット番号を指定する必要があることに注意してください。この操作は破壊的で、指定されたスロットのLUKSMetaデータがワイプされるため、操作の確認を求められます。

  1. clevis luks unbindコマンドを使用して、スロットからClevis LUKSメタデータを削除します。
    sudo clevis luks unbind -d /dev/ol/root -s 1
  2. スロットにLUKS内のメタデータがないことを確認します。
    sudo cryptsetup luksDump /dev/ol/root

    スロットにclevisのメタデータが存在しないことが出力に表示されます。