Azure PowerShell コンテキスト オブジェクト

Azure PowerShell は、Azure PowerShell コンテキスト オブジェクト (Azure コンテキスト) を使用して、サブスクリプションと認証情報を保持します。 複数のサブスクリプションがある場合は、Azure コンテキストを使用して、Azure PowerShell コマンドレットを実行するサブスクリプションを選択できます。 Azure コンテキストは、複数の PowerShell セッションにわたってサインイン情報を格納し、バックグラウンド タスクを実行するためにも使用されます。

この記事では、サブスクリプションやアカウントの管理ではなく、Azure コンテキストの管理について説明します。 ユーザー、サブスクリプション、テナント、またはその他のアカウント情報を管理する方法については、Microsoft Entra ID のドキュメントを参照してください。 コンテキストを使用してバックグラウンドまたは並列タスクを実行する方法については、Azure コンテキストに慣れた後に「PowerShell ジョブで Azure PowerShell コマンドレットを実行する」を参照してください。

Azure コンテキスト オブジェクトの概要

Azure コンテキストは、コマンドの実行対象のアクティブなサブスクリプションと、Azure クラウドに接続するために必要な認証情報を表す PowerShell オブジェクトです。 Azure コンテキストを使用すると、サブスクリプションを切り替えるたびに、Azure PowerShell でアカウントを再認証する必要はありません。 Azure コンテキストは、次のもので構成されます。

  • Connect-AzAccount を使用して Azure にサインインするために使用されたアカウント。 Azure コンテキストでは、アカウントの観点からは、ユーザー、アプリケーション ID、およびサービス プリンシパルが同じものとして扱われます。
  • テナントに関連付けられたアクティブなサブスクリプション (Azure リソースを作成および実行するための Microsoft とのサービス契約)。 多くの場合、テナントは、ドキュメント内で、または Active Directory を使用する場合に組織と呼ばれます。
  • トークン キャッシュ (Azure クラウドへアクセスするための格納された認証トークン) への参照。 このトークンの格納場所と保持期間はコンテキスト自動保存設定によって決定されます。

これらの用語の詳細については、Microsoft Entra の用語に関する記事を参照してください。 Azure コンテキストによって使用される認証トークンは、永続セッションの一部である他の保存されたトークンと同じです。

Connect-AzAccount を使用してサインインすると、既定のサブスクリプションに対して少なくとも 1 つの Azure コンテキストが作成されます。 Connect-AzAccount によって返されるオブジェクトは、残りの PowerShell セッションで使用される既定の Azure コンテキストです。

Azure コンテキストを取得する

Get-AzContext コマンドレットを使用すると、使用可能な Azure コンテキストが取得されます。 ListAvailable パラメーターを使用して使用可能なコンテキストを一覧表示します。

Get-AzContext -ListAvailable

または、名前を指定してコンテキストを取得します。

Get-AzContext -Name 'mycontext'

コンテキスト名は、関連付けられたサブスクリプションの名前とは異なる場合があります。

重要

使用可能な Azure コンテキストが必ずしも使用可能なサブスクリプションであるとは限りません。 Azure コンテキストはローカルに保存された情報のみを表します。 Get-AzSubscription コマンドレットを使用すると、サブスクリプションを取得できます。

サブスクリプション情報から新しい Azure コンテキストを作成する

Set-AzContext コマンドレットを使用して、新しい Azure コンテキストの作成と、アクティブ コンテキストとしての設定の両方を行います。 新しい Azure コンテキストを作成する最も簡単な方法は、既存のサブスクリプション情報を使用することです。 このコマンドレットは、Get-AzSubscription からの出力オブジェクトをパイプ値として受け取り、新しい Azure コンテキストを作成します。

Get-AzSubscription -SubscriptionName 'MySubscriptionName' |
  Set-AzContext -Name 'MyContextName'

または、サブスクリプション名または ID と必要に応じてテナント ID を指定します。

Set-AzContext -Name 'MyContextName' -Subscription 'MySubscriptionName' -Tenant '00000000-0000-0000-0000-000000000000'

Name パラメーターを省略すると、サブスクリプションの名前と ID がサブスクリプション名 (サブスクリプション ID) の形式でコンテキスト名として使用されます。

アクティブな Azure コンテキストを変更する

アクティブな Azure コンテキストを変更するには、Set-AzContextSelect-AzContext の両方を使用できます。 新しい Azure コンテキストの作成に関するセクションで説明されているように、Set-AzContext を使用すると、サブスクリプションに対して新しい Azure コンテキストが作成され (存在しない場合)、アクティブ コンテキストがそれに切り替えられます。

Select-AzContext は、既存の Azure コンテキストでのみ使用されることが想定されており、Set-AzContext -Context の使用と同様に機能しますが、パイプ処理で使用するように設計されています。

Set-AzContext -Context $(Get-AzContext -Name 'mycontext') # Set a context with an inline Azure context object
Get-AzContext -Name 'mycontext' | Select-AzContext # Set a context with a piped Azure context object

Azure PowerShell の他の多くのアカウントおよびコンテキスト管理コマンドと同様に、Set-AzContextSelect-AzContext では Scope パラメーターがサポートされており、コンテキストがアクティブになる期間を制御できます。 Scope では、既定値を変更せずに、1 つのセッションのアクティブなコンテキストを変更できます。

Get-AzContext -Name 'mycontext' | Select-AzContext -Scope Process

PowerShell セッション全体のコンテキストを切り替えないようにするために、AzContext パラメーターのある Azure PowerShell コマンドは、指定のコンテキストに対して実行できます。

$context = Get-AzContext -Name "mycontext"
New-AzVM -Name ExampleVM -AzContext $context

Azure PowerShell コマンドレットでのコンテキストのもう 1 つの主な用途は、バックグラウンド コマンドを実行することです。 Azure PowerShell を使用した PowerShell ジョブの実行の詳細については、PowerShell ジョブでの Azure PowerShell コマンドレットの実行に関する記事を参照してください。

PowerShell セッション間での Azure コンテキストの保存

既定では、Azure コンテキストは、PowerShell セッション間で使用するために保存されます。 この動作は、次の方法で変更します。

  • Connect-AzAccount-Scope Process を使用してサインインします。

    Connect-AzAccount -Scope Process
    

    このサインインの一部として返される Azure コンテキストは、現在のセッションで "のみ" 有効であり、Azure PowerShell コンテキストの自動保存の設定に関係なく、自動的には保存されません。

  • Disable-AzContextAutosave コマンドレットを使用して、Azure PowerShell のコンテキストの自動保存を無効にします。 コンテキストの自動保存を無効にしても、格納されているトークンはクリアされません。 保存されている Azure コンテキスト情報をクリアする方法については、Azure コンテキストと資格情報の削除に関する記事を参照してください。

  • Azure コンテキストの自動保存を明示的に有効にするには、Enable-AzContextAutosave コマンドレットを使用します。 自動保存が有効になっていると、ユーザーのコンテキストは、後の PowerShell セッション用にローカルに保存されます。

  • 今後の PowerShell セッションで使用するために Save-AzContext を使用してコンテキストを手動で保存します。保存したコンテキストは、Import-AzContext を使用して読み込むことができます。

    Save-AzContext -Path current-context.json # Save the current context
    Save-AzContext -Profile $profileObject -Path other-context.json # Save a context object
    Import-AzContext -Path other-context.json # Load the context from a file and set it to the current context
    

警告

コンテキストの自動保存を無効にしても、保存されていた保存済みのコンテキスト情報はクリアされません。 保存されている情報を削除するには、Clear-AzContext コマンドレットを使用します。 保存済みコンテキストの削除の詳細については、コンテキストと資格情報の削除に関する記事を参照してください。

これらの各コマンドでは、Scope パラメーターがサポートされています。これは、Process の値を取り、現在実行中のプロセスのみに適用することができます。 たとえば、新しく作成されたコンテキストが PowerShell セッションを終了した後に保存されないようにするには、次のようにします。

Disable-AzContextAutosave -Scope Process
$context2 = Set-AzContext -Subscription 'sub-id' -Tenant 'other-tenant'

コンテキスト情報とトークンは、Windows 上の $env:USERPROFILE\.Azure ディレクトリおよび他のプラットフォーム上の $HOME/.Azure に格納されます。 サブスクリプション ID やテナント ID などの機密情報が、保存された情報、ログ、または保存されたコンテキストにより、まだ公開されている場合があります。 保存されている情報をクリアする方法については、コンテキストと資格情報の削除に関するセクションを参照してください。

Azure コンテキストと保存されている資格情報の削除

Azure コンテキストと資格情報をクリアするには、次のようにします。

  • Disconnect-AzAccount を使用してアカウントからサインアウトします。 アカウントまたはコンテキストにより、任意のアカウントからサインアウトできます。

    Disconnect-AzAccount # Disconnect active account
    Disconnect-AzAccount -Username 'user@contoso.com' # Disconnect by account name
    
    Disconnect-AzAccount -ContextName 'subscription2' # Disconnect by context name
    Disconnect-AzAccount -AzureContext $contextObject # Disconnect using context object information
    

    切断すると、保存されている認証トークンが必ず削除され、切断されたユーザーまたはコンテキストに関連付けられている保存済みのコンテキストがクリアされます。

  • Clear-AzContext を使用します。 このコマンドレットを使用すると、保存されているコンテキストと認証トークンが常に削除され、ユーザーがサインアウトされます。

  • Remove-AzContext を使用してコンテキストを削除します。

    Remove-AzContext -Name 'mycontext' # Remove by name
    Get-AzContext -Name 'mycontext' | Remove-AzContext # Remove by piping Azure context object
    

    アクティブなコンテキストを削除すると、Azure から切断され、Connect-AzAccount で再認証する必要があります。

関連項目