Azureテナントとサブスクリプションの違いを体系的に解説|az CLIで階層構造を確認する手順

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Azure > Azureテナントとサブスクリプションの違いを体系的に解説|az CLIで階層構造を確認する手順
「AzureのテナントとサブスクリプションIDって、結局何が違うんだっけ?」
「権限管理はどっちでやるのか、課金はどの単位で発生するのか」

Azureを使い始めると、この2つの概念で必ずつまずきます。ドキュメントを読んでも「テナントはMicrosoft Entra IDのインスタンス」「サブスクリプションは課金単位」とあるだけで、実務でどう使い分けるかがなかなかイメージしにくい。

この記事では、Azureの管理階層を上から順に整理しながら、テナントとサブスクリプションがそれぞれ何を担うのかを体系的に解説します。az CLIを使った実際の確認手順も紹介します。動作確認は Azure CLI 2.61 / Ubuntu 24.04 LTS で行っています。

この記事のポイント

・テナントはID・認証の「会社単位」、サブスクリプションは課金・リソースの「財布」
・1つのテナントに複数サブスクリプションを紐づけられる(逆は不可)
・az account show でテナントIDとサブスクリプションIDを同時に確認できる
・スクリプト自動化では --subscription を明示指定するのが現場の鉄則


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

なぜテナントとサブスクリプションは混同されやすいのか

混同しやすい最大の理由は、Azureポータルを開いたときに両方が同じ画面に並んで表示されることです。「サブスクリプションを選んだだけなのになぜかテナントの設定が変わった」「az loginしたのにリソースが見えない」という経験は、多くのAzure入門者が通る道です。

2つの概念は層が違います。テナントは「誰がアクセスできるか(認証・IDの管理)」を担い、サブスクリプションは「何を使うか・いくら払うか(課金・リソース境界)」を担います。役割が完全に分かれているので、それぞれの役割を頭に入れてから使うと混乱が激減します。

Azureの管理階層を上から理解する

Azureのリソース管理は、上位から「テナント → 管理グループ → サブスクリプション → リソースグループ → リソース」という5層で構成されています。テナントはこの階層の最上位に位置します。

1. テナント(Microsoft Entra ID)の役割

テナントは、Microsoft Entra ID(2023年10月にAzure Active Directoryから改称)の専用インスタンスです。組織がMicrosoftのクラウドサービス(Azure・Microsoft 365等)を初めて契約したとき、1つのテナントが自動的に作成されます。

テナントが管理するのは主に以下の2点です。

・ユーザーID・グループ:「誰がAzureを使えるか」を定義します
・認証ポリシー・条件付きアクセス:「どのような条件でログインを許可するか」を制御します

テナントを識別するのがテナントID(GUID形式: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)です。az CLIで az account show を実行すると tenantId フィールドで確認できます。

テナントとドメインの関係も重要です。テナント作成時に xxxxx.onmicrosoft.com という既定ドメインが割り当てられます。独自ドメインを追加することも可能で、その場合でもテナントIDは変わりません。

2. サブスクリプションの役割

サブスクリプションは、Azure上のリソース(VM・ストレージ・VNet等)を作成・管理するための「課金単位」かつ「リソース境界」です。

サブスクリプションが管理するのは主に以下の2点です。

・課金:このサブスクリプションで使ったリソースの料金がまとめて請求されます
・リソースの境界:VMやVNet等のリソースは、必ずいずれか1つのサブスクリプションに属します

1つのテナントに対して、複数のサブスクリプションを紐づけることができます。たとえば「開発用」「本番用」「検証用」と分けるのが典型的な使い方です。逆に、1つのサブスクリプションが複数のテナントに同時所属することはできません(テナント間の移行は可能ですが、同時所属は不可)。

サブスクリプションを識別するのがサブスクリプションID(同じくGUID形式)です。

3. 管理グループ・リソースグループとの位置付け

5層の全体像を改めて整理します。
層 役割 主な管理対象
テナント 認証・ID管理の最上位 ユーザー、グループ、認証ポリシー
管理グループ 複数サブスクリプションの横断管理 ポリシー、RBACの一括適用
サブスクリプション 課金・リソース境界 リソースグループ全体の課金
リソースグループ リソースの論理グループ VM、VNet、ストレージ等をまとめる
リソース 実体(VMなど) 個々のAzureサービス
管理グループはオプション機能で、テナント直下にサブスクリプションを直接ぶら下げることもできます。管理グループを使うのは、サブスクリプションが10個を超えるような大企業・マルチチーム環境が典型的です。

az CLIでAzureの階層構造を確認する手順

実際にaz CLIを使って、テナントIDとサブスクリプションIDを確認する手順を見ていきます。

1. az loginしてテナントIDとサブスクリプションIDを確認する

まず az login でAzureにサインインします。

# Azureにサインイン(ブラウザが開いて認証が完了するまで待つ) $ az login # 現在のアカウント情報(テナントID・サブスクリプションID)を確認 $ az account show

実際の出力例は以下のとおりです。tenantId と id(サブスクリプションID)の2つを同時に確認できます。

{ "environmentName": "AzureCloud", "homeTenantId": "a1b2c3d4-xxxx-xxxx-xxxx-ef1234567890", "id": "12345678-xxxx-xxxx-xxxx-6789abcdef01", "isDefault": true, "managedByTenants": [], "name": "Linuxmaster-Dev", "state": "Enabled", "tenantId": "a1b2c3d4-xxxx-xxxx-xxxx-ef1234567890", "user": { "name": "admin@linuxmasterlab.onmicrosoft.com", "type": "user" } }

ここで注目すべきは homeTenantId と tenantId の2フィールドです。通常は同じ値ですが、ゲストユーザーとして別テナントのサブスクリプションにアクセスしている場合は異なります。homeTenantId はユーザーアカウントが所属するテナント、tenantId はそのサブスクリプションが登録されているテナントです。

2. アカウントに紐づく全テナントを一覧表示する

自分のアカウントがアクセスできるテナントの一覧は az account tenant list で確認できます。

$ az account tenant list

出力例:

[ { "countryCode": "JP", "defaultDomain": "linuxmasterlab.onmicrosoft.com", "displayName": "Linuxmaster Lab", "id": "a1b2c3d4-xxxx-xxxx-xxxx-ef1234567890", "tenantCategory": "Home", "tenantId": "a1b2c3d4-xxxx-xxxx-xxxx-ef1234567890" } ]

tenantCategory: "Home" が自分のアカウントが属するテナント(ホームテナント)です。別会社のテナントにゲスト招待されている場合は、そちらのエントリが "tenantCategory": "MsaAzureEA" または空文字で追加表示されます。

3. サブスクリプション一覧とその紐づきを確認する

アクセス可能な全サブスクリプションをテーブル形式で一覧表示します。

$ az account list --output table

出力例:

Name CloudName SubscriptionId State IsDefault ---------------- ----------- ------------------------------------ ------- ----------- Linuxmaster-Dev AzureCloud 12345678-xxxx-xxxx-xxxx-6789abcdef01 Enabled True Linuxmaster-Prod AzureCloud 87654321-xxxx-xxxx-xxxx-1234abcdef09 Enabled False

IsDefault: True が現在の作業対象サブスクリプションです。az CLIコマンドを実行すると、このデフォルトのサブスクリプションに対して操作が行われます。

サブスクリプションを切り替えるには az account set を使います。

# サブスクリプションを切り替える(IDで指定) $ az account set --subscription "87654321-xxxx-xxxx-xxxx-1234abcdef09" # または名前で指定することも可能 $ az account set --subscription "Linuxmaster-Prod" # 切り替え後に確認 $ az account show --query "{name:name, id:id, tenantId:tenantId}" --output table Name Id TenantId ---------------- ------------------------------------ ------------------------------------ Linuxmaster-Prod 87654321-xxxx-xxxx-xxxx-1234abcdef09 a1b2c3d4-xxxx-xxxx-xxxx-ef1234567890

スクリプトや自動化処理では --subscription オプションを明示的に指定することを強く推奨します。デフォルトサブスクリプションへの暗黙の依存は、複数サブスクリプション環境で誤ったリソースを操作する事故の原因になります。Azureのハンズオン学習を体系的に進めたい方は Azure実践ハンズオン講座 も参考にしてみてください。

複数サブスクリプション・複数テナント運用のよくあるトラブル

1. 「リソースが見つからない」:サブスクリプションの切り替え忘れ

「az vm list を実行したらリソースが0件だった」というトラブルの大半は、サブスクリプションの切り替え忘れです。

# 現在どのサブスクリプションにいるかを先に確認する習慣をつける $ az account show --query "{name:name, id:id}" --output table Name Id --------------- ------------------------------------ Linuxmaster-Dev 12345678-xxxx-xxxx-xxxx-6789abcdef01 # このまま az vm list を実行すると Dev環境のVMしか見えない $ az vm list --output table # Prod環境のVMを操作したいなら、先にサブスクリプションを切り替える $ az account set --subscription "Linuxmaster-Prod"

シェルスクリプト内では冒頭で az account show を実行し、サブスクリプション名をログ出力しておくと、後でどの環境で実行したか追跡しやすくなります。

2. 「Authorization_RequestDenied」:テナントをまたぐ権限エラー

別会社テナントのゲストユーザーとして招待されている場合、テナントIDを明示してログインしないと権限エラーになります。

# テナントIDを明示してログイン(ゲストアクセス時) $ az login --tenant "対象テナントのテナントID" # 既にログイン済みの場合はサブスクリプションとテナントを同時に指定 $ az account set --subscription "サブスクリプションID" # 操作対象のテナントに切り替わっているか確認 $ az account show --query "tenantId" --output tsv

エラーメッセージに AADSTS50020 や The user account ... does not exist in tenant と出ている場合は、テナントの指定なしでアクセスしているのが原因です。az login --tenant テナントID で正しいテナントに対してサインインし直してください。

テナントとサブスクリプションの違い まとめ

比較項目 テナント サブスクリプション
役割 ID・認証の管理 課金・リソース境界
識別子 テナントID(GUID) サブスクリプションID(GUID)
1対多の関係 1テナント → 複数サブスクリプション可 1サブスクリプション → 1テナントのみ
az CLIで確認 az account tenant list az account list
権限設定 Entra IDロール(グローバル管理者等) Azure RBACロール(所有者・共同作成者等)
課金への影響 直接なし(課金はサブスクリプション単位) 直接あり(月次請求の単位)
テナントは「会社の入口(誰を入れるか)」、サブスクリプションは「部署の財布(何を使うか・いくら払うか)」と覚えておくと混乱しにくくなります。実務では「テナントでユーザーを管理し、サブスクリプションでリソースと予算を管理する」という役割分担を意識することが重要です。

現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、

AzureのVM構築からVNetのネットワーク設計まで、手を動かしながら学べるハンズオン形式で解説しています。
>> Azure実践ハンズオン講座(linuxmaster.jp) で詳細を確認する

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。