プロンプトと適切なコンテキスト
これはセキュリティのシステムデザインに関する質問です。焦点は、データプレーンが承認された現在のバージョンのみを読み取る一方で、コントロールプレーンがシークレットのバージョン、テナントポリシー、コンシューマーの確認、ロールアウトウィンドウをどのように調整するかという点にあります。AWSはデータベース切り替えの中断を減らすためにユーザーを交互に切り替える手法を採用しており、Google Secret Managerはバインディングと段階的ロールアウトのために不変のバージョンとエイリアスを使用しています。単一のクラウドAPIを模倣するのではなく、これらのパターンを監査可能なマルチテナントワークフローに抽象化してください。
面接官が評価するポイント
- テナント間アクセスを防止しつつ、テナント、シークレット、バージョン、コンシューマー、ポリシーを適切にモデル化できているか。
- バージョンのオーバーラップ、ヘルス検証、冪等な再試行、可逆的なプロモーションを設計できているか。
- スケジュールされたローテーション、漏洩後の緊急失効、破棄を明確に区別できているか。
- コントロールプレーンの可用性、キャッシング、監査、運用の間のトレードオフを説明できるか。
最初に確認すべき明確化のための質問
シークレットの種類、コンシューマーの形態、テナント数、ローテーション頻度、最大オーバーラップ時間、許容される中断について確認します。プラットフォームが値を生成するのか、サードパーティAPIの更新が必要か、コンシューマーがホットリロードに対応しているか、リージョン分離、保持ポリシー、人間による承認、緊急失効が必要かを尋ねます。規模に関する情報が不足している場合は前提条件を設定し、シークレット値とメタデータのストレージを分離してください。
30秒回答フレームワーク
ポリシー登録、新しいバージョンの生成、段階的配布、検証後のプロモーション、その後の失効と監査について説明します。各テナントには分離されたシークレット名前空間と認可ポリシーが割り当てられ、シークレット値は専用のKMSまたはシークレットマネージャーにのみ存在します。コントロールプレーンは pending バージョンを作成し、コンシューマーにそれをロードしてヘルス状態を報告するよう要求した上で、エイリアスを current に移動します。古いバージョンは制御されたオーバーラップ期間中維持されます。障害が発生した場合はジョブを一時停止してエイリアスを復元し、漏洩時にはより高速な緊急パスを使用します。すべてのステップは冪等性、承認、監査ログを備えています。
ステップバイステップの詳細な回答
1. テナント、シークレット、ポリシーの境界をモデル化する
メタデータには、テナント、用途、アルゴリズム、バージョン、コンシューマー、スケジュール、リージョン、所有者、状態を保存します。KMSまたは専用のシークレットマネージャーが値を保持し、アプリケーションデータベースには参照とハッシュのみを保存します。認可はテナント、用途、コンシューマーIDによって制限され、運用担当者はデフォルトで平文を読み取ることはできません。ポリシーでは、ローテーション周期、最小オーバーラップ、検証プローブ、再試行上限、承認要件を定義します。
2. 保留中バージョンの生成と分離
スケジューラーは冪等なローテーションジョブを作成し、pending バージョンを生成して、その理由、親バージョン、有効期限を記録します。ジェネレーターとディストリビューターは分離されており、ログに値が含まれることは決してありません。サードパーティの更新には最小権限と短寿命の認証情報を使用します。AWSの交互ユーザー戦略は、切り替え前にバックアップ認証情報を準備して検証する方法を示していますが、依存関係ごとに専用のアダプターが必要です。
3. 段階的な配布とコンシューマーの検証
コンシューマーは、平文を含むログや環境変数からではなく、短寿命の認可を介してバージョン参照を取得します。最初は少数のテナントまたはインスタンスコホートから開始し、徐々に拡大します。検証では、認証、ビジネスプローブ、エラー率、レイテンシを確認します。Googleは、本番環境で latest エイリアスを直接使用すると不正な値が即座に拡散する恐れがあると警告しているため、コントロールプレーンは固定エイリアス、パーティション分割されたロールアウト、明示的なプロモーションをサポートする必要があります。
4. アトミックな切り替え、オーバーラップ、ロールバック
current エイリアスを古いバージョンから検証済みバージョンへ移動し、ロールバック用に previous を保持します。並行するローテーションが互いに上書きしないよう、プロモーションは条件付きである必要があります。オーバーラップ期間により古い認証情報が一時的に機能し続けますが、明示的な有効期限と失効アクションが必要です。コンシューマーの障害、プローブの低下、サードパーティの部分的成功が発生した場合は、ジョブを一時停止し、エイリアスを復元してエスカレーションします。
5. 緊急失効、復旧、オブザーバビリティ
漏洩または不正使用の疑いが発生した場合は、通常のスケジュールをスキップして、古いバージョンを凍結し、代替バージョンを生成し、依存関係を更新して検証範囲を拡大します。外部サービスが古い認証情報をまだ受け入れている場合、マネージャー内でバージョンを削除するだけでは不十分です。ローテーションの成功、検証時間、オーバーラップ期間、ロールバック、期限切れバージョン、テナント間拒否、平文アクセスアラート、漏洩対応時間を追跡します。バックアップには暗号化されたマテリアルとリカバリメタデータのみを保持し、訓練によってテナントの分離とエイリアスの一貫性を検証します。
高品質な回答例
シークレットの種類、コンシューマーのホットリロード機能、テナント規模、オーバーラップ期間、緊急失効の目標を明確にします。テナント、用途、コンシューマーが分離された認可ドメインを形成し、値はKMSまたはシークレットマネージャーに保持され、アプリケーションデータベースには参照が保存されます。スケジューラーは冪等な pending バージョンを作成します。ディストリビューターは小規模なコホートにそれをロードさせ、認証、ビジネスプローブ、レイテンシの結果を報告させます。承認後、条件付き更新によって current が移動され、制限付きのロールバック期間中は previous が維持されます。障害や部分的成功が発生した場合は一時停止してエイリアスを復元します。漏洩時には即時失効を使用します。生成、アクセス、プロモーション、ロールバック、人間による承認は改ざん防止の監査ログに記録され、メトリクスはテナントおよびシークレットの用途ごとにセグメント化されます。
よくある間違い
- テナントや用途の分離を無視して、すべての値を単一のデータベースやログに保存すること。
pending、current、previousをモデル化せずに、古い値を即座に上書きしてしまうこと。- 実際のコンシューマーやビジネスプローブをテストせず、シークレットマネージャーへの書き込みのみをテストすること。
- パーティション分割、一時停止、ロールバックを行わずに
latestの伝播に依存すること。 - スケジュールされたローテーションと緊急失効を同じ低速なワークフローとして扱うこと。
- 外部サービスやキャッシュ内の古い認証情報を失効させずに、プラットフォームのレコードのみを削除すること。
フォローアップの質問と回答
コンシューマーがホットリロードできない場合はどうしますか?
プロモーションを可逆的な再起動またはデプロイにバインドし、少数のインスタンスコホートを検証してから拡大します。インスタンスのバージョンと確認結果を記録します。「通知済み」は「有効化済み」を意味しません。
2つのローテーションジョブが同時に実行された場合はどうなりますか?
テナントおよびシークレット単位のリース、または条件付き世代番号を使用します。現在の世代のみがエイリアスをプロモートできます。冪等性キーによって重複リクエストを吸収し、期限切れのジョブは人間による確認のために一時停止します。
サードパーティの更新は成功したがローカルの永続化に失敗した場合はどうなりますか?
外部の更新を再試行可能として扱いますが、盲目的に再実行してはなりません。リクエストの証明と冪等性マーカーを保存し、補償処理の前に外部の状態を照会し、状態が不確かな場合はプロモーションを凍結して運用担当者が調整できるようにします。
オーバーラップ期間はどのように決定しますか?
推測するのではなく、コンシューマーのキャッシュ時間、デプロイの伝播時間、最大リクエスト処理時間を測定します。オーバーラップが長すぎると漏洩リスクが高まり、短すぎると停止リスクが高まるため、シークレットの用途に応じて分類します。
コントロールプレーンに障害が発生している間、データプレーンはどのように動作しますか?
最後に承認されたバージョンの参照と有効期限ポリシーをキャッシュします。停止中は新しいプロモーションを拒否しますが、最後の安全な構成を継続して使用します。復旧後、世代番号と監査イベントを使用して不足している状態を照合・調整します。