パスワードベースの認証で Azure サービス プリンシパルを使う

サービス プリンシパルを作成する際に、サービス プリンシパルが使用するサインイン認証の種類を選択します。 Azure サービス プリンシパルで使用できる認証には、パスワードベースの認証証明書ベースの認証の 2 種類があります。 パスワードベースの認証はサービス プリンシパルについて学習するときに使用がお勧めしますが、アプリケーションには証明書ベースの認証の使用をお勧めします。

チュートリアルのこの手順では、サービス プリンシパル パスワードを使用して Azure リソースにアクセスする方法について説明します。

パスワードが含まれるサービス プリンシパルの作成

az ad sp create-for-rbac の既定の動作では、ランダムのパスワードと共にサービス プリンシパルが作成されます。

az ad sp create-for-rbac --name myServicePrincipalName \
                         --role reader \
                         --scopes /subscriptions/mySubscriptionId/resourceGroups/myResourceGroupName

出力コンソール:

{
  "appId": "myServicePrincipalId",
  "displayName": "myServicePrincipalName",
  "password": "myServicePrincipalPassword",
  "tenant": "myOrganizationTenantId"
}

パスワード認証によるサービス プリンシパルの出力には、password キーが含まれます。 この値は必ずコピーしてください。 取得することはできません。 パスワードを紛失した場合は、サービス プリンシパルの資格情報をリセットします。

パスワードを使用してサービス プリンシパルでサインインする

サインインして、新しいサービス プリンシパルの資格情報とアクセス許可をテストします。 サービス プリンシパルでサインインするには、appId ("サービス プリンシパル ID"、"ユーザー名" や "担当者" とも呼ばれます)、tenantpassword が必要です。 次に例を示します。

az login --service-principal \
         --username myServicePrincipalId \
         --password myServicePrincipalPassword \
         --tenant myOrganizationTenantID

appId--tenant がわからない場合、az ad sp list コマンドを使用して取得します。

spID=$(az ad sp list --display-name myServicePrincipalName --query "[].{spID:appId}" --output tsv)
tenantID=$(az ad sp list --display-name myServicePrincipalName --query "[].{tenant:appOwnerOrganizationId}" --output tsv)
echo "Using appId $spID in tenant $tenantID"

az login --service-principal \
         --username $spID \
         --password {paste your password here} \
         --tenant $tenantID

2 要素認証を必要とする組織でテストしている場合、エラー メッセージ "...対話式の認証が必要です..." が表示されます。 代わりに、証明書またはマネージド ID を使用してください。

重要

az login を対話形式で使用しているときに、コンソールにパスワードが表示されないようにするには、bashread -s コマンドを使います。

read -sp "Azure password: " AZ_PASS && echo && az login --service-principal -u <app-id> -p $AZ_PASS --tenant <tenant>

PowerShell で、Get-Credential コマンドレットを使用します。

$AzCred = Get-Credential -UserName <app-id>
az login --service-principal -u $AzCred.UserName -p $AzCred.GetNetworkCredential().Password --tenant <tenant>

次のステップ

パスワードを使用してサービス プリンシパルを操作する方法がわかったので、次のステップに進み、証明書ベースの認証でサービス プリンシパルを使用する方法を理解してください。