2.10. HashiCorp Vault

ストレージ管理者は、Ceph Object Gateway で使用するために、キー、パスワード、および証明書を HAshiCorp Vault に安全に保存できます。HashiCorp Vault は、Ceph Object Gateway によって使用されるサーバー側の暗号化にセキュアなキー管理サービスを提供します。

Ceph Vault の統合ダイアグラム

基本的なワークフロー:

  1. クライアントは、オブジェクトのキー ID に基づいて Vault から秘密鍵の作成を要求します。
  2. クライアントは、オブジェクトのキー ID を持つオブジェクトを Ceph Object Gateway にアップロードします。
  3. その後、Ceph Object Gateway は vault から新規作成された秘密鍵を要求します。
  4. Vault は秘密鍵を Ceph Object Gateway に返すことで要求に応答します。
  5. Ceph Object Gateway は新しい秘密鍵を使用してオブジェクトを暗号化できるようになりました。
  6. 暗号化が完了すると、オブジェクトは Ceph OSD に保存されます。
重要

Red Hat は、弊社のテクノロジーパートナーと協力して、本書をお客様にサービスとして提供します。ただし、Red Hat はこの製品のサポートを提供しません。この製品の技術的なサポートが必要な場合は、Hashicorp にサポートを依頼してください。

2.10.1. 前提条件

  • 稼働中の Red Hat Ceph Storage クラスター
  • Ceph Object Gateway ソフトウェアのインストール。
  • HashiCorp Vault ソフトウェアのインストール

2.10.2. Vault のシークレットエンジン

HashiCorp Vault は、データを生成、保存、または暗号化するために複数のシークレットエンジンを提供します。アプリケーションプログラミングインターフェース(API)は、そのデータのアクションを要求するシークレットエンジンにデータ呼び出しを送信し、シークレットエンジンはそのアクション要求の結果を返します。

Ceph Object Gateway は、HshiCorp Vault シークレットエンジンの 2 つをサポートします。

  • キー/値バージョン 2
  • 移動中

キー/値バージョン 2

キー/値のシークレットエンジンは、ディスク上の Vault にランダムなシークレットを保存します。kv エンジンのバージョン 2 では、設定可能な数のバージョン数をキーに指定できます。バージョンのデフォルト数は 10 です。バージョンを削除しても、基盤のデータは削除されませんが、データを削除したとマークするため、削除されたバージョンの削除が解除されます。キー名は文字列でなければ、エンジンは文字列以外の値を文字列に変換します。コマンドラインインターフェースを使用する場合、エンジンは文字列以外の値を文字列に変換します。文字列以外の値を保持するには、JSON ファイルを指定するか、HTTP アプリケーションプログラミングインターフェース(API)を使用します。

注記

アクセス制御リスト(ACL)ポリシーの場合、キー/値のシークレットエンジンは 作成 機能と 更新 機能の違いを認識します。

移動中

移行シークレットエンジンは、受信データで暗号化機能を実行します。移行シークレットエンジンはハッシュを生成でき、ランダムなバイトのソースで、データの署名および検証も可能です。Vault は移行シークレットエンジンを使用する場合にデータを保存しません。移行シークレットエンジンは、複数の目的で同じキーを使用できるようにするため、キーの派生をサポートします。また、推移シークレットエンジンはキーバージョン管理をサポートします。Transit シークレットエンジンは、以下のキータイプをサポートします。

aes128-gcm96
128 ビットの AES 鍵と 96 ビットの nonce を使用する AES-GCM は、暗号化、復号化、鍵の復号化、および収束暗号化をサポートします。
aes256-gcm96
256 ビットの AES キーと 96 ビットの nonce を使用する AES-GCM は、暗号化、復号化、鍵の復号化、および収束暗号化(デフォルト)をサポートします。
chacha20-poly1305
Chacha20: 256 ビットキーを使用した Chacha20-Poly1305。暗号化、復号化、鍵の復号化、および収束暗号化をサポートします。
ed25519
ed25519; は署名、署名検証、および鍵の派生をサポートします。
ecdsa-p256
曲線 P-256 を使用した ECDSA。署名および署名の検証をサポートします。
ecdsa-p384
曲線 P-384 を使用した ECDSA。署名および署名の検証をサポートします。
ecdsa-p521
曲線 P-521 を使用する ECDSA。署名および署名の検証をサポートします。
rsa-2048
2048 ビットの RSA 鍵(暗号化、復号化、署名、および署名の検証に対応)
rsa-3072
3072 ビットの RSA 鍵(暗号化、復号化、署名、および署名の検証に対応)
rsa-4096
4096 ビットの RSA 鍵(暗号化、復号化、署名、および署名の検証に対応)

関連情報

  • 詳細は、Vault のプロジェクトサイトにある 「KV Secrets Engine」ドキュメントを参照してください。
  • 詳細は、Vault のプロジェクトサイトにある「Transport Secrets Engine」ドキュメントを参照してください。

2.10.3. Vault の認証

HashiCorp Vault は、さまざまな種類の認証メカニズムをサポートします。Ceph Object Gateway は現在 Vault エージェントおよびトークンの認証方法をサポートします。Ceph Object Gateway は rgw_crypt_vault_auth オプションおよび rgw_crypt_vault_addr オプションを使用して HashiCorp Vault を使用するように設定します。

token

トークン認証方法により、ユーザーはトークンを使用した認証が可能になります。新規トークンの作成、トークンによるシークレットの取り消し、その他の多くのトークン操作を行うことができます。トークンストアを使用すると、他の認証方法をバイパスできます。トークン認証方法を使用する場合は、rgw_crypt_vault_token_file オプションも使用する必要があります。トークンファイルは、Ceph Object Gateway によってのみ読み取り可能です。また、特定のパスからのキーリングの取得を可能にする制限されたポリシーを持つ Vault トークンを使用する必要があります。

警告

Red Hat は、実稼働環境にトークン認証を使用しないことを推奨します。

vault エージェント

Vault エージェントは、クライアントノード上で実行され、クライアント側のキャッシュとトークンの更新を提供するデーモンです。Vault エージェントは通常 Ceph Object Gateway ノードで実行されます。

関連情報

  • 詳細は、Vault のプロジェクトサイトにある「Token Auth Method」ドキュメントを参照してください。
  • 詳細は、Vault のプロジェクトサイトにある「Vault Agent」ドキュメントを参照してください。

2.10.4. Vault の名前空間

HashiCorp Vault をエンタープライズサービスとして使用することで、組織内のチームが使用できる分離された namespace を一元管理できるようになります。これらの分離された名前空間環境は テナント と呼ばれ、組織内のチームがこれらの テナント を使用して、ポリシー、シークレット、ID を他のチームから分離することができます。Vault の名前空間機能は、単一のインフラストラクチャー内からのセキュアなマルチテナンシーをサポートします。

関連情報

2.10.5. Vault を使用するための Ceph Object Gateway の設定

HashiCorp Vault を使用するように Ceph Object Gateway を設定するには、暗号化キーストアとして設定する必要があります。現在、Ceph Object Gateway は 2 つの異なるシークレットエンジンと 2 つの異なる認証方法をサポートしています。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター
  • Ceph Object Gateway ソフトウェアのインストール。
  • Ceph Object Gateway ノードへのルートレベルのアクセス。

手順

  1. Ceph 設定ファイル (デフォルトでは /etc/ceph/ceph.conf) を編集するためにを開き、Vault を暗号化キーストアとして有効にします。

    rgw_crypt_s3_kms_backend = vault
  2. [client.radosgw.INSTANCE_NAME] セクションで、Token または Vault エージェントのいずれかの Vault 認証メソッドを選択します。

    1. Token を使用している場合は、以下の行を追加します。

      rgw_crypt_vault_auth = token
      rgw_crypt_vault_token_file = /etc/ceph/vault.token
      rgw_crypt_vault_addr = http://VAULT_SERVER:8200
    2. Vault エージェント を使用している場合は、以下の行を追加します。

      rgw_crypt_vault_auth = agent
      rgw_crypt_vault_addr = http://VAULT_SERVER:8100
  3. [client.radosgw.INSTANCE_NAME] セクションで、Key/Value または Transit のいずれかの Vault シークレットエンジンを選択します。

    1. Key/Value を使用している場合は、以下の行を追加します。

      rgw_crypt_vault_secret_engine = kv
    2. Transit を使用している場合は、以下の行を追加します。

      rgw_crypt_vault_secret_engine = transit
  4. 必要に応じて、[client.radosgw.INSTANCE_NAME] セクションで、暗号化キーを取得する Vault 名前空間を設定できます。

    rgw_crypt_vault_namespace = NAME_OF_THE_NAMESPACE
  5. パスの接頭辞を設定して、Ceph Object Gateway が Vault から暗号鍵を取得する場所を制限します。

    rgw_crypt_vault_prefix = /v1/secret/data

    1. エクスポート可能な移行キーの場合は、以下のようにプレフィックスパスを設定します。

      rgw_crypt_vault_prefix = /v1/transit/export/encryption-key

      Vault サーバーのドメイン名が vault-server である場合は、Ceph Object Gateway は以下の URL から暗号化されたトランジションキーを取得します。

      http://vault-server:8200/v1/transit/export/encryption-key

  6. Ceph 設定ファイルに変更を保存します。

関連情報

2.10.6. kv エンジンを使用したキーの作成

HashiCorp Vault Key/Value シークレットエンジン (kv) を設定し、Ceph Object Gateway で使用するためのキーを作成できるようにします。シークレットは、kv シークレットエンジンのキーと値のペアとして保存されます。

重要

サーバー側の暗号化のキーは 256 ビットの長さで、base64 を使用してエンコードする必要があります。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター
  • HashiCorp Vault ソフトウェアのインストール
  • HashiCorp Vault ノードへのルートレベルのアクセス。

手順

  1. キー/値バージョン 2 シークレットエンジンを有効にします。

    [root@vault ~]# vault secrets enable kv-v2
  2. 新しいキーを作成します。

    構文

    vault kv put secret/PROJECT_NAME/BUCKET_NAME key=$(openssl rand -base64 32)

    [root@vault ~]# vault kv put secret/myproject/mybucketkey key=$(openssl rand -base64 32)
    
    ====== Metadata ======
    Key              Value
    ---              -----
    created_time     2020-02-21T17:01:09.095824999Z
    deletion_time    n/a
    destroyed        false
    version          1

2.10.7. 推移エンジンを使用した鍵の作成

HashiCorp Vault 遷移シークレットエンジン (transit) を設定して、Ceph Object Gateway で使用するキーを作成できるようにします。Ceph Object Gateway でのサーバー側の暗号化に使用するには、Transport Secret Engine でキーを作成する必要があります。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター
  • HashiCorp Vault ソフトウェアのインストール
  • HashiCorp Vault ノードへのルートレベルのアクセス。

手順

  1. 移行シークレットエンジンを有効にします。

    [root@vault ~]# vault secrets enable transit
  2. 新しいエクスポート可能なキーを作成します。

    構文

    vault write -f transit/keys/BUCKET_NAME exportable=true

    [root@vault ~]# vault write -f transit/keys/mybucketkey exportable=true

    注記

    デフォルトでは、上記のコマンドは aes256-gcm96 タイプキーを作成します。

  3. キーの作成を確認します。

    構文

    vault read transit/export/encryption-key/BUCKET_NAME/VERSION_NUMBER

    [root@vault ~]# vault read transit/export/encryption-key/mybucketkey/1
    
    Key     Value
    ---     -----
    keys    map[1:-gbTI9lNpqv/V/2lDcmH2Nq1xKn6FPDWarCmFM2aNsQ=]
    name    mybucketkey
    type    aes256-gcm96

    注記

    キーバージョンを含む完全なキーパスを指定する必要があります。

2.10.8. AWS および vault を使用したオブジェクトのアップロード

Ceph Object Gateway にオブジェクトをアップロードする場合、Ceph Object Gateway は vault からキーを取得し、そのオブジェクトをバケットに暗号化して保存します。オブジェクトをダウンロードする要求が実行されると、Ceph Object Gateway は対応するキーを Vault から自動的に取得し、オブジェクトを復号化します。

注記

URL は、rgw_crypt_vault_addr オプションと、rgw_crypt_vault_prefix オプションで設定されたパス接頭辞を使用して構築されます。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター
  • Ceph Object Gateway ソフトウェアのインストール。
  • HashiCorp Vault ソフトウェアのインストール
  • Ceph Object Gateway クライアントノードへのアクセス
  • Amazon Web Services(AWS)へのアクセス

手順

  1. AWS コマンドラインクライアントを使用してオブジェクトをアップロードします。

    [user@client ~]$ aws --endpoint=http://radosgw:8000 s3 cp plaintext.txt s3://mybucket/encrypted.txt --sse=aws:kms --sse-kms-key-id myproject/mybucketkey

    注記

    例で使用するキーフェッチ URL は http://vault-server:8200/v1/secret/data/myproject/mybucketkey です。

2.10.9. 関連情報

  • 詳細は、Vault のプロジェクトサイトにある「Install Vault」ドキュメントを参照してください。