
【Terraform・Bicep】AzureのStorage Accountをコード化!ポータルの設定をIaCで再現
Microsoft AzureのStorage Accountをポータルで設定しているインフラ管理担当者が多いと思いますが、手動設定では管理が煩雑になり、環境ごとに違いが生じるリスクもあります。
そこで、TerraformやBicepを使ってInfrastructure as Code(IaC)を実践し、ポータルの設定をコードで再現する方法を解説します。
本記事では、Storage Accountの主要設定をAzureポータルで作成する方法から、IaCで記述し、再利用性や管理の効率化を向上させる手順までを紹介します。Azure環境をよりシンプルかつ一貫性のある運用にしましょう!
Storage Accountの概要
Azure ストレージ アカウントは、さまざまなデータを保存・管理するためのサービスです。多種多様なデータやオブジェクトを格納でき、非常に高い可用性、耐久性、スケーラビリティを提供します。

Webサイトホスティング機能
Azure Storage には、静的Webサイトホスティング機能があり、HTML / CSS / JavaScript をアップロードするだけで、Webサイトとして公開もできます。
ストレージアカウント作成後に、左のメニューバー内の「データ管理」→「静的なWebサイト」をクリックし、有効化することで設定可能です。

AzureポータルでStorage Accountを作成
ここからは、Azureポータル上でStorage Accountを作成する際の手順を解説します。ストレージアカウントの各パラメータの詳細に関しては、Azure公式ページより確認してください。
まずは、Azureポータルにサインインして、ストレージアカウントのページを開き作成をクリックします。

基本情報

- ストレージアカウント名:使用できるのは、小文字と数字のみです。また、名前は 3〜24文字である必要があります。
プライマリ サービス

- Blob / Data Lake:画像・動画・ビッグデータや汎用的な使い方をする場合に選択
- Azure Files:ファイルを扱う場合
- その他(テーブルとキュー):NoSQL のデータ管理や非同期処理や分散アプリ
パフォーマンス
- スタンダード:HDD ベース のストレージで、データアクセスは一般的な用途に適している
- プレミアム:SSD ベース のストレージで、高速アクセスが可能。
冗長性

Azure Storage Account では、データの可用性を高めるために、以下のような冗長性オプションがあります。
- LRS: 同じデータセンター内で3重にデータを複製
- ZRS:複数のアベイラビリティゾーンにデータを複製
- GRS:離れたリージョンにデータを複製(読み取りは不可)
- RA-GRS:GRSに加えてセカンダリリージョンからの読み取りが可能
詳細


TLS の最小バージョン
Azure Storage では、TLS の最小バージョンを指定することで、古い TLS バージョンを無効化し、より強固なセキュリティを確保できます。
TLS には複数のバージョンがあり、それぞれセキュリティの強化が図られています。
TLS 1.0 | 非推奨 | 旧式でセキュリティが脆弱(例:BEAST 攻撃) |
TLS 1.1 | 非推奨 | 改善されたが、TLS 1.2 に比べ脆弱性がある |
TLS 1.2 | 推奨 | 安全な暗号スイートをサポートし、広く使用されている |
データのコピー操作(Blob ストレージのコピーなど)を制御するための 「コピー操作の許可されるスコープ(Copy Scope)」 という機能が提供されています。この機能を使用すると、どこからどこへデータをコピーできるかを制限 し、セキュリティを強化 することができます。
アクセス層 | 特徴 | 料金(ストレージ / アクセス) |
ホット(Hot) | 高速アクセス、低レイテンシ | 保存コスト:高いアクセスコスト:低い |
クール(Cool) | 低コストの保存、一定の読み取り遅延 | 保存コスト:中程度アクセスコスト:やや高い |
コールド(Cold) /アーカイブ( Archive) | 非常に低コスト、読み出しに時間がかかる | 保存コスト:非常に安いアクセスコスト:非常に高い |
- 頻繁にアクセスするデータは、「ホット」
- 30日~90日間はほぼアクセスしないデータは、「クール」
- 数ヶ月~数年単位の長期保存が必要でほとんどアクセスしないバックアップデータなどは、「コールド」
といった使い分けを目安に設定してください。
ネットワーク


ネットワーク接続
以下の3つの項目から要件に合わせて選択してください。
- すべてのネットワークからのパブリックアクセスを有効にする
- 選択した仮想ネットワークと IPアドレスからのパブリックアクセスを有効にする
- パブリック アクセスを無効にし、プライベートアクセスを使用する
1に関しては、誰からでもアクセスが可能になるため、テスト環境やWebサイトホスティング以外の用途では非推奨です。今回は、テスト環境のため、1を選択して作成します。
データ保護


データ保護では、誤操作や障害発生などでストレージアカウントが削除されたり異常が発生した場合の対処方法に関する設定が可能です。
今回は、既定の値から変更せずストレージアカウントを作成しますが、環境に合わせて変更してください。
暗号化

Azure Storage では、データのセキュリティを強化するために、暗号化(Encryption)がデフォルトで適用されます。
データを保存する際や転送する際に暗号化されることで、機密性と安全性が確保されます。
暗号化の種類
次のいずれかからキーの種類を選択します。
- Microsoftマネージドキー:Microsoftがキーを自動管理
- カスタマーマネージドキー:ユーザーが独自でキーを作成管理する
タグ

今回はテスト環境でのストレージアカウントを作成する想定で、以下のようにタグ設定を行います。
名前:env
値:test
タグ設定が完了したら「レビューと作成」をクリックして、ストレージアカウントを作成しましょう。作成が完了したらリソースに移動をクリックして、ストレージアカウントが作成されているか確認します。
この手順でAzureポータル上でのリソース作成は終了です。
terraformでStorage Accountを作成する
Azureポータルでストレージアカウントを作成する手順を解説しましたが、同じ設定のストレージアカウントをterraformで作成するときの手順とコードを解説します。
まずは、storageaccount.tf という名前のファイルを作成し、VScodeでファイルを開き、下記のコードを記述します。
# Subscription ID の設定(必要なら適用) provider “azurerm” { subscription_id = “subscription_id” features {} } resource “azurerm_storage_account” “example” { name = “opstodaytestst01” resource_group_name = “opstoday-terraform-rg” location = “japaneast” # リージョンを Japan East に変更 account_tier = “Standard” account_replication_type = “RAGRS” # 読み取りアクセス geo 冗長ストレージ (RA-GRS) tags = { env = “test” } } |
3行目のsubscription_id の欄には自身のAzure環境のサブスクリプションIDを記述します。
サブスクリプションIDがわからない場合は、以下のコマンドでサブスクリプションIDを確認し入力してください。
az account show –query id -o tsv |
storageaccount.tf にコードを書き終えたら以下のコマンドで環境の初期化を行います。
terraform init |
次のように successfully と表示されていれば環境の初期化が成功です。
Terraform has been successfully initialized! |
エラーが出た場合は、エラー内容に従って修正してください。
続いて、コードの入力に誤りがないか下記コマンドでチェックを行います。
terraform plan |
コードチェックでもエラーが出なければ次のコマンドで実際にリソースをデプロイします。
terraform apply |
下記のようにApply complete!と出力されていればデプロイ成功です。
Apply complete! Resources: 1 added, 0 changed, 0 destroyed. |
Azureポータルを開いてストレージアカウントが作成されているか確認しましょう。

terraform の使い方がわからない方は別の記事で解説しているのでそちらをご確認ください。
001-00001のリンクを貼る。
BicepでStorage Accountを作成する
Azureポータルで作成したストレージアカウントと同様のリソースを次は、Bicepで作成する際のコードと手順を解説します。
storageaccount.bicepというファイルを作成し、VScodeで開きます。そして下記のコードを記述してください。
param storageAccountName string = ‘opstodaytestst01’ param resourceGroupName string = ‘opstoday-terraform-rg’ param location string = ‘japaneast’ resource storageAccount ‘Microsoft.Storage/storageAccounts@2022-09-01’ = { name: storageAccountName location: location sku: { name: ‘Standard_RAGRS’ // 読み取りアクセス geo 冗長ストレージ (RA-GRS) } kind: ‘StorageV2’ properties: { accessTier: ‘Hot’ // アクセス頻度に応じたストレージ設定(HotまたはCool) allowBlobPublicAccess: false minimumTlsVersion: ‘TLS1_2’ } tags: { environment: ‘test’ } } |
コード記述後は、ターミナルにaz loginのコマンドを入力し、Azureアカウントにサインインします。
そして、下記のコマンドでリソースを作成します。
az deployment group create –resource-group opstoday-terraform-rg –template-file storageaccount.bicep |
リソース作成完了後に、ストレージアカウントが作成されているかAzureポータル上で確認しましょう。

この手順を行うことで、Bicepでストレージアカウントの作成が可能です。
Storage Accountを作成する上での注意点
「ログ管理用のストレージアカウント」、「アプリケーションのデータ保管用ストレージアカウント」など、利用用途に合わせていくつストレージアカウントが必要になるかを検討することが重要です。
また、開発環境や本番環境でストレージアカウントを作成する際は、事前に以下の4点を決定しておきましょう。
- ネットワーク設定を適切にする
- どのようなデータを保存するかを決定してからリソースを作成する
- ライフサイクル管理を適切に行う
- データの冗長性(LRS、GRSなど)を考慮する
Storage Accountを作成する際、セキュリティを考慮したネットワーク設定が不可欠です。デフォルトでは、すべてのネットワークからのアクセスが許可されていますが、不正アクセスを防ぐために、特定の仮想ネットワークやIPアドレス範囲からのみアクセスを許可する設定を行うべきです。
また、Azure Private Endpointを利用することで、インターネットを経由せずにプライベート接続が可能になり、よりセキュアな環境を構築できます。さらに、ファイアウォールや仮想ネットワークルールの設定も適切に行い、不要なアクセスを制限することが重要です。
アクセス頻度に応じて「Hot」「Cool」「Archive」を選択するか、Blob、File、Table、Queue、非構造化データのどのデータを保存するのか、データの冗長性(LRS、GRSなど)はどうするか
可用性やコストとのバランスを取ることが重要です。事前にデータの特性や利用方法を明確にすることで、最適なストレージリソースを構築できます。
まとめ
本記事では、AzureのStorage AccountをTerraformやBicepを用いてコード化し、ポータルの設定をIaCで再現する方法を解説しました。IaCを活用することで、一貫性のある環境構築、管理の効率化、設定ミスの防止が可能になります。
手動設定から脱却し、スクリプト化による自動化を取り入れることで、より信頼性の高いAzure環境を実現しましょう。今後は、他のAzureリソースもIaCで管理し、さらなる運用の最適化を目指してみてください。