「権限管理はどっちでやるのか、課金はどの単位で発生するのか」
Azureを使い始めると、この2つの概念で必ずつまずきます。ドキュメントを読んでも「テナントはMicrosoft Entra IDのインスタンス」「サブスクリプションは課金単位」とあるだけで、実務でどう使い分けるかがなかなかイメージしにくい。
この記事では、Azureの管理階層を上から順に整理しながら、テナントとサブスクリプションがそれぞれ何を担うのかを体系的に解説します。az CLIを使った実際の確認手順も紹介します。動作確認は Azure CLI 2.61 / Ubuntu 24.04 LTS で行っています。
この記事のポイント
・テナントはID・認証の「会社単位」、サブスクリプションは課金・リソースの「財布」
・1つのテナントに複数サブスクリプションを紐づけられる(逆は不可)
・az account show でテナントIDとサブスクリプションIDを同時に確認できる
・スクリプト自動化では --subscription を明示指定するのが現場の鉄則
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜテナントとサブスクリプションは混同されやすいのか
混同しやすい最大の理由は、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サービス |
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) で詳細を確認する
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:AzureでEC2相当のVMを作る手順|AWS経験者向けハンズオン
- この記事の属するカテゴリ:Azureへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます