シークレットのローテートとロックのベスト・プラクティス
IBM Cloud® Secrets Manager を使用すれば、シークレットや機密データのローテーションに関する戦略を策定できます。 シークレット管理に関連したベスト・プラクティスを実装するための以下の推奨ガイドラインを確認してください。
ローテーション戦略の定義
Secrets Manager を使用してシークレット管理戦略を設計する際、組織の内部ガイドラインに基づいてシークレットをローテートする頻度を検討してください。 シークレットをローテートするためにアクセスする必要があるユーザーまたはサービス ID を事前に決定し、アプリケーションの中断を回避するためにそれらのシークレットを手動でローテートする方法を決定します。
-
シークレットのローテーションの頻度を決定します。
シークレットを Secrets Managerに保管した後、そのローテーションの頻度を決定します。 人員の入れ替わりやプロセスの不具合、あるいは組織の内部ガイドラインに基づき、シークレットをローテーションさせる必要がある場合があります。 シークレット管理に関するベスト・プラクティスを満たすために、定期的に (例えば、90 日ごとに) シークレットをローテーションします。
-
Secrets Managerで管理するシークレットのタイプごとにローテーション・ワークフローをテストします。
Secrets Manager がシークレットをローテートする要求を評価する方法は、シークレットのタイプによって異なります。 例えば、一部のシークレットはローテーションで指定したデータに即時に置き換えられますが、パブリック証明書などの他のシークレットは追加の検証ステップに移行します。 Secrets Manager がローテーション要求を処理する方法について詳しくは、 シークレットの手動ローテート を参照してください。
-
アプリケーションに最新のシークレットバージョンをデプロイするための自動化を作成します。
自動化されたフローを使用して、シークレットのローテート後に最新バージョンを取得してデプロイします。 詳しくは、 シークレットをロックしてアプリケーションの停止を回避する を参照してください。
有効期限が切れるシークレットに対するアラートを設定する
Event Notifications サービスに接続して、シークレットまたは証明書の有効期限が間もなく切れるときに Secrets Manager が事前に通知できるようにします。
- イベント通知を有効にして、インスタンスのアラートをセットアップします。 インスタンスを Event Notifications サービスに接続するには、 Secrets Manager 「UI」>「設定」> Event Notifications に移動します。
- Event Notifications でトピックとサブスクリプションを作成し、アラートを 選択した宛先(Slack や E メールなど) に転送して配信できるようにします。
アラート設定が正常に機能していることを確認するには、 IBM Cloud Logs インスタンスでアラートを作成し、 Event Notifications と Secrets Manager の連携に問題が発生した場合に通知されるようにしてください。 Secrets Manager は、 INFO または ERROR のログとして 送信されたイベント通知を記録する も記録します。
シークレットの自動ローテーションを有効にする
自動ローテーションを有効にすることで、インスタンス内のシークレットをローテートするプロセスを簡素化します。
-
シークレットをアクティブにしておく期間を制限するには、自動ローテーションを使用します。
シークレットの自動ローテーションを定期的な間隔でスケジュールすることで、資格情報が漏えいする可能性を減らすことができます。 指定したローテーション間隔に基づいてシークレットをローテートするときには、 Secrets Manager によって自動的に新しいバージョンのシークレットが作成されます。 詳しくは、 シークレットの自動ローテート を参照してください。
-
シークレットの有効期限が切れる前に自動ローテーションが行われるようにスケジュールします。
アプリケーションの中断を回避するために、自動ローテーションと有効期限の間の最小間隔を 30 日に設定することをお勧めします。
シークレットをロックすることでアプリケーションの停止を回避
ロックを使用して、シークレットの定期的なローテーションを計画します。 自動化ワークフローの一部としてシークレットのロックを作成および削除する場合、シークレットの最新バージョンがアプリケーションに完全にデプロイされた後でのみ、シークレットを安全に削除できます。
-
シークレットを使用するアプリケーションまたはサービスを表すために、シークレットに対してロックを作成します。 Secrets Manager UI からロックを作成するには、 「アクション」 ページに移動し、 「アクション」 メニュー
>「ロック」 をクリックします。
ロックは、シークレットと、そのシークレットを使用するクライアントまたはアプリケーションとの間で作成できる一種のマッピングと考えることができます。 シークレットにロックが付加されている場合、そのシークレットはアプリケーションによって現在使用されているため、変更してはならないことを意味します。
秘密は、関連するすべてのロックが解除された後でなければ、削除または変更できません。
-
アプリケーションが最新のシークレット・バージョンを取得した後にのみ、古いシークレットまたは期限切れのシークレットをインスタンスから安全に削除できるようにする自動化フローを作成します。 例えば、以下のシナリオがあるとします。
89 日後に有効期限が切れ、90 日後に自動的にローテートされるようにスケジュールされるシークレットを作成します。
秘密をロックするための自動化されたワークフローの例。 アクションの説明 1 Secrets Manager から秘密を取得するパイプラインを実行し、それを Kubernetes クラスターにデプロイして、アプリケーションで使用できるようにします。 2 シークレットの現行バージョンに対してロックを作成します (シークレットを使用するアプリケーションまたはサービスごとに 1 つのロック)。 3 90 日後に、シークレットがローテートされたことを示す通知を Event Notifications から受け取ります。 通知への応答として、パイプラインを実行して最新のシークレット・バージョンを取得し、それをクラスターにデプロイします。 4 - 新しいシークレット・バージョンがクラスター内のサービス・ポッドによって取得されたことを検証し、2) Secrets Manager内のシークレットの前のバージョンの両方のロックを解除する別のパイプラインを実行します。
5 2 日後に、シークレットの前のバージョンが期限切れになり、インスタンスから安全に削除されます。 次の定期的なローテーション・サイクルでは、ステップ 2 から 4 を繰り返します。