Windows Server 2019 IIS-FTP (1) インストール編

目的

Windows Serverを構築するたびに忘れていることに気づくので、備忘録的に残しておく。

インストール

Server ManagerからAdd roles and featuresをクリックすると次の画面が表示されます。

f:id:nori-tech:20190713165308p:plain

画面を進んでいきWeb Server(IIS)を選択する。

f:id:nori-tech:20190713165449p:plain

後はこの画面でFTP Serverを選択して進めばインストール完了です。

f:id:nori-tech:20190713165611p:plain

f:id:nori-tech:20190713165723p:plain

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は実行することができる。
f:id:nori-tech:20190416003150j:plain

BATCH_COMPLETED_GROUPが除外されたことがわかる。
f:id:nori-tech:20190416003222j:plain

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で閲覧することもできます。
f:id:nori-tech:20190416003507j:plain

参考サイト

監査ログ

docs.microsoft.com

拡張イベント

docs.microsoft.com

管理ディスクのスナップショットから仮想マシンを複製する

内容

Managed Diskを利用している仮想マシン同じリージョンに複製する手順をまとめます。異なるリージョンへの複製は参考サイトにも記載されていますが出来ません。検証したら『az disk create』で失敗しました。また本手順はサブスクリプションを跨いで複製することも想定してAzure Blob Storageへのコピーを手順に追加しています。本当に可能なのか近日中に検証する予定です(なので参考程度にしてください。)。単純にスナップショットから仮想マシンを複製するだけならもっと簡単にできます。参考サイトに手順が記載されていますので、そちらを参照してください。

ディスクのスナップショットを取得

管理ポータルの仮想マシンからディスクを選択します。
f:id:nori-tech:20190317122155p:plain
ディスク一覧が表示されるので取得したいディスクを選んで、スナップショット作成ボタンを押します。
f:id:nori-tech:20190317122259p:plain
必要な情報を入力して作成します。アカウントの種類は管理ディスクの種類に合わせたほうが良いです。
f:id:nori-tech:20190317122456p:plain
これでスナップショットが作成できました。
f:id:nori-tech:20190317122842p:plain

スナップショットからディスクをコピー

スナップショットからディスクをBlobとしてAzure Blob Storageに複製します。

コピー用のAzure Blob Storageを作成

仮想マシンと同じ東日本リージョンに作成します。
f:id:nori-tech:20190317143255p:plain
またコンテナも同時に作成しておきます。
f:id:nori-tech:20190317143919p:plain

スナップショットの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

コードを実行するとスナップショットのSAS(正確にはURL + SAS)が取得できます。
f:id:nori-tech:20190317130843p:plain

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 コンテナ名>

コピー完了したらコンテナ配下にファイルが作成されていることが確認できます。
f:id:nori-tech:20190317144306p:plain

コピーしたファイルから管理ディスクを作成

次のコードで管理ディスクを作成できます。

az disk create --resource-group RG-VM --name hogehogehoge --source https://blob20190317.blob.core.windows.net/diskcontainer/snapshotfile  --sku Premium_LRS 

sourceに指定するURLは管理ポータルから確認できます。
f:id:nori-tech:20190317144420p:plain

コードを実行するとhogehogehogeという名前で管理ディスクが作成されます。
f:id:nori-tech:20190317144832p:plain

管理ディスクから仮想マシンを作成

次のコードで仮想マシンを作成します。

az vm create --resource-group RG-VM --name myVM2 --attach-os-disk hogehogehoge --os-type windows

MyVM2とう名前で仮想マシンが作成されました。
f:id:nori-tech:20190317145135p:plain

複製した仮想マシンに接続

作成後は複製したマシンと同じユーザー/パスワードでRDPで接続できました。
f:id:nori-tech:20190317145500p:plain

Web App for Containers にWordPressを立てる #SSL接続なし版

概要

Docker HubからWord PressイメージをダウンロードしてApp Serviceで動かす。結果をメモとして残しておく。

リソースグループの作成

適当な名前で作成する。

Azure Database for MySQLの作成

インスタンスの作成

適当な名前、管理者名、パスワードで作成する。

接続のセキュリティ

Azure サービスへのアクセスを許可をオンにして、許可するIPアドレスに自分の端末のIPアドレスを入力する。また、SSL 接続を強制するをオフに変更する(実運用はオンにすることを推奨します。その場合、Word Pressのイメージにクライアント証明書の設定が必要になる。今回は検証用なのでオフにする)。設定保存後にMySQL Workbenchで接続できるか確認する。
f:id:nori-tech:20190303140154p:plain

App Serviceの作成

インスタンスの作成

こちらも適当な名前で作成する。OSはLinux、公開はDockerイメージを選択。コンテナの構成もクイックでOK。

コンテナの設定

単一コンテナを選択する。イメージとオプションのタグにwordpressを入力して保存する。
f:id:nori-tech:20190303141107p:plain

アプリケーションの設定

hub.docker.com
wordpressのイメージで定義されている環境変数を設定する。
変数名はオフィシャルサイトを参照した。動作に必要な変数は以下の通り。
f:id:nori-tech:20190303141410p:plain

設定確認

Word Pressに接続

App ServiceにアクセスするとWord Pressが表示される。
f:id:nori-tech:20190303142357p:plain
f:id:nori-tech:20190303142738p:plain
またMySQLに接続するとWord Press用のデータベースが作成されていることも確認できる。

最期に

SSL接続版は別の機会に検証する。wordpressイメージにSSLの設定を追加するだけで出来るはずである。

おわり

Terraform Windows版入門(2)

はじめに

入門編ということでAzureにリソースグループを作成する

Azure CLIをインストール

次のサイトでダウンロードしてインストーラを実行する。
docs.microsoft.com

azコマンド実行できればインストール完了。
f:id:nori-tech:20190228005540p:plain

Azure CLIによる認証

次のコマンドでAzureにログインすると

  az login

以下のレスポンスがあります。idはsubscription_idになります。
f:id:nori-tech:20190228014939p:plain

リソースグループ作成

適当なフォルダに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にリソースグループが作成される。
f:id:nori-tech:20190228020644p:plain

次回

今回の設定でTerraformを実行できる基本的な環境が整ったので、次回は
各コマンドの詳細を調査しながらAzureサービスを作成していきます。

終わり

Terraform Windows版入門(1)

はじめに

会社で契約しているクラウドはAzureです。Azureに開発環境を簡単に構築できるようにTerraformを学習する。Terraformを使うことでAzure上のサービス作成を宣言的な記述で自動化することができます。

インストール

公式サイトからダウンロードする

www.terraform.io

ダウンロードしたら展開して環境変数PATHに追加して、コマンド認識したら成功です。

f:id:nori-tech:20190227235333p:plain

 

終わり