Azure Bastion のDeveloper SKU で開発/テスト環境の踏み台サーバーコストを削減する
Azure 仮想マシンへアクセスするためのAzure Bastion のコストが気になることはありませんか?今回は2024年5月に追加されたAzure Bastion のDeveloper SKU を使ったコスト削減について説明します。本記事はMicrosoft Azure Advent Calendar 2024 21日目の記事です。
実施環境
Azure CLI | 2.67.0 |
---|---|
Bicep CLI | 0.32.4 |
Terraform | 1.10.2 |
前提条件
- 本記事の内容は2024年12月21日現在で確認した内容です。今後のアップデートにより仕様変更となる可能性があります。
- 本記事ではAzure Bastion 自体の概要説明は省略します。
Azure Bastion のSKU
Azure Bastion にはDeveloper、Basic、Standard、Premium の4つのSKU があり、SKU の種類に応じて利用できる機能、Bastion ホストの料金が変化します。主な機能の違いは以下のとおりです。
Developer | Basic | Standard | Premium | |
---|---|---|---|---|
ピアリングを介したVM への接続 | 不可 | 可能 | 可能 | 可能 |
Key Vault を使ったLinux VM への接続 | 可能 | 可能 | 可能 | 可能 |
カスタム受信ポートの指定 | 不可 | 不可 | 可能 | 可能 |
Bastion ホストのスケーリング | 不可 | 不可 | 可能 | 可能 |
ファイルのアップロード、ダウンロード | 不可 | 不可 | 可能 | 可能 |
Kerberos 認証 | 不可 | 可能 | 可能 | 可能 |
共有可能リンク | 不可 | 不可 | 可能 | 可能 |
IP アドレスベースの接続 | 不可 | 不可 | 可能 | 可能 |
コピー&ペーストの無効 | 不可 | 不可 | 可能 | 可能 |
セッションの記録 | 不可 | 不可 | 不可 | 可能 |
プライベート専用のBastion | 不可 | 不可 | 不可 | 可能 |
各SKU の詳細な比較は以下ページを参照してください。
Azure Bastion のDeveloper SKU
概要
Azure Bastion のDeveloper SKU は2024年5月にGA されたSKU です。Developer SKU では専用サブネットへBastion ホストをデプロイせず、共有プール内にBastion ホストをデプロイします。共有プールへデプロイするため専用サブネット (AzureBastionSubnet) やパブリックIP アドレスの作成は不要となります。Developer SKU のAzure Bastion は2024年12月現在、以下のリージョンでのみデプロイが可能です。
- Central US EUAP
- East US 2 EUAP
- West Central US
- North Central US
- West US
- North Europe
Developer SKU はBastion ホストにかかる料金が無料となります。Azure Bastion で課題となる料金について、開発/テスト環境でのコストを削減できます。また、Azure Bastion はPaaS サービスのため踏み台サーバーの定期的なメンテナンス、セキュリティ対策も容易になります。
ただし、Developer SKU にもデメリットがあります。1つ目は仮想ネットワークピアリングを介した通信ができないことです。Azure Bastion を使い複数の仮想ネットワークやリージョンを繋げるHub & Spoke 構成を行いたい場合はBasic SKU 以上のAzure Bastion を作成してください。2つ目は開発/テスト環境が特定のリージョンに制限されることです。仮想ネットワークピアリングを介した通信ができないため、Developer SKU のBastion を使うには開発/テスト環境も合わせる必要があります。地理的なパフォーマンスやデータ保存の制約がある場合は利用が厳しくなります。
ユースケース
Azure Bastion のDeveloper SKU は開発/テスト環境における踏み台サーバーとして適しています。リージョンの制約から日本リージョンでの利用はできませんが、Azure VM を使う構成で開発・検証を行いたい場合にコスト削減へ繋げられます。また、Developer SKU の対象となるリージョンをメインとしており、VM へのアクセスが低頻度である、利用者が少ないような環境であればDeveloper SKU を使うのも一つです。
逆に仮想ネットワークピアリングを用いたHub & Spoke 構成や踏み台サーバーのスケーリングを求められる大規模環境には適さないため、これらの要件が必要であればBasic またはスケーリング可能なStandard 以上のSKU を選択します。
料金
Azure Bastion はBastion ホストの稼働時間と送信データ転送量に応じて課金されます。Basic 以上のSKU では稼働時間に応じたBastion ホストの課金が発生しますが、Developer SKU ではBastion ホストへの課金が発生しないため他SKU と比較し料金が安くなります。ただし、送信データ転送量の課金は発生するため、完全無料ではないことには注意が必要です。
Developer SKU のAzure Bastion 作成方法
Developer SKU のAzure Bastion はAzure Portal、ARM (Bicep) などで作成可能です。Azure CLI、Azure PowerShell ではエラーとなり作成できません。今回はAzure Portal とBicep、Terraform のパターンで作成します。
Azure Portal
Azure Portal でDeveloper SKU を作成する場合、Bastion 作成時にDeveloper SKU を指定します。
Developer SKU 指定時のリージョンを確認すると、Developer SKU で利用可能なリージョンにフィルターされています。
Advance の設定もDeveloper SKU ではグレーアウトされ設定できないようになっています。
設定を確認し問題なければリソースを作成します。Basic SKU 以上のAzure Bastion よりも作成時間が短く、デプロイはすぐ完了します (Basic SKU 以上ではデプロイまで10分程度かかります) 。
Bicep
Bicep でDeveloper SKU のAzure Bastion を作成する場合は以下のとおりになります。bastionHosts で空のtags をつけていますが、こちらをつけないとデプロイ時にAzure Bastion でInternalServerError となりRunning のまま固まってしまいます。
resource vnet 'Microsoft.Network/virtualNetworks@2024-05-01' = {
name: 'vnet-test'
location: 'westus'
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
}
}
resource bastion 'Microsoft.Network/bastionHosts@2024-05-01' = {
name: 'bas-test'
location: 'westus'
sku: {
name: 'Developer'
}
properties: {
virtualNetwork: {
id: vnet.id
}
}
tags: {}
}
また、Azure Verified Modules ではSKU のallowd がBasic、Standard、Premium に制限されているため、Developer を指定した場合にエラーとなります。
@allowed([
'Basic'
'Premium'
'Standard'
])
@description('Optional. The SKU of this Bastion Host.')
param skuName string = 'Basic'
Terraform
Terraform でDeveloper SKU のAzure Bastion を作成する場合、sku にDeveloper を指定します。Developer SKU ではパブリックIP アドレスを利用しないため、ip_configuration を設定するとエラーとなります。
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "4.14.0"
}
}
required_version = ">= 1.1.0"
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "example" {
name = "rg-test"
location = "West Europe"
}
resource "azurerm_virtual_network" "vnet" {
name = "vnet-test"
address_space = ["192.168.1.0/24"]
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
}
resource "azurerm_bastion_host" "bastion" {
name = "bas-test"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
sku = "Developer"
virtual_network_id = azurerm_virtual_network.vnet.id
}
Azure CLI
Azure CLI ではSKU がBasic、Standard、Premium のいずれかに設定されているため、Developer を指定するとエラーになります。また、パブリックIP アドレスは必須項目のため指定していますが、こちらの指定を行わなくてもDeveloper SKU のエラーが最初に発生します。
kdkwakaba@TESTPC:~$ az network bastion create \
--name bas-test \
--public-ip-address pip-test \
--resource-group rg-test \
--vnet-name vnet-test \
--sku Developer
az network bastion create: 'Developer' is not a valid value for '--sku'. Allowed values: Basic, Premium, Standard.
Azure PowerShell
Azure PowerShell もAzure CLI 同様にSKU がBasic、Standard、Premium のいずれかに設定されているため、Developer を指定するとエラーになります。
PS C:\Users\TestUser> $publicip = Get-AzPublicIpAddress -ResourceGroupName "rg-test" -Name "pip-test"
PS C:\Users\TestUser> New-AzBastion `
>> -ResourceGroupName "rg-test" `
>> -Name "bas-test" `
>> -PublicIpAddress $publicip `
>> -VirtualNetworkName "vnet-test" `
>> -Sku "Developer"
New-AzBastion:
Line |
6 | -Sku "Developer"
| ~~~~~~~~~~~
| Cannot validate argument on parameter 'Sku'. The argument "Developer" does not belong to the set "Basic,Standard,Premium" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.
まとめ
- Azure Bastion のDeveloper SKU は開発/テスト向けのコストを抑えられるSKU
- リージョンの制限、仮想ネットワークピアリング間で通信ができない制約があるため、要件によってはBasic 以上のSKU を使う
- Developer SKU はAzure Portal、ARM (Bicep) などのIaC ツールで作成可能。2024年12月現在、Azure CLI、Azure PowerShell では作成できない