Kong Enterprise のお客様が HashiCorp Vault の新しいプラグインを認証とシークレット管理に使用できる方法をご紹介します。昨年リリースされた Terraform と同様に、この Vault は、Kong Enterprise のお客様が HashiCorp の一連のクラウド インフラストラクチャ自動化ツールを利用できるようにするためのもう 1 つのステップとなります。
Vault プラグインにより、Kong Enterprise ユーザーはアクセス トークンとシークレット トークンを使用してサービスまたはルートへ認証情報を追加でき、クレデンシャル トークンは Vault を介して安全に保存されます。クレデンシャル ライフサイクルは、Kong Admin API または Vault を介して個別に管理ができます。Kong Enterprise で Vault をご利用するための 5 つのステップをご紹介します。
Kong と Vault の設定方法
1. Vault オブジェクトの作成
まず、トークンを保存するための場所として Vault を作成します。Vault オブジェクトは、Kong サーバーと Vault サーバーとのコネクションの役割を行い、Vault API との通信に使用するコネクション、認証情報を定義します。 これにより、vault-auth
プラグインの異なるインスタンスが、それぞれ異なる Vault サーバーと通信できるようになり、柔軟なデプロイメントおよびコンシューマー モデルが提供されます。
Vault オブジェクトは、下記の HTTP リクエストを通して作成できます。
上記の設定では、Vault サーバーが 127.0.0.1:8200
を経由してアクセス可能になり、バージョン 1 の KV シークレット エンジンがkong-auth
で有効になっていることを前提としています。提供された Vault トークンには、少なくとも所定の Vault マウント パスに対する「読み取り」(‘read’) および「リスト」(‘list’) の権限があります。Kong Admin API を使用して認証情報を管理する場合は「書き込み」(‘write’) および「削除」(‘delete’) 権限が必要です。
Vault KV シークレット エンジンに関するドキュメンテーションは、こちらを参照してください。
2 コンシューマーの作成
Vault プラグインを使用するためには、1 つまたは複数のクレデンシャルと関連付けるためのコンシューマーの作成が必要となります。また、コンシューマーは、アップストリーム サービスを使用する開発者を意味します。前回のステップで作成した Vault オブジェクトは Kong とのコネクションとなり、アクセス、シークレット トークンが保存される Vault サーバーに接続するために使用されます。
次に、既存のコンシューマー オブジェクトとクレデンシャルを関連付けます。コンシューマーを作成するには、次のリクエストを実行します。
· username
(semi-optional)
コンシューマーのユーザー名または cutom_id
どちらかに必ず情報を入力してください。
· custom_id
(semi-optional)
コンシューマーを別のデータベースに配列するために使用されるカスタム識別子です。
ACL プラグインおよびホワイトリストを利用している場合は、新規のコンシューマーをホワイトリストのグループへ追加する必要があります。ACL プラグインをコンシューマーと関連付けする方法については、こちらを参照ください。コンシューマーは多数のクレデンシャル情報を保有している場合があります。
3. ペアのアクセス、シークレット トークンの作成
次に、vault-auth
のクレデンシャル情報として機能するペアのトークンを作成します。証明書の所有者を認識するaccess
トークンと、access
トークンの所有者を認証するsecret
トークンの 2 種類となります。
Kong Admin API もしくは Vault を使用して直接アクセスすることで、ペアのトークンの管理ができます。ペアのトークンは既存の Kong コンシューマーと関連付けられている必要があります。 Kong Admin API を使用してペアのトークンを作成するには、次のリクエストを実行します。
access_token
またはsecret_token
の値が指定されていない場合、トークンの値は暗号論的擬似乱数生成器 (CSPRNG) を介して自動的に生成されます。
4. Vault オブジェクトと Vault-Auth プラグインの統合
Vault インスタンスと関連付けられているプラグインの間にシームレスな関係を築くために、Vault オブジェクトはプラグイン設定で外部参照として扱われます。
それらを統合するには、Vault オブジェクトとの関連付けを定義する必要があります。関連付けを行うには、プラグインの作成中に次の HTTP リクエストを使用します。
uuid
は既存の Vault オブジェクトのid
です。
5. Vault クレデンシャル情報の使用
Vault のクレデンシャル情報を使い始めるためには、クエリ文字列パラメーターとして access_token
とsecret_token
を指定してリクエストを送信します。
ヘッダー内の場合:
Kong と Vault を最大限に活用
ここまでのステップを通して、Kong と Vault を起動できるようになりました。Kong と Vaultをより効率よく活用するためにいくつか重要なポイントを詳しく説明します。
アクセス、シークレット トークン ペアの削除
アクセス権限を制限または削除する必要がある場合、次の API を介して Vault サーバーから既存の Vault 認証情報を削除できます。
トークン TTL
Vault からトークンを読み取る際に、Kong は応答している KV 値から ttl
フィールドを検索します。応答がある場合には、Kong は、ttl
フィールドのアドバイザリ値を優先し、ttl
フィールドで定義されている間だけ、クレデンシャルの値をキャッシュに格納します。 これにより、Kong Admin API 外部の Vault で直接作成されたトークンを、Kong によって定期的に更新することができます。
余分な Kong ペア トークン
Kong は、Kong Admin API の外部、Vault で直接作成された アクセス/トークン シークレットを読み取ることができます。現段階では、vault-auth
は Vault v1 KV エンジンに基づく認証情報の作成と読み取りをサポートしています。Vault KV のシークレット値の作成値には、以下のフィールドが含まれている必要があります。
シークレット内にある追加フィールドは適用されません。また、キーは access_token
の値でなければなりません。これは、Kong が認証情報データを取得する際に、Vault API に問い合わせるための識別子です。KV v1 のシークレット エンジンについてはこちらのマニュアルを参照してください。
vault-auth
トークンのペアは、Vault HTTP API または vault write
コマンドで作成できます。
Kong Enterprise の概要、価格、およびライセンス体系などの詳細は、こちらを参照してください。デモをご希望の方は、こちらよりお問い合わせください。
記事参照:
© Kong Inc. 2019
2019 年 05 月 28 日
「Announcing Kong’s Integration with Vault!」