【Azure】ストレージアカウントをBicepファイルで構築する
1. はじめに
Bicepでストレージアカウントを構築しようとすると、「BicepのパラメータとAzureポータルから構築するときの設定項目の対応がわからん!!!」となり調査に時間がかかったので、メモとして残しておきます。他のリソースでもBicepのパラメータとAzureポータルの設定項目の対応はわかりにくいですが、特にストレージアカウントは設定項目が多くわかりにくい印象です。
2. 本記事の記載ルール
- プロパティ内のプロパティは「.」で表現する。(Bicepの書き方に準拠)
sku: {
name: 'Standard_LRS'
}
ならsku.name='Standard_LRS'
ただし、propertiesは多いため省略する。
例)properties.supportsHttpsTrafficOnlyはsupportsHttpsTrafficOnlyと表現する。
- 特に注意がない限りはストレージアカウントのリソース構築のパラメータを記載している。
// ストレージアカウントのリソース構築
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
location: resourceGroup().location
properties: {}
}
一部BlobサービスとFileサービスのリソース構築コードがあるため注意する。
// Blogサービスのリソース構築
resource blobServices 'Microsoft.Storage/storageAccounts/blobServices@2023-01-01' = {
name: 'default'
parent: storageAccount
properties: {}
}
// Fileサービスのリソース構築
resource fileServices 'Microsoft.Storage/storageAccounts/fileServices@2023-01-01' = {
name: 'default'
parent: storageAccount
properties: {}
}
3. 本編
ストレージアカウントの新規作成における設定画面ごとに章をわけて説明します。
基本
大項目 (Azureポータル) |
設定項目 (Azureポータル) |
パラメータ (Bicep) |
備考 |
---|---|---|---|
プロジェクトの詳細 | サブスクリプション | なし | デプロイ時のコマンドで設定する |
┗ | リソースグループ | なし | デプロイ時のコマンドで設定する |
インスタンスの詳細 | ストレージ アカウント名 | name | - |
┗ | 地域 | location | (Asia Pacific) Japan East = 'japaneast' |
┗ | ・プライマリ サービス ・プライマリ ワークロード |
なし | 選択するとパフォーマンスや冗長性などの設定項目が自動で設定されるが、Bicepでは個別に設定するため不要 |
┗ | ①パフォーマンス ②premium アカウントの種類 |
kind | 例)①がStandardなら'StorageV2' ①がPremiumかつ②がブロック BLOBなら'BlockBlobStorage' |
┗ | 冗長性 | sku.name | 例)パフォーマンスがStandardかつ冗長性がLRSなら'Standard_LRS' |
ストレージアカウントの概要のストレージアカウントの種類にパフォーマンスや冗長性の説明がかいてあります。
詳細
大項目 (Azureポータル) |
設定項目 (Azureポータル) |
パラメータ (Bicep) ※propertiesは省略 |
備考 |
---|---|---|---|
セキュリティ | REST API 操作の安全な転送を必須にする | supportsHttpsTrafficOnly | 有効=true |
┗ | 個々のコンテナーでの匿名アクセスの有効化を許可する | allowBlobPublicAccess | 有効=true |
┗ | 個ストレージアカウントキーへのアクセスを有効にする | allowSharedKeyAccess | 有効=true |
┗ | Azure portalでMicrosoft Entra認可を既定にする | defaultToOAuthAuthentication | 有効=true |
┗ | TLS の最小バージョン | minimumTlsVersion | 例)バージョン1.2='TLS1_2' |
┗ | コピー操作の許可されるスコープ (プレビュー) | allowedCopyScope | 例)「任意のストレージアカウントから」= null |
階層型名前空間 | 階層型名前空間を有効にする | isHnsEnabled | 有効=true |
アクセスプロトコル | SFTP を有効にする | isSftpEnabled | 有効=true |
┗ | ネットワーク ファイル システム v3 を有効にする | isNfsV3Enabled | 有効=true |
BLOB ストレージ | クロステナント レプリケーションを許可する | allowCrossTenantReplication | 許可=true |
┗ | アクセス層 | accessTier | 例)ホット = 'Hot' |
Azure Files | 大きいファイルの共有を有効にする | なし | 既定で有効。作成後に無効にできる。 |
ネットワーク
大項目 (Azureポータル) |
設定項目 (Azureポータル) |
パラメータ (Bicep) ※propertiesは省略 |
備考 |
---|---|---|---|
ネットワーク接続 | ネットワークアクセス | publicNetworkAccess | 例)「すべてのネットワークからのパブリックアクセスを有効にする」= 'Enabled' |
仮想ネットワーク ※ネットワークアクセスで「選択した仮想ネットワーク~~~有効にする」を選択した場合に設定必要 |
・仮想ネットワークのサブスクリプション ・仮想ネットワーク ・サブネット |
networkAcls.virtualNetworkRules.id | サブネットIDを指定 |
IPアドレス ※ネットワークアクセスで「選択した仮想ネットワーク~~~有効にする」を選択した場合に設定必要 |
IPアドレスまたはCIDR | networkAcls.ipRules.value | IPアドレスを指定 |
プライベート エンドポイント | - | なし | プライベートエンドポイント作成時に設定 |
ネットワーク ルーティング | ルーティングの優先順位 | routingPreference.routingChoice | 例)Microsoftネットワークルーティング='MicrosoftRouting' |
BicepでpublicNetworkAccess: 'Enabled'とし、networkAclsを記述しなかった場合は、ネットワークアクセスは「すべてのネットワークからのパブリックアクセスを有効にする」となる。
BicepでpublicNetworkAccess: 'Enabled'とし、networkAclsにnetworkAcls.virtualNetworkRules.idやnetworkAcls.ipRules.valueを記述した場合は、ネットワークアクセスは「選択した仮想ネットワークとIPアドレスからのパブリックアクセスを有効にする」となる。
BicepでpublicNetworkAccess: 'Disabled'とした場合は、ネットワークアクセスは「パブリックアクセスを無効にし、プライベートアクセスを使用する」となる。
データ保護
大項目 (Azureポータル) |
設定項目 (Azureポータル) |
パラメータ (Bicep) ※propertiesは省略 |
備考 |
---|---|---|---|
復旧 | コンテナーのポイントインタイムリストアを有効にする | restorePolicy.enabled ※Blobサービスのプロパティ |
有効=true |
┗ | BLOB の論理的な削除を有効にする | deleteRetentionPolicy.enabled ※Blobサービスのプロパティ |
有効=true |
┗ | コンテナーの論理的な削除を有効にする | containerDeleteRetentionPolicy.enabled ※Blobサービスのプロパティ |
有効=true |
┗ | ファイル共有の論理的な削除を有効にする | shareDeleteRetentionPolicy.enabled ※Fileサービスのプロパティ |
有効=true |
追跡 | BLOB のバージョン管理を有効にする | isVersioningEnabled ※Blobサービスのプロパティ |
有効=true |
┗ | BLOB の変更フィードを有効にする | changeFeed.enabled ※Blobサービスのプロパティ |
有効=true |
アクセス制御 | バージョンレベルの不変性のサポートを有効にする | immutableStorageWithVersioning.enabled | 有効=true |
データ保護の設定は、Bicep上ではストレージアカウントとは別にBlobサービスとFileサービスをリソースとして設定する必要がある。
暗号化
大項目 (Azureポータル) |
設定項目 (Azureポータル) |
パラメータ (Bicep) ※propertiesは省略 |
備考 |
---|---|---|---|
- | 暗号化の種類 | encryption.kerSource | 例)Microsoftマネージドキー(MMK)='Microsoft.Storage' |
- | カスタマーマネージドキーのサポートを有効にする | encryption.services | Bicepでは一つずつサービスを選択する。 例)Blobを有効にする場合はencryption.services.blob.enabled: trueとする。 |
- | インフラストラクチャ暗号化を有効にする | requireInfrastructureEncryption | 有効= true |
カスタマーマネージドキー(CMK)を選択した場合、Bicepではkeyvaultpropertiesに含まれる3つのプロパティ(keyvaulturi, keyname, keyversion)を設定する必要がある。
4. コード
最後に、3章で載せたAzureポータルの設定と同じ設定でストレージアカウントを構築するBicepファイルをのせておきます。
param storageAccountName string
// https://learn.microsoft.com/ja-jp/azure/templates/microsoft.storage/storageaccounts?pivots=deployment-language-bicep
resource storageAccount 'Microsoft.Storage/storageAccounts@2023-01-01' = {
name: storageAccountName
location: resourceGroup().location
// パフォーマンス, premiumアカウントの種類
kind: 'StorageV2'
// パフォーマンス, 冗長性
sku: {
name: 'Standard_LRS'
}
properties: {
// 詳細
// セキュリティ
// REST API 操作の安全な転送を必須にする
supportsHttpsTrafficOnly: true
// 個々のコンテナーでの匿名アクセスの有効化を許可する
allowBlobPublicAccess: false
// ストレージ アカウント キーへのアクセスを有効にする
allowSharedKeyAccess: true
// Azure portal で Microsoft Entra 認可を既定にする
defaultToOAuthAuthentication: false
// TLS の最小バージョン
minimumTlsVersion: 'TLS1_2'
// コピー操作の許可されるスコープ (プレビュー).
allowedCopyScope: null
// 階層型名前空間
// 階層型名前空間を有効にする
isHnsEnabled: false
// アクセスプロトコル
// SFTP を有効にする
isSftpEnabled: false
// ネットワーク ファイル システム v3 を有効にする
isNfsV3Enabled: false
// BLOB ストレージ
// クロステナント レプリケーションを許可する
allowCrossTenantReplication: false
// アクセス層
accessTier: 'Hot'
// ネットワーク
// ネットワーク接続
// ネットワークアクセス
publicNetworkAccess: 'Enabled'
// 仮想ネットワーク, IPアドレス
// 設定しないためnetworkAclsは記述しない
// プライベートエンドポイント
// プライベートエンドポイント側で設定
// ネットワークルーティング
// ルーティングの優先順位
routingPreference: {
routingChoice: 'MicrosoftRouting'
}
// データ保護→復旧、追跡
// blobServices, fileServices, containersで定義
// アクセス制御
// バージョンレベルの不変性のサポートを有効にする(falseにしてもエラーが出たら記述しなくていい)
immutableStorageWithVersioning: {
enabled: false
}
// 暗号化
encryption: {
// 暗号化の種類. Microsoft.KeyvaultがCMK.
keySource: 'Microsoft.Storage'
// カスタマー マネージド キーのサポートを有効にする
services: {
blob: {
enabled: true
keyType: 'Account'
}
file: {
enabled: true
keyType: 'Account'
}
queue: {
enabled: false
keyType: 'Account'
}
table: {
enabled: false
keyType: 'Account'
}
}
// インフラストラクチャ暗号化を有効にする
requireInfrastructureEncryption: false
}
}
}
// https://learn.microsoft.com/en-us/azure/templates/microsoft.storage/storageaccounts/blobservices?pivots=deployment-language-bicep
resource blobServices 'Microsoft.Storage/storageAccounts/blobServices@2023-01-01' = {
name: 'default'
parent: storageAccount
properties: {
// 復旧
// コンテナーのポイントインタイム リストアを有効にする
restorePolicy: {
enabled: false
days: 7
}
// BLOB の論理的な削除を有効にする
deleteRetentionPolicy: {
enabled: true
allowPermanentDelete: false
days: 7
}
// コンテナーの論理的な削除を有効にする
containerDeleteRetentionPolicy: {
enabled: true
allowPermanentDelete: false
days: 7
}
// 追跡
// BLOB のバージョン管理を有効にする
isVersioningEnabled: false
// BLOB の変更フィードを有効にする
changeFeed: {
enabled: false
// 変更フィードログを削除するまでの期間(日数)
// retentionInDays: 7
}
}
}
// https://azure.github.io/PSRule.Rules.Azure/en/rules/Azure.Storage.FileShareSoftDelete/
resource fileServices 'Microsoft.Storage/storageAccounts/fileServices@2023-01-01' = {
name: 'default'
parent: storageAccount
properties: {
// ファイル共有の論理的な削除を有効にする
shareDeleteRetentionPolicy: {
enabled: true
allowPermanentDelete: false
days: 7
}
}
}
5. まとめと参考URL
Azureポータルのリソース構築時の設定項目順にきれいにBicepパラメータを対応させてみました!
この記事は以下3つのMicrosoft公式ドキュメントを参考にしています。具体的なパラメータの値は以下のドキュメントを見てもらえればわかるかと思います!
Discussion