Azure クラウド ハンズオン 技術

【Azure】ハンズオン(エンタープライズWebシステム)


単なるWebサイトではなく、高セキュリティなネットワーク設計(VNet、NSG、Private Endpoint)、Webアプリケーション(App Service)、そしてバックエンドでの処理(Azure Batch)を組み合わせた、企業の基幹業務や大規模サービス向けの堅牢なシステム構成を構築します。

構成

  • VNet
  • Subnet
  • NSG
  • Application Gateway
  • App Service
  • App Service Plan
  • Azure SQL Database
  • Azure Batch
  • VPN Gateway
  • ストレージアカウント
  • Azure DNS
  • Applicatin Insights

アクセスフロー

  • User → Application Gateway → App Service → Azure SQL Database
  • Azure Batch → Azure SQL Database
  • 外部ネットワーク → VPN Gateway

前提

  • サブネットは以下のものを作成する。(仮想ネットワークのセグメントは、20.0.0.0/16)
名称アドレス範囲用途
snet-agw20.0.0.0/24Application GW用
snet-appsvc20.0.1.0/24App Service用
snet-db20.0.2.0/24SQL Database用
snet-batch20.0.3.0/24Azure Batch プール
GatewaySubnet20.0.4.0/27VPN Gateway用
※名称は固定
※「/27」以上がMicrosoft推奨値
  • 各サブネットにNSGを設置する。
  • App Serviceで利用する言語は指定なしとするが、本題とは異なる部分であるため簡単なもの(なるべく時間を割かないもの)とする。
  • Azure SQL DatabaseやVPN Gatewayなど利用料が高額になる可能性があるサービスは、必要最低限の構成(スペック)とする。
  • ハンズオン時間は1〜3時間を想定する。
  • Azure サブスクリプションやハンズオンを行うためのロールは既に手元にあることを前提とする。
  • リージョンは「Japan East」を前提とする。
  • リソースグループは作成済みであることを前提とする。

ハンズオン

ネットワーク & NSG 作成(15〜20分)

  1. 仮想ネットワーク(VNet)及びサブネット作成
  2. NSG作成及びサブネットへの関連付け(サブネット毎に1つ)

NSGのルール

  1. nsg-agw
    • Inbound:80/443をInternet から許可
    • Outbound:VNet宛てを許可
    • 関連付けサブネット:snet-agw
  2. nsg-appsvc
    • Inbound:VNet内から80/443を許可
    • Outbound:Anyを許可
    • 関連付けサブネット:snet-appsvc
  3. nsg-db
    • Inbound:VNet内(App Service/Batchサブネット)からのSQLポート(1433)を許可
      • 実際にはPrivate EndpointのNICに対する通信になる
    • Outbound:デフォルト
    • 関連付けサブネット:snet-db
  4. nsg-batch
    • Inbound:デフォルト
    • Outbound:VNetとAzure Batch管理用の必要最小限(本ハンズオンではデフォルト許可でOK)
    • 関連付けサブネット:snet-batch

PaaSがInternetへのアウトバウンドが必要な理由

App ServiceなどのPaaSは、Azureの管理プレーンや依存サービスへ「インターネット経由の通信」を行うためです。

  • 内部的な管理通信(アプリの実行、デプロイ、ログ収集など)にAzureのパブリックエンドポイントを利用する部分があります。
  • DNS解決や証明書更新などの基盤機能にInternetが必要となります。
  • 多くのAzure PaaSサービスは、アウトバウンドのインターネット通信が制限されると動きません。

またVNet統合をしていても、App Serviceのアウトバウンド通信には「VNet経由」と「インターネット経由」両方が存在します。

GatewayサブネットへのNSG適用

現在のMicrosoft learnで明確に禁止をされているわけではないですが、過去に明確に禁止と記載がされていたことや、Azure内部で使う通信が存在するため、NSGは設定しない方が無難です。

ストレージアカウント作成(5〜10分)

Azure Batchのジョブやログの保管先として利用します。

Azure SQL Database作成(20〜25分)

SQL サーバ & DB 作成

ここでいうSQLサーバは論理サーバであり「ただの入れ物」に過ぎないため注意が必要です。

またSQL Databaseへのアクセスはプライベートエンドポイント経由とするとセキュリティレベルがあがります。

プライベートエンドポイントとは?

インターネットを経由せず “VNet 内のプライベート IP” でアクセスできるようにする仕組みのこと。

プライベートエンドポイント作成時に「Private DNS ゾーン統合」は有効としましょう。

Private DNS ゾーンとは?

VNet内だけで有効なDNSゾーンであり、プライベートエンドポイントアクセス時に自動で名前解決が機能します。

※サービス名(例:xxxx.database.windows.net)で接続すると内部のプライベートIPが返ってくる

Azure SQL Databaseについて詳細を知りたい方は以下のブログ記事にまとめてます。

App ServiceとApp Service Plan(20〜25 分)

App Serviceのインフラ基盤であるApp Service PlanとWebアプリ本体であるApp Serviceを作成します。

App ServiceとApp Service Planについては以下の記事にまとめてます。

App Serviceからデータベース(Azure SQL Database)へ接続するための情報として、接続文字列(鍵情報)を設定する必要があります。

接続文字列はApp Serviceの『構成→環境変数→接続文字列』で設定します。接続文字列を設定するメリットは以下の通りです。

接続文字列を設定するメリット

  1. アプリケーションのコードに直接パスワードなどを書く必要がなくなる
  2. 接続情報を環境変数として安全にアプリケーションへ提供することができる
  3. スロットごとに接続先を切り替えることができる

ソースコードが流出したとしても実際の情報はAzure環境内に存在すること、またスロット(別環境)毎に接続先を切り替えられるため検証・本番環境の行き来や作業が容易となります。

またApp ServiceでVNet統合を有効化すると、さらにセキュリティを高められます。

VNet統合とは?

App ServiceがVNetの内部リソース(例:SQL、ストレージ、仮想マシン)にプライベートIPアドレス経由でアクセスできるようにする仕組みです。

VNet統合により、App ServiceからVNet内(Private Endpoint内のAzure SQL Database)にアクセスできるようになります。

おまけ

試してみたい方はApplication Insightsを有効化し、アプリケーションの動き(リクエスト数・エラー・応答時間・例外・依存サービスの動作)を自動で記録し可視化できるようにしましょう。

Azure Batch(20〜25 分)

Azure Batchの構成要素は以下3つとなります。

構成要素概要
BatchアカウントBatchアカウントは、Azure Batchサービスを利用するための管理上の最上位エンティティ(入れ物)です。

役割
算出リソース(プール)や実行する作業(ジョブ)を管理する窓口です。
特徴
1つのサブスクリプション内に複数作成でき、クォータ(使用制限)や課金の単位となります。また、アプリケーションパッケージやストレージアカウントとの紐付けもここで行います。
プールプールは、実際にアプリケーションを実行するためのコンピューティングノード(仮想マシン)の集合体です。

役割
「計算リソース」そのものです。
特徴
OSの種類(Windows/Linux)、ノードのサイズ(CPU/メモリ)、ノード数などを設定します。オートスケール機能により、負荷に応じてノード数を自動増減させることが可能です。
ジョブ & タスク実行したい「作業の内容」を定義するレイヤーです。

<ジョブ (Job)>
役割
タスクをまとめるグループ(実行単位)です。
特徴
どのプールで実行するかを指定します。ジョブ自体が計算を行うわけではなく、共通のスケジュールや優先度を管理します。

<タスク (Task)>
役割
ジョブに含まれる最小の実行単位(具体的な処理)です。
特徴
各タスクはプールのノードに割り当てられ、コマンドライン(スクリプトやプログラム)を実行します。
 標準タスク
 通常の計算処理。
 開始タスク
 ノードがプールに参加した際、最初に一度だけ実行されるセットアップ処理。

Application Gateway(20〜25 分)

Application Gatewayはただ通信を通すだけでなく、「中身を見て、適切な場所へ案内する」 役割を持っています。

構成

  • フロントエンド:ユーザが一番最初にアクセスする場所。インターネット上の住所(IPアドレス)にあたる。
  • バックエンドプール :バックエンドターゲットを登録するリスト
  • ルーティング規則:リスナーが確認した内容を元に、どこへ案内するかを決めるルール
    • リスナー :フロントエンドに来たアクセスの調整
      • どのドメイン宛の通信か?
      • 暗号化された通信か?(HTTPS)
    • バックエンドターゲット:ウェブページを表示するサーバのこと。仮想マシン(VM)やApp Serviceなどがここに含まれます。ルーティング規則によって案内された注文を実際に処理し、結果をお客様に返します。

ポイント

ルーティング規則では、バックエンドターゲットを指定するのではなくバックエンドプールを指定する。

ポイント

AGW(Application Gateway v2)のサブネットには、NSGでポート65200–65535を遮断してはいけないため、その NSG の該当ブロックルールを削除もしくは許可に変更する必要がございます。

https://learn.microsoft.com/ja-jp/azure/application-gateway/configuration-infrastructure

Application Gatewayについては以下のブログにまとめてます。

Azure DNS(10〜15分)

  • プライベートDNSゾーン
    • 特定のネットワークの中にいる人だけが使える、秘密の電話帳
    • 部外者(インターネット側)からは、この電話帳の中身を見ることはできません
  • パブリックDNSゾーン
    • インターネット上の誰からでも検索できる電話帳
    • 世界中のどこからでもアクセスしてほしいWebサイトは、ここに登録します

VPN Gateway(30〜40 分)

VPN Gatewayについては以下のブログにまとめてます。


-Azure, クラウド, ハンズオン, 技術