2.12. HashiCorp Vault
ストレージ管理者は、Ceph Object Gateway で使用するために、キー、パスワード、および証明書を HAshiCorp Vault に安全に保存できます。HashiCorp Vault は、Ceph Object Gateway で使用されるサーバー側の暗号化にセキュアなキー管理サービスを提供します。
基本的なワークフロー:
- クライアントは、オブジェクトのキー ID に基づいて Vault からシークレットキーの作成を要求します。
- クライアントはオブジェクトのキー ID を持つオブジェクトを Ceph Object Gateway にアップロードします。
- 次に、Ceph Object Gateway は Vault から新規に作成されたシークレットキーを要求します。
- Vault は、Ceph Object Gateway に秘密鍵を返して要求に応えます。
- これで、Ceph Object Gateway は、新しい秘密鍵を使用してオブジェクトを暗号化できます。
- 暗号化が完了すると、オブジェクトが 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 ノードへのルートレベルのアクセス。
手順
Ceph 設定ファイル (デフォルトでは
/etc/ceph/ceph.conf
) を編集するためにを開き、Vault を暗号化キーストアとして有効にします。rgw_crypt_s3_kms_backend = vault
[client.radosgw.INSTANCE_NAME]
セクションで、Token または Vault エージェントのいずれかの Vault 認証メソッドを選択します。Token を使用している場合は、以下の行を追加します。
rgw_crypt_vault_auth = token rgw_crypt_vault_token_file = /etc/ceph/vault.token rgw_crypt_vault_addr = http://VAULT_SERVER:8200
Vault エージェント を使用している場合は、以下の行を追加します。
rgw_crypt_vault_auth = agent rgw_crypt_vault_addr = http://VAULT_SERVER:8100
[client.radosgw.INSTANCE_NAME]
セクションで、Key/Value または Transit のいずれかの Vault シークレットエンジンを選択します。Key/Value を使用している場合は、以下の行を追加します。
rgw_crypt_vault_secret_engine = kv
Transit を使用している場合は、以下の行を追加します。
rgw_crypt_vault_secret_engine = transit
必要に応じて、
[client.radosgw.INSTANCE_NAME]
セクションで、暗号化キーを取得する Vault 名前空間を設定できます。rgw_crypt_vault_namespace = NAME_OF_THE_NAMESPACE
パス接頭辞を設定し、Ceph Object Gateway が Vault から暗号化キーを取得する場所を制限します。
例
rgw_crypt_vault_prefix = /v1/secret/data
エクスポート可能な 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
- 変更を 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 レベルのアクセス。
手順
キー/値 バージョン 2 シークレットエンジンを有効にします。
[root@vault ~]# vault secrets enable kv-v2
新しいキーを作成します。
構文
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 レベルのアクセス。
手順
Transit シークレットエンジンを有効にします。
[root@vault ~]# vault secrets enable transit
新しいエクスポート可能なキーを作成します。
構文
vault write -f transit/keys/BUCKET_NAME exportable=true
例
[root@vault ~]# vault write -f transit/keys/mybucketkey exportable=true
注記デフォルトでは、上記のコマンドは
aes256-gcm96
タイプキーを作成します。キーの作成を確認します。
構文
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) へのアクセス。
手順
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 ドキュメントを参照してください。