AKSクラスター内のポッドが、クライアントシークレットや証明書などの保存された資格情報を使用せずにAzure Key Vaultに安全にアクセスできるようにする。
→Azure ADワークロードIDを使用する。ユーザー割り当てマネージドIDを作成し、K8sサービスアカウントとマネージドIDの間でフェデレーションID資格情報を確立し、そのマネージドIDにKey Vaultへのアクセス権を付与する。
理由: ワークロードIDはOIDCフェデレーションを使用してKubernetesトークンをAzure ADトークンと交換し、クラスター内でシークレットを保存、管理、またはローテーションする必要を完全に排除する。
リファレンス↗
Azure Key Vaultを保護し、特定のVNetからのアクセスのみを許可し、すべての操作をログに記録し、重要なキーの偶発的な削除から保護する。
→Key Vaultファイアウォールを構成し、「プライベートエンドポイントと選択されたネットワーク」からのアクセスを許可する。Log Analyticsワークスペースへの診断ログを有効にする。ソフトデリートと削除保護の両方を有効にする。
理由: ソフトデリートは偶発的な削除からの回復を可能にするが、削除保護は特権ユーザーでさえも保持期間中にコンテナーまたはその内容を永続的に削除することを防ぐ。この組み合わせは、TDEキーを保護するために不可欠である。
Azure App Serviceが、構成に接続文字列パスワードを保存することなく、Azure SQL Databaseに認証してデータを取得する必要がある。
→App Serviceでシステム割り当てマネージドIDを有効にする。Azure SQLで、App ServiceのマネージドID名にマップされた包含ユーザーを作成し、必要なデータベースロール(例:db_datareader)を付与する。
理由: マネージドIDは、Azure AD内でAzureリソース自体にIDを提供する。Azureが資格情報の作成とローテーションを自動的に処理するため、保存されたシークレットが不要になり、これは主要なセキュリティベストプラクティスである。
Azure Key Vaultで組織が管理するキーを使用して、Azure VMマネージドディスクを保存時に暗号化する。
→ディスク暗号化セットリソースを作成する。Azure Key Vaultから顧客管理キー(CMK)を使用するように構成する。ディスク暗号化セットをVMのマネージドディスクに割り当てる。
理由: これはCMKによるサーバー側暗号化(SSE)であり、ストレージインフラストラクチャ内のデータを暗号化する。ゲストOS内でBitLocker/dm-cryptを使用してデータを暗号化し、通常はOSディスクとデータディスクを一緒に使用するAzure Disk Encryption (ADE) よりもシンプルである。
Azure Container Registry (ACR) に保存されているコンテナイメージが、デプロイされる前に脆弱性スキャンされていることを確認する。
→Microsoft Defender for Containersを有効にする。これにより、ACR内のイメージがプッシュ時、プル時、および新しく発見された脆弱性について継続的に自動スキャンされる。
理由: この「シフトレフト」セキュリティプラクティスは、CI/CDパイプラインの早い段階で脆弱性を特定する。Defender for Containersは、Azureエコシステム内でこのスキャン機能をネイティブに提供する。
Azure SQL Databaseに対する潜在的なSQLインジェクション攻撃や異常なアクセスパターンを検出し、アラートを受け取る。
→論理SQLサーバーでMicrosoft Defender for SQLを有効にする。これにより、高度な脅威保護と脆弱性評価が提供される。
理由: Defender for SQLは、ネットワークレベルのツールでは視認できないSQLインジェクション、ブルートフォース攻撃、異常なデータアクセスなどの脅威を検出するために、行動分析と機械学習を使用する専用のワークロード保護プランである。
ストレージアカウントを特定のVNetに制限するが、Azure Backupのような信頼されたMicrosoftサービスが引き続きアクセスできるようにする。
→ストレージアカウントのネットワーク設定で、「選択された仮想ネットワークとIPアドレスから有効」を選択する。必要なVNet/サブネットを追加する。次に、「信頼されたMicrosoftサービスがこのストレージアカウントにアクセスすることを許可する」のチェックボックスをオンにする。
理由: 信頼されたサービス例外は、特定のMicrosoftサービスがVNetファイアウォールルールをバイパスするための安全なパスを作成する。これがなければ、ユーザーに代わって動作するサービス(バックアップやポータルなど)はブロックされる。
特権データベース管理者(DBA)からでも、Azure SQLデータベース内の特定の機密データ列(例:クレジットカード番号)を保護する。
→Always Encryptedを使用する。クライアントアプリケーションドライバーは、データをデータベースに送信する前に透過的に暗号化し、暗号化キーはデータベースエンジンに決して公開されない。
理由: 透過的データ暗号化(TDE)はデータベース全体を保存時(ディスク上)に暗号化するが、アクセス権を持つDBAはデータを引き続き見ることができる。Always Encryptedはクライアント側暗号化を提供し、データを管理する者(DBA)とデータを見ることができる者を分離する。
Azure VM上で機密性の高いデータを処理し、ハイパーバイザーやクラウドオペレーターからでもメモリ内で暗号化され保護された状態を維持する。
→Azure Confidential VMをデプロイする。これらのVMは、AMD SEV-SNPのようなハードウェアベースの信頼実行環境(TEE)を使用して、分離された暗号化されたメモリス空間を作成する。
理由: 標準のVM暗号化(ADEやSSEなど)は保存時のデータを保護する。Confidential Computingは、メモリ内で*使用中の*データを保護する唯一のテクノロジーであり、クラウドで最高レベルのデータプライバシーと分離を提供する。
App Serviceが、Key Vault SDKを使用するためにアプリケーションコードを変更することなく、Key Vaultからのシークレットをアプリケーション設定として使用する必要がある。
→App ServiceでマネージドIDを有効にし、Key Vault内のシークレットに対する「取得」権限を付与する。App Service構成で、Key Vault参照としてフォーマットされた値を持つアプリケーション設定を作成する:`@Microsoft.KeyVault(SecretUri=...)`。
理由: この機能により、App ServiceプラットフォームはマネージドIDを使用して実行時にシークレット値を解決できる。アプリケーションコードは標準の環境変数を読み取るだけで、Key Vaultとのやり取りを抽象化する。
コンプライアンス関連データをAzure Blob StorageにWORM(Write-Once, Read-Many)状態で7年間の保持期間で保存する。
→ストレージコンテナで、不変性ポリシーを構成する。時間ベースの保持ポリシーを7年に設定し、ポリシーをロックする。ロックされると、保持期間が終了するまで、データは誰によっても変更または削除できなくなる。
理由: この機能は、規制コンプライアンス要件(例:SEC 17a-4)を満たすように特別に設計されている。ポリシーをロックすることが、真に不変にするための重要なステップである。
単一のAzure SQLデータベースを使用するマルチテナントアプリケーションで、あるテナントのユーザーが自分のテナントに属するデータのみを見ることができるようにする。
→行レベルセキュリティ(RLS)を実装する。セッションコンテキストまたはユーザー検索テーブルに保存されているユーザーのテナントIDに基づいて行をフィルタリングする述語関数を持つセキュリティポリシーを作成する。
理由: RLSはデータベースエンジン内で直接アクセスロジックを強制する。これはアプリケーション層でフィルタリングを実装するよりも安全で信頼性が高い。なぜなら、バイパスできず、アプリケーションコードに対して透過的であるからである。
UEFIからOSカーネルまでのブートチェーン全体の整合性を確保することで、ブートキットやルートキットから第2世代VMを保護する。
→Trusted Launchが有効なVMをプロビジョニングする。これにより、すべてのブートコンポーネントの署名を検証するセキュアブートと、計測ブートおよびアッテステーションのための仮想Trusted Platform Module(vTPM)がアクティブになる。
理由: Trusted Launchは、従来のOSレベルのセキュリティ制御を転覆できる高度な低レベルマルウェアに対処する。VMのハードウェア信頼のルートを確立する。