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 を使用して削除できます。

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

アクセス権限を昇格する

Azure portal

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

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

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

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

  2. Azure Active Directory を開きます。

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

    Azure Active Directory のプロパティの [プロパティ] 選択 - スクリーンショット

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

    Azure リソースのアクセス管理 - スクリーンショット

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

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

    注意

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

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

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

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

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

    サブスクリプション ロール割り当てとルート スコープ - スクリーンショット

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

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

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

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

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

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

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

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

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

    ルート スコープのロールの割り当てを削除する

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

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

    注意

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

Azure PowerShell

注意

Azure を操作するには、Azure 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

前提条件

次のバージョンを使用する必要があります。

  • ロール割り当てを一覧表示および削除するには 2015-07-01 以降
  • アクセス権を昇格するには 2016-07-01 以降
  • 拒否の割り当てを一覧表示するには 2018-07-01-preview 以降

詳細については、Azure RBAC REST API の 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. 後述のセクションの手順を実行して、昇格したアクセス権限を削除します。

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

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

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

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

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

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

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

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

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

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

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

    GET https://management.azure.com/providers/Microsoft.Authorization/roleDefinitions?api-version=2022-04-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=2022-04-01&$filter=principalId+eq+'{objectid}'
    

    注意

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

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

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

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

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

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

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

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

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

    Assigns the caller to User Access Administrator role

    監視のディレクトリ アクティビティ ログを示すスクリーンショット。

  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

次のステップ