Azure のすべてのサブスクリプションと管理グループを管理する目的でアクセス権限を昇格させる

Azure Active Directory (Azure AD) の全体管理者には、自分のディレクトリにおいて、すべてのサブスクリプションと管理グループにアクセスする権限が与えられていない場合があります。 この記事では、すべてのサブスクリプションと管理グループにアクセスできるよう、権限を昇格させる方法について説明します。

注意

個人データの表示または削除については、「GDPR のための Azure データ サブジェクト要求」を参照してください。 GDPR の詳細については、Microsoft Trust Center の GDPR に関するセクションおよび Service Trust Portal の GDPR に関するセクションをご覧ください。

アクセス権を昇格が必要な理由

全体管理者であれば、次のような操作を行う場合が考えられます。

  • ユーザーが Azure のサブスクリプションか管理グループにアクセスできなくなったとき、アクセス権を回復する
  • 別のユーザーまたは自分に Azure のサブスクリプションまたは管理グループへのアクセス権を付与する
  • 組織内にある Azure のすべてのサブスクリプションと管理グループを表示する
  • オートメーション アプリ (請求書作成アプリや監査アプリなど) から Azure のすべてのサブスクリプションと管理グループへのアクセスを許可する

昇格されたアクセスはどのように機能しますか?

Azure AD と Azure リソースは互いに依存することなくセキュリティで保護されます。 つまり、Azure AD のロール割り当てによって Azure リソースにアクセス権が付与されることはなく、Azure のロール割り当てによって Azure AD にアクセス権が付与されることはありません。 ただし、Azure AD の全体管理者であれば、自分のディレクトリにあるすべての Azure サブスクリプションと管理グループに対するアクセス許可を自分に割り当てることができます。 仮想マシンやストレージ アカウントなど、Azure サブスクリプション リソースへのアクセス権が与えられていない場合、この機能を使用します。このようなリソースに対するアクセス権を得るには、全体管理者の特権を使用することをお勧めします。

アクセス権を昇格させると、Azure のルート範囲 (/) でユーザー アクセスの管理者ロールが割り当てられます。  これにより、すべてのリソースを表示したり、ディレクトリにあるあらゆるサブスクリプションまたは管理グループでアクセス権を割り当てたりできます。 ユーザー アクセス管理者ロールの割り当ては Azure PowerShell、Azure CLI、または REST API を使用して削除できます。

昇格したこのアクセス権は、ルート範囲で必要な変更を行ったら削除してください。

Elevate access

Azure portal

全体管理者のアクセス権を昇格する

Azure portal を使用して全体管理者のアクセス権を昇格するには、次の手順に従います。

  1. Azure Portal または Azure Active Directory 管理センターに全体管理者としてサインインします。

    Azure AD Privileged Identity Management を使用している場合は、全体管理者ロールの割り当てをアクティブにします

  2. Azure Active Directory を開きます。

  3. [管理] の下で、 [プロパティ] を選択します。

    Select Properties for Azure Active Directory properties - screenshot

  4. [Azure リソースのアクセス管理] の下で [はい] に切り替えます。

    Access management for Azure resources - screenshot

    [はい] に切り替えると、Azure RBAC のルート範囲 (/) でユーザー アクセス管理者ロールが割り当てられます。 この割り当てにより、この Azure AD ディレクトリに関連付けられているすべての Azure サブスクリプションと管理グループでロールを割り当てるアクセス許可が付与されます。 この切り替えは、Azure AD で全体管理者ロールが割り当てられたユーザーのみ利用できます。

    [いいえ] に切り替えると、Azure RBAC のユーザー アクセス管理者ロールがユーザー アカウントから削除されます。 この Azure AD ディレクトリに関連付けられているすべての Azure サブスクリプションと管理グループでロールを割り当てることができなくなります。 自分にアクセス権が割り当てられている Azure サブスクリプションと管理グループのみを表示し、管理できます。

    注意

    Privileged Identity Management を使用している場合、ロールの割り当てを非アクティブにしても、Azure リソースのアクセス管理トグルは [いいえ] に切り替わりません。 最小限の特権アクセスを維持するために、ロールの割り当てを非アクティブ化する前に、この切り替えを [いいえ] に設定することをお勧めします。

  5. [保存] をクリックして設定を保存します。

    この設定はグローバル プロパティではなく、現在サインインしているユーザーのみに適用されます。 全体管理者ロールのすべてのメンバーを対象にアクセスを昇格させることはできません。

  6. サインアウトし、もう一度サインインするとアクセス権が更新されます。

    これで自分のディレクトリにあるすべてのサブスクリプションと管理グループにアクセスできます。 [アクセス制御 (IAM)] ウィンドウを表示すると、ルート スコープでユーザー アクセス管理者ロールが割り当てられていることがわかります。

    Subscription role assignments with root scope - screenshot

  7. 昇格させたアクセス権で必要な変更を加えます。

    ロールの割り当ての詳細については、「Azure portal を使用して Azure ロールを割り当てる」をご覧ください。 Privileged Identity Management を使用している場合、管理する Azure リソースの検出または Azure リソース ロールの割り当てに関するページを参照してください。

  8. 次のセクションの手順を実行し、昇格したアクセス権を削除します。

昇格されたアクセス権を削除する

ルート スコープ (/) でユーザー アクセス管理者ロールの割り当てを削除するには、次の手順を行います。

  1. アクセス権の昇格に使用された同じユーザーでサインインします。

  2. ナビゲーション リストで [Azure Active Directory][プロパティ] の順にクリックします。

  3. [Azure リソースのアクセス管理][いいえ] に戻します。 これはユーザー別の設定であるため、アクセスの昇格に使用したユーザーでサインインする必要があります。

    [アクセス制御 (IAM)] ウィンドウでユーザー アクセス管理者ロールの割り当てを削除しようとすると、次のメッセージが表示されます。 ロールの割り当てを削除するには、トグルの設定を [いいえ] に戻すか、Azure PowerShell、Azure CLI、または REST API を使用します。

    Remove role assignments with root scope

  4. 全体管理者としてサインアウトします。

    Privileged Identity Management を使用している場合は、全体管理者ロールの割り当てを非アクティブ化します。

    注意

    Privileged Identity Management を使用している場合、ロールの割り当てを非アクティブにしても、Azure リソースのアクセス管理トグルは [いいえ] に切り替わりません。 最小限の特権アクセスを維持するために、ロールの割り当てを非アクティブ化する前に、この切り替えを [いいえ] に設定することをお勧めします。

Azure PowerShell

注意

この記事では、Azure と対話するために推奨される PowerShell モジュールである Azure Az PowerShell モジュールを使用します。 Az PowerShell モジュールの使用を開始するには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。

ルート スコープ (/) のロールの割り当てを一覧表示する

ルート スコープ (/) のユーザーについてユーザー アクセス管理者ロールの割り当てを一覧表示するには、Get-AzRoleAssignment コマンドを使用します。

Get-AzRoleAssignment | where {$_.RoleDefinitionName -eq "User Access Administrator" `
  -and $_.SignInName -eq "<username@example.com>" -and $_.Scope -eq "/"}
RoleAssignmentId   : /providers/Microsoft.Authorization/roleAssignments/11111111-1111-1111-1111-111111111111
Scope              : /
DisplayName        : username
SignInName         : username@example.com
RoleDefinitionName : User Access Administrator
RoleDefinitionId   : 18d7d88d-d35e-4fb5-a5c3-7773c20a72d9
ObjectId           : 22222222-2222-2222-2222-222222222222
ObjectType         : User
CanDelegate        : False

昇格されたアクセス権を削除する

自分か他のユーザーのためにルート スコープ (/) でユーザー アクセス管理者ロールの割り当てを削除するには、次の手順を行います。

  1. 昇格させたアクセス権を削除できるユーザーでサインインします。 これはアクセス権を昇格させたときと同じユーザーかルート スコープでアクセス権が昇格されている別の全体管理者になります。

  2. ユーザー アクセス管理者ロールの割り当てを削除するには、Remove-AzRoleAssignment コマンドを使用します。

    Remove-AzRoleAssignment -SignInName <username@example.com> `
      -RoleDefinitionName "User Access Administrator" -Scope "/"
    

Azure CLI

全体管理者のアクセス権を昇格する

Azure CLI を使用して全体管理者のアクセス権を昇格するには、以下の基本的な手順を実行します。

  1. az rest コマンドを使用して elevateAccess エンドポイントを呼び出します。これにより、ユーザー アクセス管理者ロールがルート スコープ (/) で付与されます。

    az rest --method post --url "/providers/Microsoft.Authorization/elevateAccess?api-version=2016-07-01"
    
  2. 昇格させたアクセス権で必要な変更を加えます。

    ロールの割り当ての詳細については、「Azure CLI を使用して Azure ロールを割り当てる」をご覧ください。

  3. 後述のセクションの手順を実行して、昇格したアクセス権を削除します。

ルート スコープ (/) のロールの割り当てを一覧表示する

ルート スコープ (/) のユーザーについてユーザー アクセス管理者ロールの割り当てを一覧表示するには、az role assignment list コマンドを使用します。

az role assignment list --role "User Access Administrator" --scope "/"
[
  {
    "canDelegate": null,
    "id": "/providers/Microsoft.Authorization/roleAssignments/11111111-1111-1111-1111-111111111111",
    "name": "11111111-1111-1111-1111-111111111111",
    "principalId": "22222222-2222-2222-2222-222222222222",
    "principalName": "username@example.com",
    "principalType": "User",
    "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/18d7d88d-d35e-4fb5-a5c3-7773c20a72d9",
    "roleDefinitionName": "User Access Administrator",
    "scope": "/",
    "type": "Microsoft.Authorization/roleAssignments"
  }
]

昇格されたアクセス権を削除する

自分か他のユーザーのためにルート スコープ (/) でユーザー アクセス管理者ロールの割り当てを削除するには、次の手順を行います。

  1. 昇格させたアクセス権を削除できるユーザーでサインインします。 これはアクセス権を昇格させたときと同じユーザーかルート スコープでアクセス権が昇格されている別の全体管理者になります。

  2. ユーザー アクセス管理者ロールの割り当てを削除するには、az role assignment delete コマンドを使用します。

    az role assignment delete --assignee username@example.com --role "User Access Administrator" --scope "/"
    

REST API

全体管理者のアクセス権を昇格する

REST API を使用して全体管理者のアクセス権を昇格するには、以下の基本的な手順を実行します。

  1. REST を使用して elevateAccess を呼び出します。これにより、ユーザー アクセス管理者ロールがルート スコープ (/) で付与されます。

    POST https://management.azure.com/providers/Microsoft.Authorization/elevateAccess?api-version=2016-07-01
    
  2. 昇格させたアクセス権で必要な変更を加えます。

    ロールの割り当ての詳細については、「REST API を使用して Azure ロールを割り当てる」をご覧ください。

  3. 後述のセクションの手順を実行して、昇格したアクセス権を削除します。

ルート スコープ (/) のロールの割り当てを一覧表示する

ルート スコープ (/) でのユーザーに対するロールの割り当ての一覧を表示することができます。

  • GET roleAssignments を呼び出します。{objectIdOfUser} は、ロールの割り当てを取得するユーザーのオブジェクト ID です。

    GET https://management.azure.com/providers/Microsoft.Authorization/roleAssignments?api-version=2015-07-01&$filter=principalId+eq+'{objectIdOfUser}'
    

ルート スコープ (/) の拒否割り当てを一覧表示する

ルート スコープ (/) でのユーザーに対する拒否割り当ての一覧を表示することができます。

  • Call GET denyAssignments を呼び出します。{objectIdOfUser} は、拒否割り当てを取得するユーザーのオブジェクト ID です。

    GET https://management.azure.com/providers/Microsoft.Authorization/denyAssignments?api-version=2018-07-01-preview&$filter=gdprExportPrincipalId+eq+'{objectIdOfUser}'
    

昇格されたアクセス権を削除する

elevateAccess を呼び出すと、自分自身に対するロールの割り当てが作成されます。このため、これらの権限を取り消すには、ルート スコープ (/) で、ユーザー アクセス管理者ロールの割り当てを自分で削除する必要があります。

  1. GET roleDefinitions を呼び出します。この roleName はユーザー アクセス管理者であり、ユーザー アクセス管理者ロールの名前 ID を判別します。

    GET https://management.azure.com/providers/Microsoft.Authorization/roleDefinitions?api-version=2015-07-01&$filter=roleName+eq+'User Access Administrator'
    
    {
      "value": [
        {
          "properties": {
      "roleName": "User Access Administrator",
      "type": "BuiltInRole",
      "description": "Lets you manage user access to Azure resources.",
      "assignableScopes": [
        "/"
      ],
      "permissions": [
        {
          "actions": [
            "*/read",
            "Microsoft.Authorization/*",
            "Microsoft.Support/*"
          ],
          "notActions": []
        }
      ],
      "createdOn": "0001-01-01T08:00:00.0000000Z",
      "updatedOn": "2016-05-31T23:14:04.6964687Z",
      "createdBy": null,
      "updatedBy": null
          },
          "id": "/providers/Microsoft.Authorization/roleDefinitions/18d7d88d-d35e-4fb5-a5c3-7773c20a72d9",
          "type": "Microsoft.Authorization/roleDefinitions",
          "name": "18d7d88d-d35e-4fb5-a5c3-7773c20a72d9"
        }
      ],
      "nextLink": null
    }
    

    この場合の 18d7d88d-d35e-4fb5-a5c3-7773c20a72d9 では、name パラメーターの ID を省略できます。

  2. また、ディレクトリ スコープでディレクトリ管理者のロール割り当ての一覧を表示する必要もあります。 アクセス権の昇格呼び出しを行ったディレクトリ管理者の principalId について、ディレクトリ スコープの割り当て一覧を表示します。 これにより、objectid についてディレクトリの割り当ての一覧が表示されます。

    GET https://management.azure.com/providers/Microsoft.Authorization/roleAssignments?api-version=2015-07-01&$filter=principalId+eq+'{objectid}'
    

    注意

    ディレクトリ管理者の割り当ては多くありません。前のクエリが返す割り当ての数が多すぎる場合は、ディレクトリ スコープ レベルのみで、すべての割り当てに対してクエリを実行し、結果をフィルター処理することもできます。GET https://management.azure.com/providers/Microsoft.Authorization/roleAssignments?api-version=2015-07-01&$filter=atScope()

  3. 前の呼び出しは、ロール割り当ての一覧を返します。 スコープが "/" で、roleDefinitionId が手順 1 で見つかったロール名 ID で終了し、principalId がディレクトリ管理者の objectId と一致する、ロール割り当てを検索します。

    サンプル ロールの割り当て

    {
      "value": [
        {
          "properties": {
            "roleDefinitionId": "/providers/Microsoft.Authorization/roleDefinitions/18d7d88d-d35e-4fb5-a5c3-7773c20a72d9",
            "principalId": "{objectID}",
            "scope": "/",
            "createdOn": "2016-08-17T19:21:16.3422480Z",
            "updatedOn": "2016-08-17T19:21:16.3422480Z",
            "createdBy": "22222222-2222-2222-2222-222222222222",
            "updatedBy": "22222222-2222-2222-2222-222222222222"
          },
          "id": "/providers/Microsoft.Authorization/roleAssignments/11111111-1111-1111-1111-111111111111",
          "type": "Microsoft.Authorization/roleAssignments",
          "name": "11111111-1111-1111-1111-111111111111"
        }
      ],
      "nextLink": null
    }
    

    繰り返しになりますが、name パラメーターの ID を保存します。今回は 11111111-1111-1111-1111-111111111111 です。

  4. 最後に、ロール割り当て ID を使用して、elevateAccess によって追加された割り当てを削除します。

    DELETE https://management.azure.com/providers/Microsoft.Authorization/roleAssignments/11111111-1111-1111-1111-111111111111?api-version=2015-07-01
    

アクセス権の昇格ログを表示する

アクセス許可が昇格されると、ログにエントリが 1 つ追加されます。 Azure AD の全体管理者は、アクセスがいつ昇格されたのか、および誰がそれを行ったのかを確認したい場合があります。 アクセス許可の昇格ログのエントリは、標準のアクティビティ ログではなく、ディレクトリのアクティビティ ログに表示されます。 このセクションでは、アクセス権の昇格ログを表示するさまざまな方法について説明します。

Azure portal を使用してアクセス権の昇格ログを表示する

  1. この記事の冒頭に記載されている手順に従って、アクセス権を昇格します。

  2. Azure Portal にグローバル管理者としてサインインします。

  3. [監視]>[アクティビティ ログ] を開きます。

  4. [アクティビティ] リストを [ディレクトリ アクティビティ] に変更します。

  5. アクセス権を昇格させるアクションを示す、次の操作を探します。

    Assigns the caller to User Access Administrator role

    Screenshot showing directory activity logs in Monitor.

  6. この記事の冒頭に記載されている手順に従って、昇格されたアクセス権を削除します。

Azure CLI を使用してアクセス権の昇格ログを表示する

  1. この記事の冒頭に記載されている手順に従って、アクセス権を昇格します。

  2. az login コマンドを使用して、全体管理者としてサインインします。

  3. az rest コマンドを使用して、以下の呼び出しを行います。ここでは、タイムスタンプの例に示すように日付でフィルター処理を行い、ログを格納するファイル名を指定する必要があります。

    url は API を呼び出して、Microsoft.Insights のログを取得します。 出力は指定したファイルに保存されます。

    az rest --url "https://management.azure.com/providers/Microsoft.Insights/eventtypes/management/values?api-version=2015-04-01&$filter=eventTimestamp ge '2021-09-10T20:00:00Z'" > output.txt
    
  4. 出力ファイルで、elevateAccess を検索します。

    ログは次のようになります。ここでは、アクションが発生したタイミングを示すタイムスタンプと、呼び出したユーザーが表示されています。

      "submissionTimestamp": "2021-08-27T15:42:00.1527942Z",
      "subscriptionId": "",
      "tenantId": "33333333-3333-3333-3333-333333333333"
    },
    {
      "authorization": {
        "action": "Microsoft.Authorization/elevateAccess/action",
        "scope": "/providers/Microsoft.Authorization"
      },
      "caller": "user@example.com",
      "category": {
        "localizedValue": "Administrative",
        "value": "Administrative"
      },
    
  5. この記事の冒頭に記載されている手順に従って、昇格されたアクセス権を削除します。

アクセスをグループに委任して、Azure CLI を使用してアクセス権の昇格ログを表示する

アクセス権の昇格ログを定期的に取得できるようにしたい場合は、アクセス権をグループに委任してから、Azure CLI を使用します。

  1. [Azure Active Directory]>[グループ] を開きます。

  2. 新しいセキュリティ グループを作成し、グループ オブジェクト ID をメモします。

  3. この記事の冒頭に記載されている手順に従って、アクセス権を昇格します。

  4. az login コマンドを使用して、全体管理者としてサインインします。

  5. az role assignment create コマンドを使用して、Microsoft/Insights にあるディレクトリ レベルでのみログを読み取りできるグループに Reader ロールを割り当てます。

    az role assignment create --assignee "{groupId}" --role "Reader" --scope "/providers/Microsoft.Insights"
    
  6. 事前に作成したグループに、ログの閲覧を行うユーザーを追加します。

  7. この記事の冒頭に記載されている手順に従って、昇格されたアクセス権を削除します。

これで、グループ内のユーザーが定期的に az rest コマンドを実行して、アクセス権の昇格ログを表示できるようになりました。

az rest --url "https://management.azure.com/providers/Microsoft.Insights/eventtypes/management/values?api-version=2015-04-01&$filter=eventTimestamp ge '2021-09-10T20:00:00Z'" > output.txt

次のステップ