1.4K Views
October 28, 23
スライド概要
よろしくお願いします!
.NET ラボ 勉強会 Azure サービスを使用した シークレットローテーションの自動化
アジェンダ 1. シークレットの管理 2. Azure サービスを使用した自動化の構成 3. 自動化の結果確認 2
1. シークレットの管理
シークレットの管理 セキュアに管理したい大切な文字列をどう管理するか ⚫ ⚫ ⚫ シークレットの格納場所 シークレットへのアクセス制御 シークレットの定期的なローテーション 4
2. Azure サービスを使用した自動化の構成
シークレットのローテーションの自動化 使用する Azure サービス ⚫ ⚫ ⚫ Key Vault Event Grid Azure Functions ③ シークレットの有効期限が 近づいていることを通知 Event Grid ② シークレットの有効期限が 近づいているイベントを発行 ④ シークレットの 新しいバージョン 作成 ① シークレット格納 Key Vault 出典:https://learn.microsoft.com/ja-jp/azure/key-vault/secrets/tutorial-rotation Functions ⑤ シークレット更新 SQL Server 6
① シークレット格納 シークレットの格納先として Key Vault を使用 Event Grid Functions ① シークレット格納 Key Vault SQL Server 7
Azure Key Vault 大切な情報を格納する金庫のようなサービス ⚫ ⚫ ⚫ 暗号化キー シークレット (文字列) 証明書 アクセス制御 ⚫ RBAC ⚫ ⚫ ロールベースでアクセスを制御 Azure Key Vault アクセスポリシー ⚫ 細かな単位でアクセスを制御 キー 証明書 シークレット RBAC • 所有者 • 共同作成者 • キーコンテナー管理者 アクセスポリシー • シークレットの管理操作など (取得、一覧、その他) • 暗号化キーの管理操作など • 証明書の管理操作など 8
シークレットの格納方法 シークレット作成画面で以下を設定 ⚫ ⚫ ⚫ ⚫ ⚫ 名前 シークレット値 アクティブ化する日 有効期限 有効化/無効化 9
② シークレットの有効期限が近づいているイベントを発行 Key Vault シークレットの有効期限の設定値に基づいて Event Grid にイベントを送信 ⚫ 30 日前にイベントが送信される Event Grid ② シークレットの有効期限が 近づいているイベントを発行 Functions Key Vault SQL Server 10
Azure Event Grid フルマネージドの パブリッシャー/サブスクライブ メッセージ配信サービス ⚫ ⚫ ⚫ Azure リソースのイベントやカスタムなイベントを扱うことができる 軽量のイベント (JSON) をイベントハンドラーに送信 リアクティブなシステムを構築可能 出典:https://learn.microsoft.com/ja-jp/azure/event-grid/overview 11
Event Grid のイベントソースとイベントハンドラー イベントの発生元とイベントの送信先 Blob Storage Azure Functions リソースグループ Logic Apps Azure サブスクリプション Azure Automation Key Vault Webhook App Service IoT Hub Queue storage Event Grid Service Bus ハイブリッド接続 カスタム トピック Event Hubs イベント ソース イベント ハンドラー 12
Event Grid で収集するイベント Azure Key Vault のイベント Certificate New Version Created ⚫ Certificate Near Expiry ⚫ Certificate Expired ⚫ Secret New Version Created ⚫ Secret Near Expiry ⚫ Secret Expired ⚫ Key New Version Created ⚫ Key Near Expiry ⚫ Key Expired ⚫ Vault Access Policy Changed ⚫ Secret Near Expiry イベント 13
送信されるイベントの中身
{
"id": "c17679db-16ae-4b5c-a404-ba5f41a079d2",
"topic": "/subscriptions/2cd136a4-91dc-4acf-b800-31bc40ee392c/resourceGroups/dotnetlab231028y/providers/Microsoft.KeyVault/vaults/dotnetlab-231028y",
"subject": "sqlPassword",
"eventType": "Microsoft.KeyVault.SecretNearExpiry",
"data": {
"Id": "https://dotnetlab-231028y.vault.azure.net/secrets/sqlPassword2/d771ad9e251846e8977139c60be15c12",
"VaultName": "dotnetlab-231028y",
"ObjectType": "Secret",
"ObjectName": "sqlPassword",
"Version": "d771ad9e251846e8977139c60be15c12",
"NBF": null,
"EXP": 1696152289
},
"dataVersion": "1",
"metadataVersion": "1",
"eventTime": "2023-09-30T10:24:15.7272132Z"
}
14
③ Azure Event Grid と Azure Functions の連携 Event Grid トリガーの Functions を作成し、イベントを連携 ③ シークレットの有効期限が 近づいていることを通知 Event Grid Functions Key Vault SQL Server 15
Azure Functions イベント駆動のサーバーレス コンピューティングサービス ⚫ 何らかのイベントが発生したことをきっかけに動き出し、処理を実行する ⚫ ⚫ ⚫ ⚫ ⚫ BLOB トリガー HTTP トリガー Timer トリガー Cosmos DB トリガー Event Grid トリガー プログラム イベント 検知 格納 画像 Image.jpg ストレージ アカウント 実行 Azure Functions サムネイル 生成 画像 Image-resize.jpg 16
Azure Functions の Event Grid トリガー Azure Functions の Event Grid トリガー作成方法 ⚫ ⚫ ⚫ Azure portal VS Code Visual Studio 17
④⑤ シークレットの更新と格納 Azure Functions によるシークレットの更新と格納 ⚫ ⚫ Key Vault に新しいバージョンのシークレットを格納 SQL Server の管理者パスワードを更新 Event Grid Functions ④ シークレットの 新しいバージョン 作成 Key Vault ⑤ シークレット更新 SQL Server 18
Functions から Key Vault へのアクセス マネージド ID の作成と、Key Vault へのアクセスを許可構成 ⚫ ⚫ Azure Functions のマネージド ID を作成 Key Vault シークレットにアクセスするための アクセスポリシーを構成 Functions の マネージド ID Event Grid マネージド ID 作成 Functions Functions の ID に シークレットへの アクセスポリシーを付与 • 取得 (get) • 一覧 (list) • セット (set) ④ シークレットの 新しいバージョン 作成 Key Vault ⑤ シークレット更新 SQL Server 19
マネージド ID の有効化 Microsoft Entra ID にマネージド ID を作成 ⚫ Azure Functions の ID 画面で 「状態」 を 「オン」 にする 20
Key Vault のアクセスポリシー構成 Azure Functions のマネージド ID に シークレットのアクセス許可を付与 ⚫ ⚫ ⚫ 取得 一覧 セット 21
サンプルコード https://github.com/Azure-Samples/KeyVault-Rotation-SQLPassword-Csharp 22
EventGridTriggerCSharp1.cs 23
SecretRotator.cs SecretRotator.cs の概要 ⚫ ⚫ ⚫ ⚫ ⚫ マネージド ID を使用したKey Vaultへの接続 シークレットとタグ情報を取得 新しいパスワードを作成 新しいパスワードを使用して新しいシークレットを作成 SQL Server のパスワードを更新 24
25
3. 自動化の結果確認
Key Vault へのシークレット作成コマンド $tomorrowDate = (get-date).AddDays(+1).ToString("yyy-MM-ddThh:mm:ssZ") az keyvault secret set --name sqlPassword --vault-name dotnetlab-231028y --value "Simple123" --tags "CredentialId=sqlAdmin" "ProviderAddress=/subscriptions/2cd136a4-91dc-4acf-b80031bc40ee392c/resourceGroups/dotnetlab231028/providers/Microsoft.Sql/servers/dotnetlab-231028y" "ValidityPeriodDays=90" --expires $tomorrowDate 27
新しいバージョンのシークレットが格納される (動画) XXX ⚫ XXX 28
補足:Azure SQL Server の認証方法 SQL 認証 ⚫ ⚫ サーバーの作成時に、ユーザー名とパスワードを使用してサーバー管理者ログインを指定する ユーザーが管理者ログイン用のユーザー名とパスワードを使用して、 Azure SQL Database や Azure SQL Managed Instance に接続する Microsoft Entra ID 認証 ⚫ ⚫ ⚫ Microsoft Entra ID 内の ID を使用して Azure SQL Database や Azure SQL Managed Instance に接続する Microsoft Entra ID 管理者と呼ばれるサーバー管理者を作成する Multi-Factor Authentication などにも対応 29
応用 ストレージアカウントなど さまざまなサービスに応用 できると思うので、 ぜひ色々試してみてください! 30
新発売書籍:AZ-900 MCP 教科書 Microsoft Azure Fundamentals (試験番号 : AZ-900) ⚫ ⚫ ⚫ ⚫ ⚫ 発売日:2023 年 9 月 19 日 出版社:翔泳社 各章末には練習問題 巻末には模擬問題を 1 回分収録 「ボーナス問題」 (試験 2 回分) もダウンロード可能 よろしく お願いします! 出典:https://www.shoeisha.co.jp/book/detail/9784798180809 31