SQL Databaseの監査ログに出力するログ種別を削減する
はじめに
Blob Storageに出力している監査ログが大量にあり目的を達成することが困難な状況にある。
監査ログを出力している目的はログイン成功/失敗の調査なので不要なSQL実行ログは削除する。
代わりに拡張イベントにSQL実行ログを出力することにする。
監査ログの削減
監査ログに出力する内容はアクショングループという概念で定義している。
Azure Blob Storageに出力すると規定のアクショングループは以下のとおりである。
- BATCH_COMPLETED_GROUP
- SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP
- FAILED_DATABASE_AUTHENTICATION_GROUP"
SQL実行ログはBATCH_COMPLETED_GROUPで定義されているので、BATCH_COMPLETED_GROUPを設定から除外する。
# BATCH_COMPLETED_GROUPを除外する Set-AzSqlServerAuditing -ResourceGroupName RG-SQL -ServerName audittest2019 -AuditActionGroup "SUCCESSFUL_DATABASE_AUTHENTICATION_GROUP"," FAILED_DATABASE_AUTHENTICATION_GROUP" -BlobStorage -State Enabled # 変更後のBlobStorgeへの監査ログ設定を取得 Get-AzSqlServerAuditing -ResourceGroupName RG-SQL -ServerName audittest2019 -BlobStorage
管理ポータルからAzure Powershellは実行することができる。
BATCH_COMPLETED_GROUPが除外されたことがわかる。
Azure Blobに出力された監査ログはT-SQLで閲覧することができます。
-- Azure Blob から監査ログを読み込む SELECT * FROM sys.fn_get_audit_file ('https://auditblob2019.blob.core.windows.net/sqldbauditlogs/audittest2019/AuditTest/SqlDbAuditing_ServerAudit_NoRetention/2019-04-15/12_',default,default); GO
拡張イベントの設定
拡張イベントは以下のT-SQLを設定したいデータベースで実行すれば良い。
コードはsql_batch_completedをAzure Blobに出力する設定。
-- キーとcredentialを作成 IF NOT EXISTS (SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101) BEGIN CREATE MASTER KEY ENCRYPTION BY PASSWORD = '0C34C960-6621-4682-A123-C7EA08E3FC46' END GO CREATE DATABASE SCOPED CREDENTIAL [https://xevent2019.blob.core.windows.net/sqllogs] WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'st=2017-04-15T12%3A56%3A00Z&se=2026-04-16T12%3A56%3A00Z&sp=rwdl&sv=2018-03-28&sr=c&sig=CGZWZ4ujOtZEtIM8JyXh%2F2fPOdge9qUUOc5DgP8t8rc%3D' ; -- セッション作成 CREATE EVENT SESSION [test] ON DATABASE ADD EVENT sqlserver.sql_batch_completed( ACTION(package0.event_sequence , sqlserver.client_app_name , sqlserver.client_connection_id , sqlserver.client_hostname , sqlserver.client_pid , sqlserver.compile_plan_guid, sqlserver.context_info, sqlserver.database_id , sqlserver.database_name , sqlserver.execution_plan_guid , sqlserver.num_response_rows , sqlserver.plan_handle , sqlserver.query_hash , sqlserver.query_hash_signed , sqlserver.query_plan_hash , sqlserver.query_plan_hash_signed , sqlserver.request_id , sqlserver.session_id, sqlserver.sql_text , sqlserver.transaction_id , sqlserver.transaction_sequence , sqlserver.tsql_stack , sqlserver.username) ) ADD TARGET package0.event_file( SET filename = N'https://xevent2019.blob.core.windows.net/sqllogs/FileName.xel' ) WITH( MAX_MEMORY = 4096 KB, EVENT_RETENTION_MODE = ALLOW_SINGLE_EVENT_LOSS, MAX_DISPATCH_LATENCY = 30 SECONDS, MAX_EVENT_SIZE = 0 KB, MEMORY_PARTITION_MODE = NONE, TRACK_CAUSALITY = OFF, STARTUP_STATE = OFF ) GO -- セッション開始 ALTER EVENT SESSION [test] ON DATABASE STATE = START; GO
そのほかに便利なT-SQLを残しておく
-- キー一覧 SELECT * FROM sys.symmetric_keys WHERE symmetric_key_id = 101 -- credential一覧 SELECT * FROM sys.database_scoped_credentials -- セッション停止 ALTER EVENT SESSION [test] ON DATABASE STATE = STOP; GO -- セッション一覧 SELECT * from sys.database_event_sessions GO
Azure Blobに拡張イベントが出力されたら、SSMSで閲覧することもできます。
管理ディスクのスナップショットから仮想マシンを複製する
内容
Managed Diskを利用している仮想マシンを同じリージョンに複製する手順をまとめます。異なるリージョンへの複製は参考サイトにも記載されていますが出来ません。検証したら『az disk create』で失敗しました。また本手順はサブスクリプションを跨いで複製することも想定してAzure Blob Storageへのコピーを手順に追加しています。本当に可能なのか近日中に検証する予定です(なので参考程度にしてください。)。単純にスナップショットから仮想マシンを複製するだけならもっと簡単にできます。参考サイトに手順が記載されていますので、そちらを参照してください。
ディスクのスナップショットを取得
管理ポータルの仮想マシンからディスクを選択します。
ディスク一覧が表示されるので取得したいディスクを選んで、スナップショット作成ボタンを押します。
必要な情報を入力して作成します。アカウントの種類は管理ディスクの種類に合わせたほうが良いです。
これでスナップショットが作成できました。
スナップショットからディスクをコピー
スナップショットからディスクをBlobとしてAzure Blob Storageに複製します。
コピー用のAzure Blob Storageを作成
仮想マシンと同じ東日本リージョンに作成します。
またコンテナも同時に作成しておきます。
スナップショットのSASを取得
次のコードをクラウドシェルで実行します。
$sas=$(az snapshot grant-access --resource-group RG-VM --name snapshot-vmtest1981_OsDisk_1_1c4d158fdc434717b10835305ff5f749 --duration-in-seconds 3600 --query [accessSas] -o tsv)
ローカル環境で実行したらSASが空だったのでクラウドシェルでの実行を薦めます。空なのは不具合が原因のようです。ローカルで実行したい場合は参考にしてください。
grant-azurermsnapshotaccess returning null accesssas · Issue #5956 · Azure/azure-powershell · GitHub
Azure Blob Storageにディスクをコピー
次のコードをクラウドシェルで実行します。$sasには前回実行した結果のURL + SASが格納されている前提です。
az storage blob copy start --destination-blob <スナップショットのコピー後のファイル名> --destination-container <Blob Storage コンテナ名> --account-name <Blob Storage アカウント名> --account-key <Blob Storage アカウントキー> --source-uri $sas
ディスクコピーの進捗を確認
az storage blob copy startは実行後にバックエンドで処理されるので、都度進捗を確認する必要があります。
以下のコードで確認できます。statusがpendigからsuccessに変わればコピー成功です。
az storage blob show -n <スナップショットのコピー後のファイル名>--account-name <Blob Storage アカウント名>--account-key <Blob Storage アカウントキー> -c <Blob Storage コンテナ名>
コピー完了したらコンテナ配下にファイルが作成されていることが確認できます。
コピーしたファイルから管理ディスクを作成
次のコードで管理ディスクを作成できます。
az disk create --resource-group RG-VM --name hogehogehoge --source https://blob20190317.blob.core.windows.net/diskcontainer/snapshotfile --sku Premium_LRS
sourceに指定するURLは管理ポータルから確認できます。
コードを実行するとhogehogehogeという名前で管理ディスクが作成されます。
管理ディスクから仮想マシンを作成
次のコードで仮想マシンを作成します。
az vm create --resource-group RG-VM --name myVM2 --attach-os-disk hogehogehoge --os-type windows
MyVM2とう名前で仮想マシンが作成されました。
複製した仮想マシンに接続
作成後は複製したマシンと同じユーザー/パスワードでRDPで接続できました。
Web App for Containers にWordPressを立てる #SSL接続なし版
概要
Docker HubからWord PressイメージをダウンロードしてApp Serviceで動かす。結果をメモとして残しておく。
リソースグループの作成
適当な名前で作成する。
Azure Database for MySQLの作成
インスタンスの作成
適当な名前、管理者名、パスワードで作成する。
接続のセキュリティ
Azure サービスへのアクセスを許可をオンにして、許可するIPアドレスに自分の端末のIPアドレスを入力する。また、SSL 接続を強制するをオフに変更する(実運用はオンにすることを推奨します。その場合、Word Pressのイメージにクライアント証明書の設定が必要になる。今回は検証用なのでオフにする)。設定保存後にMySQL Workbenchで接続できるか確認する。
App Serviceの作成
コンテナの設定
単一コンテナを選択する。イメージとオプションのタグにwordpressを入力して保存する。
アプリケーションの設定
hub.docker.com
wordpressのイメージで定義されている環境変数を設定する。
変数名はオフィシャルサイトを参照した。動作に必要な変数は以下の通り。
設定確認
Word Pressに接続
App ServiceにアクセスするとWord Pressが表示される。
またMySQLに接続するとWord Press用のデータベースが作成されていることも確認できる。
Terraform Windows版入門(2)
はじめに
入門編ということでAzureにリソースグループを作成する
リソースグループ作成
適当なフォルダにtest.tfを作成する。
provider "azurerm" { version = "=1.22.0" subscription_id = "XXX" tenant_id = "XXX" } resource "azurerm_resource_group" "rg" { name = "testResourceGroup" location = "westus" }
test.tfを作成したフォルダに移動して以下のコマンド実行する。
terraform init
成功したら、次に以下のコマンドを実行する。
terraform apply
applyの実行に成功するとAzureにリソースグループが作成される。
次回
今回の設定でTerraformを実行できる基本的な環境が整ったので、次回は
各コマンドの詳細を調査しながらAzureサービスを作成していきます。
終わり