2.12. HashiCorp Vault

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

Ceph Vault Integration Diagram

基本的なワークフロー:

  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.12.1. 前提条件

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

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

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

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

  • キー/値のバージョン 2
  • Transit

キー/値のバージョン 2

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

注記

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

Transit

Transit シークレットエンジンは、移動データで暗号化機能を実行します。Transit シークレットエンジンはハッシュを生成したり、ランダムバイトのソースとなったり、データの署名や検証を行うことができます。Vault は、Transit シークレットエンジンの使用時にデータを保存しません。Transit シークレットエンジンは、複数の目的で同じ鍵を使用できるようにすることで鍵導出をサポートします。また、transit シークレットエンジンは鍵バージョン管理をサポートします。Transit シークレットエンジンは、以下のキータイプをサポートします。

aes128-gcm96
128 ビットの AES キーと 96 ビットのノンスを備えた AES-GCM。暗号化、復号、鍵導出、および収束暗号化をサポートします。
aes256-gcm96
256 ビットの AES キーと 96 ビットのノンスを備えた AES-GCM。暗号化、復号、鍵導出、および収束暗号化 (デフォルト) をサポートします。
chacha20-poly1305
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.12.3. Vault の認証

HashiCorp Vault は、複数のタイプの認証メカニズムをサポートします。Ceph Object Gateway は現在、Vault エージェントとトークン認証メソッドをサポートしています。Ceph Object Gateway は rgw_crypt_vault_auth オプションおよび rgw_crypt_vault_addr オプションを使用して HashiCorp Vault を使用するように設定します。

トークン

トークン認証方法により、ユーザーはトークンを使用して認証できます。新規トークンの作成、トークンごとのシークレットの取り消し、およびその他の多くのトークン操作が可能です。トークンストアを使用すると、他の認証方法をバイパスできます。トークン認証方法を使用する場合は、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.12.4. Vault の namespace

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

関連情報

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

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

Ceph Object Gateway が HashiCorp Vault を使用するように設定するには、暗号化キーストアとして設定する必要があります。現在、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. エクスポート可能な Transit キーの場合、以下のように接頭辞パスを設定します。

      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 設定ファイルに保存します。

関連情報

  • 詳細は、Red Hat Ceph Storage Object Gateway 設定および管理ガイドVault 向けシークレットエンジン セクションを参照してください。
  • 詳細は、Red Hat Ceph Storage Object Gateway 設定および管理ガイドVault 向け認証 セクションを参照してください。

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

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

重要

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

前提条件

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

手順

  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.12.7. 転送エンジンを使用した鍵の作成

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

前提条件

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

手順

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

    [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.12.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.12.9. 関連情報

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