Contents
Consul KVストアの基本概念と主な用途
Consul KVストアは、分散システムにおいて構成情報や短期的なシークレットを安全に共有するための軽量データベースです。動的設定管理やサービス間の秘密情報を一元管理できる点で、DevOpsエンジニアやシステム管理者にとって非常に重要なツールとなっています。
Consul KVストアは、構成管理とセキュリティの両立を実現する仕組みとして注目されています。特に、動的な設定変更やシークレットの保護において、他のツールと比較して優れた柔軟性と安全性を持つ点が特徴です。
構成管理の自動化
KVストアは、複数ノードにわたる構成情報の一括管理を可能にします。例えば、クラウド環境でのリージョン設定やサービスディスカバリのパラメータをリアルタイムで共有できます。
以下の例が具体的な利用シーンです:
- 例1: マイクロサービス間で共通するAPI Gatewayのホスト名を動的に更新
- 例2: 負荷分散用に複数のLBアドレスをリスト化して管理
- 例3: 環境ごとの構成設定(開発・テスト・本番)を一元管理
このような自動化により、手動での設定変更やエラーのリスクを大幅に削減できます。
シークレットの安全な保存
Consul KVストアは、シークレット(APIキー・パスワードなど)の暗号化保存とアクセス制限機能を提供します。ACLとCAS(Compare-And-Swap)との併用で高いセキュリティを実現可能です。
注意: シークレットは常に暗号化して保存し、アクセス権は最小限に設定することが推奨されます。
参考: HashiCorp公式ドキュメント - ACLとシークレット管理
Docker環境でのConsulインスタンス起動手順
Dockerを使用することで、Consulの単一ノード構築が迅速かつ簡単に実現できます。以下に具体的なコマンドとネットワーク構成の確認手順を示します。
インストール前の準備
以下は、ConsulをDockerで利用する際の基本的な前提条件です:
- Docker Engineがインストール済みであること
- ネットワーク設定(ポート8500など)が空いていること
Dockerコマンドの実行例
最新バージョンのConsulイメージを起動するには、以下のコマンドを使用してください:
|
1 2 |
docker run -d --name consul -p 8500:8500 -e CONSUL_BIND_INTERFACE=eth0 hashicorp/consul agent -dev |
このコマンドで実行されたConsulは、ローカルのポート8500を介してアクセス可能な状態になります。
ネットワーク構成の確認
起動後、以下のコマンドでコンテナ内部のネットワーク情報を確認できます:
|
1 2 |
docker inspect consul | grep NetworkSettings -A 10 |
確認結果から、IPアドレスやポート番号が正しく設定されているかをチェックしましょう。
KVストアへの基本操作(登録・取得・更新)
ConsulのKVストアはCLIで直接操作可能です。以下に代表的なコマンドを使用した操作手順を説明します。
キー値ペアの登録方法
consul kv putコマンドを使用することで、任意のキーと値を保存できます。
1. 単一キーの登録
|
1 2 |
consul kv put config/app/timeout "30s" |
この操作で、config/app/timeoutというキーに"30s"という値が保存されます。
2. 複数キーの一括取得
複数のキーを一括で取得したい場合は、-keysオプションを追加してください:
|
1 2 |
consul kv get -keys config/app/ |
CAS(Compare-And-Swap)によるセッション制御
CASは、複数ユーザーが同時に同じキーを更新しようとした場合の競合を防ぐ仕組みです。
競合処理の回避方法
更新時にバージョン番号を指定することで、現在の値と一致している場合のみ更新されます:
|
1 2 |
consul kv put -cas config/app/timeout "60s" 1 |
ここで1は前回のバージョン番号です。不一致の場合、エラーが返されます。
更新失敗時の対処
更新に失敗した場合は、以下のメッセージが表示されます:
|
1 2 |
Error: Could not put value to key: 409 Conflict |
この場合、再度consul kv getで最新バージョン番号を取得し、再試行してください。
ACLによるアクセス制限の設定手順
ACLは、特定のユーザー・グループにのみKVストアへのアクセス権を付与する仕組みです。
ACL有効化のステップ
Consul起動時に-acl-enabled=trueオプションを指定します:
|
1 2 |
docker run -d --name consul -p 8500:8500 hashicorp/consul agent -dev -acl-enabled=true |
この設定で、ACLが有効になります。ただし、ポリシーの定義は別途必要です。
ポリシー定義ファイルの作成と適用
以下のように、アクセス権限を定義したポリシーファイルを作成します:
|
1 2 3 4 5 6 7 8 9 10 |
acl = "enable" acl.default_policy = "deny" acl.policy "my-policy" { rule "allow-read" { path "config/app/*" { policy = "read" } } } |
このファイルをconsul acl policy apply -policy-file=my-policy.hclで適用します。
Zero Trust環境でのTLS証明書導入方法
Zero Trust構築には、クライアントとサーバー間の通信にmTLS(mutual TLS)を採用することが重要です。
自己署名証明書の生成手順
以下のようにOpenSSLで自己署名証明書を作成します:
|
1 2 |
openssl req -new -x509 -days 365 -nodes -out ca.crt -keyout ca.key |
Consul設定ファイルへの反映
Consulの起動時に、-client-ca-file=ca.crtと-server-cert=consul.crtオプションを指定します:
|
1 2 3 4 |
docker run -d --name consul hashicorp/consul agent -dev \ -client-ca-file=/path/to/ca.crt \ -server-cert=/path/to/consul.crt |
この設定により、通信が暗号化され、不正アクセスを防ぐことができます。
まとめ
本記事では、Consul KVストアの実務的な使い方とDockerでの導入手順を解説しました。特に以下のポイントに注目してください:
- 構成管理やシークレット保存に最適なKVストアの活用方法
- Dockerで単純な起動コマンドからネットワーク設定までの一連の手順
- CASによる競合回避とACLによるセキュリティ確保の仕組み
- Zero Trust環境でのmTLS導入の具体的なステップ
記事内のDocker起動コマンドをコピーして実際にConsul KVストアを試してみましょう。