Azure PowerShell を使用してサインインするSign in with Azure PowerShell

Azure PowerShell では、複数の認証方法がサポートされています。Azure PowerShell supports several authentication methods. Azure Cloud Shell を使用すると自動的にログインできるため、最も簡単に作業を開始できます。The easiest way to get started is with Azure Cloud Shell, which automatically logs you in. ローカル インストールを利用すると、ブラウザーから対話形式でサインインできます。With a local install, you can sign in interactively through your browser. 自動化のスクリプトを記述するとき、必要なアクセス許可でサービス プリンシパルを使用する方法が推奨されます。When writing scripts for automation, the recommended approach is to use a service principal with the necessary permissions. ユース ケースに対して可能な限りサインイン アクセス許可を制限することで、Azure リソースのセキュリティを維持できます。When you restrict sign-in permissions as much as possible for your use case, you help keep your Azure resources secure.

複数のサブスクリプションにアクセスできる場合、最初は、Azure から返された最初のサブスクリプションにサインインします。Initially, you're signed into the first subscription Azure returns if you have access to more than one subscription. 既定では、このサブスクリプションに対してコマンドが実行されます。Commands are run against this subscription by default. セッションのアクティブ サブスクリプションを変更するには、Set-AzContext コマンドレットを使用します。To change your active subscription for a session, use the Set-AzContext cmdlet. アクティブなサブスクリプションを変更し、同じシステム上のセッション間で永続化するには、Select-AzContext コマンドレットを使用します。To change your active subscription and have it persist between sessions on the same system, use the Select-AzContext cmdlet.

重要

サインインしたままであれば、資格情報は複数の PowerShell セッション間で共有されます。Your credentials are shared among multiple PowerShell sessions as long as you remain signed in. 詳細については、永続的な資格情報に関する記事を参照してください。For more information, see the article on Persistent Credentials.

対話操作でサインインするSign in interactively

対話形式でサインインするには、Connect-AzAccount コマンドレットを使用します。To sign in interactively, use the Connect-AzAccount cmdlet.

Connect-AzAccount

PowerShell バージョン6 以降から実行すると、このコマンドレットによりトークン文字列が提示されます。When run from PowerShell version 6 and higher, this cmdlet presents a token string. サインインするには、この文字列をコピーし、Web ブラウザーで microsoft.com/devicelogin に貼り付けます。To sign in, copy this string and paste it into microsoft.com/devicelogin in a web browser. Azure に接続するために PowerShell セッションが認証されます。Your PowerShell session will be authenticated to connect to Azure. UseDeviceAuthentication パラメーターを指定すると、Windows PowerShell で トークン文字列を受け取ることができます。You can specify the UseDeviceAuthentication parameter to receive a token string on Windows PowerShell.

重要

ユーザー名とパスワードの資格情報による承認は、Active Directory 認証の実装の変更とセキュリティ上の懸念から、Azure PowerShell では削除されました。Username/password credential authorization has been removed in Azure PowerShell due to changes in Active Directory authorization implementations and security concerns. 資格情報による承認を使用して自動化を行う場合は、代わりにサービス プリンシパルを作成してください。If you use credential authorization for automation purposes, instead create a service principal.

Get-AzContext コマンドレットを使用して、この記事の次の 2 つのセクションで使用する変数にテナント ID を格納します。Use the Get-AzContext cmdlet to store your tenant ID in a variable to be used in the next two sections of this article.

$tenantId = (Get-AzContext).Tenant.Id

サービス プリンシパルを使用してサインインする Sign in with a service principal

サービス プリンシパルは、非対話型の Azure アカウントです。Service principals are non-interactive Azure accounts. 他のユーザー アカウントと同様、そのアクセス許可は Azure Active Directory で管理されます。Like other user accounts, their permissions are managed with Azure Active Directory. サービス プリンシパルに、必要なアクセス許可のみを付与することで、自動化スクリプトのセキュリティが維持されます。By granting a service principal only the permissions it needs, your automation scripts stay secure.

Azure PowerShell で使用するサービス プリンシパルを作成する方法については、「Azure PowerShell で Azure サービス プリンシパルを作成する」を参照してください。To learn how to create a service principal for use with Azure PowerShell, see Create an Azure service principal with Azure PowerShell.

サービス プリンシパルを使用してサインインするには、Connect-AzAccount コマンドレットで -ServicePrincipal 引数を使用します。To sign in with a service principal, use the -ServicePrincipal argument with the Connect-AzAccount cmdlet. サービス プリンシパルのアプリケーション ID、サインイン資格情報、およびサービス プリンシパルに関連付けられたテナント ID も必要です。You'll also need the service principal's application ID, sign-in credentials, and the tenant ID associate with the service principal. サービス プリンシパルを使用してサインインする方法は、パスワードベースと証明書ベース認証用のどちらに構成されているかによって異なります。How you sign in with a service principal depends on whether it's configured for password-based or certificate-based authentication.

パスワードベースの認証Password-based authentication

このセクションの例で使用するサービス プリンシパルを作成します。Create a service principal to be used in the examples in this section. サービス プリンシパルの作成について詳しくは、Azure PowerShell での Azure サービス プリンシパルの作成に関する記事をご覧ください。For more information on creating service principals, see Create an Azure service principal with Azure PowerShell.

$sp = New-AzADServicePrincipal -DisplayName ServicePrincipalName

サービス プリンシパルの資格情報を適切なオブジェクトとして取得するには、Get-Credential コマンドレットを使用します。To get the service principal's credentials as the appropriate object, use the Get-Credential cmdlet. このコマンドレットによって、ユーザー名とパスワードの入力を求めるプロンプトが表示されます。This cmdlet presents a prompt for a username and password. ユーザー名にはサービス プリンシパルの applicationID を使用し、パスワードにはその secret をプレーンテキストに変換します。Use the service principal's applicationID for the username and convert its secret to plain text for the password.

# Retrieve the plain text password for use with `Get-Credential` in the next command.
$sp.secret | ConvertFrom-SecureString -AsPlainText

$pscredential = Get-Credential -UserName $sp.ApplicationId
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId

自動化のシナリオでは、サービス プリンシパルの applicationIdsecret から資格情報を作成する必要があります。For automation scenarios, you need to create credentials from a service principal's applicationId and secret:

$pscredential = New-Object -TypeName System.Management.Automation.PSCredential($sp.ApplicationId, $sp.Secret)
Connect-AzAccount -ServicePrincipal -Credential $pscredential -Tenant $tenantId

サービス プリンシパルへの接続を自動化する場合は、必ず適切なパスワード保存プラクティスを使用してください。Make sure that you use good password storage practices when automating service principal connections.

証明書ベースの認証Certificate-based authentication

証明書ベースの認証では、Azure PowerShell で、証明書の拇印に基づいてローカル証明書ストアから情報を取得できる必要があります。Certificate-based authentication requires that Azure PowerShell can retrieve information from a local certificate store based on a certificate thumbprint.

Connect-AzAccount -ApplicationId $appId -Tenant $tenantId -CertificateThumbprint <thumbprint>

登録されたアプリケーションではなくサービス プリンシパルを使用する場合は、-ServicePrincipal 引数を追加し、-ApplicationId パラメーターの値としてサービス プリンシパルのアプリケーション ID を指定します。When using a service principal instead of a registered application, add the -ServicePrincipal argument and provide the service principal's Application ID as the -ApplicationId parameter's value.

Connect-AzAccount -ServicePrincipal -ApplicationId $servicePrincipalId -Tenant $tenantId -CertificateThumbprint <thumbprint>

PowerShell 5.1 では、PKI モジュールを使用して、証明書ストアを管理および検査できます。In PowerShell 5.1, the certificate store can be managed and inspected with the PKI module. PowerShell Core 6.x 以降の場合は、プロセスがさらに複雑になります。For PowerShell Core 6.x and later, the process is more complicated. 次のスクリプトでは、PowerShell からアクセスできる証明書ストアに、既存の証明書をインポートする方法を示します。The following scripts show you how to import an existing certificate into the certificate store accessible by PowerShell.

PowerShell 5.1 で証明書をインポートするImport a certificate in PowerShell 5.1

# Import a PFX
$credentials = Get-Credential -Message "Provide PFX private key password"
Import-PfxCertificate -FilePath <path to certificate> -Password $credentials.Password -CertStoreLocation cert:\CurrentUser\My

PowerShell Core 6.x 以降で証明書をインポートするImport a certificate in PowerShell Core 6.x and later

# Import a PFX
$storeName = [System.Security.Cryptography.X509Certificates.StoreName]::My
$storeLocation = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser
$store = [System.Security.Cryptography.X509Certificates.X509Store]::new($storeName, $storeLocation)
$certPath = <path to certificate>
$credentials = Get-Credential -Message "Provide PFX private key password"
$flag = [System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable
$certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($certPath, $credentials.Password, $flag)
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite)
$store.Add($Certificate)
$store.Close()

マネージド ID を使用したサインインSign in using a managed identity

マネージド ID は Azure Active Directory の機能です。Managed identities are a feature of Azure Active Directory. マネージド ID は、Azure で実行されるリソースに割り当てられたサービス プリンシパルです。Managed identities are service principals assigned to resources that run in Azure. サインインにマネージド ID サービス プリンシパルを使用し、その他のリソースにアクセスするためにアプリ専用のアクセス トークンを取得できます。You can use a managed identity service principal for sign-in, and acquire an app-only access token to access other resources. マネージド ID は、Azure クラウドで実行されているリソースでのみ使用できます。Managed identities are only available on resources running in an Azure cloud.

この例では、ホスト環境のマネージド ID を使用して接続します。This example connects using the managed identity of the host environment. たとえば、割り当てられたマネージド サービス ID を使用して VirtualMachine で実行した場合、コードはその割り当てられた ID を使用してサインインできます。For example, if executed on a VirtualMachine with an assigned Managed Service Identity, this allows the code to sign in using that assigned identity.

 Connect-AzAccount -Identity

既定ではないテナントで、あるいはクラウド ソリューション プロバイダー (CSP) としてサインインするSign in with a non-default tenant or as a Cloud Solution Provider (CSP)

アカウントが複数のテナントに関連付けられている場合は、サインインで、接続時に -Tenant パラメーターを指定する必要があります。If your account is associated with more than one tenant, sign-in requires the -Tenant parameter to be specified when connecting. このパラメーターは、どのサインイン方法でも機能します。This parameter works with any sign-in method. ログイン時、テナントの Azure オブジェクト ID (テナント ID) またはテナントの完全修飾ドメイン名がこのパラメーター値になります。When logging in, this parameter value can either be the Azure object ID of the tenant (Tenant ID) or the fully qualified domain name of the tenant.

クラウド ソリューション プロバイダー (CSP) の場合、-Tenant 値はテナント ID にすることが必要となります。If you're a Cloud Solution Provider (CSP), the -Tenant value must be a tenant ID.

Connect-AzAccount -Tenant 'xxxx-xxxx-xxxx-xxxx'

別のクラウドにサインインするSign in to another Cloud

Azure クラウド サービスでは、リージョンのデータ処理の法律に準拠した環境を提供します。Azure cloud services offer environments compliant with regional data-handling laws. リージョン クラウド内のアカウントの場合は、サインインするときに -Environment 引数で環境を設定します。For accounts in a regional cloud, set the environment when you sign in with the -Environment argument. このパラメーターは、どのサインイン方法でも機能します。This parameter works with any sign-in method. たとえば、ご自身のアカウントが中国のクラウドにある場合は、次のように指定します。For example, if your account is in the China cloud:

Connect-AzAccount -Environment AzureChinaCloud

次のコマンドでは、使用可能な環境の一覧を取得します。The following command gets a list of available environments:

Get-AzEnvironment | Select-Object -Property Name