😸

【Azure】ストレージアカウントをBicepファイルで構築する

2024/09/28に公開

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公式ドキュメントを参考にしています。具体的なパラメータの値は以下のドキュメントを見てもらえればわかるかと思います!

https://learn.microsoft.com/ja-jp/azure/templates/microsoft.storage/storageaccounts?pivots=deployment-language-bicep
https://learn.microsoft.com/ja-jp/azure/templates/microsoft.storage/storageaccounts/blobservices?pivots=deployment-language-bicep
https://learn.microsoft.com/ja-jp/azure/templates/microsoft.storage/storageaccounts/fileservices?pivots=deployment-language-bicep

Discussion