Azure CLI で Azure サービス プリンシパルを作成する

Azure リソースの安全確保するため、Azure サービスを使用する自動化されたツールのアクセス許可は、常に制限されている必要があります。 そのため、完全な特権を持つユーザーとしてアプリケーションをサインインさせるのではなく、Azure にはサービス プリンシパルが用意されています。 Azure サービス プリンシパルは、アプリケーション、ホストされるサービス、自動化ツールで使用するために作成される ID です。 この ID は、リソースへのアクセスに使用されます。

このチュートリアルでは、次の作業を行う方法について説明します。

  • サービス プリンシパルの作成
  • サービス プリンシパルとパスワードを使用してサインインする
  • サービス プリンシパルと証明書を使用してサインインする
  • サービス プリンシパルのロールを管理する
  • サービス プリンシパルを使用して Azure リソースを作成する
  • サービス プリンシパルの資格情報のリセット

前提条件

  • サブスクリプションでは、サービス プリンシパルを作成するには、 User Access Administrator または Role Based Access Control Administrator 以上のアクセス許可が必要です。 Azure ロールベースのアクセス制御 (Azure RBAC) で使用できるロールの一覧については、Azure の組み込みロール を参照してください。
  • Azure Cloud Shell で Bash 環境を使用します。 詳細については、「Azure Cloud Shell の Bash のクイックスタート」を参照してください。

  • CLI リファレンス コマンドをローカルで実行する場合、Azure CLI をインストールします。 Windows または macOS で実行している場合は、Docker コンテナーで Azure CLI を実行することを検討してください。 詳細については、「Docker コンテナーで Azure CLI を実行する方法」を参照してください。

    • ローカル インストールを使用する場合は、az login コマンドを使用して Azure CLI にサインインします。 認証プロセスを完了するには、ターミナルに表示される手順に従います。 その他のサインイン オプションについては、Azure CLI でのサインインに関するページを参照してください。

    • 初回使用時にインストールを求められたら、Azure CLI 拡張機能をインストールします。 拡張機能の詳細については、Azure CLI で拡張機能を使用する方法に関するページを参照してください。

    • az version を実行し、インストールされているバージョンおよび依存ライブラリを検索します。 最新バージョンにアップグレードするには、az upgrade を実行します。

サービス プリンシパルの作成

az ad sp create-for-rbac Azure CLI 参照コマンドを使用してサービス プリンシパルを作成します。 この例では、--name パラメーターを指定していないため、タイム スタンプを含む名前が自動的に作成されます。

az ad sp create-for-rbac

出力コンソール:

{
  "appId": "myAppId",
  "displayName": "myServicePrincipalName",
  "password": "myServicePrincipalPassword",
  "tenant": "myTentantId"
}

リソースの名前付け規則に従わず、後で新しいサービス プリンシパルのロールとスコープを作成する予定がある場合は、パラメーターのない az ad sp create-for-rbac コマンドが許容されるソリューションです。 ただし、ロールとスコープがないと、新しいサービス プリンシパルはリソースにアクセスできません。 存在するだけです。

パラメーターを指定せずにサービス プリンシパルを作成する場合は、次の手順も実行します:

ロールとスコープを持つサービス プリンシパルを作成する

ベスト プラクティスとして、サービス プリンシパルを作成するときは、常に特定の --role--scopes を割り当てます。 次の手順のようにします。

  1. 正しいロールを決定します。

    ロールを決定するときは、常に最小特権の原則を使用します。 たとえば、サービス プリンシパルがリソース グループ内の Azure Storage にのみアクセスする必要がある場合は、サービス プリンシパルにサブスクリプションへ contributor アクセス許可を許可しないでください。 ストレージ BLOB データ共同作成者 のような専門なロール考えてみましょう。 Azure RBAC で使用可能なロールの完全な一覧については、「Azure 組み込みロール」を参照してください。

  2. スコープ パラメーターの値を取得します。

    新しいサービス プリンシパルがアクセスする必要がある Azure リソースのリソース ID を見つけてコピーすることです。 この情報は通常、Azure portal の各リソースの [プロパティ] または [エンドポイント] ページにあります。 一般的な --scopes の例を次に示しますが、実際の形式と値については、リソース ID で確認してください

    Scope
    サブスクリプション /subscriptions/mySubscriptionID
    リソース グループ /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName
    仮想マシン /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/myVMname
    ストレージ アカウント ファイル サービス /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.Storage/storageAccounts/myStorageAccountName/fileServices/default
    Data Factory /subscriptions/mySubscriptionID/resourceGroups/myResourceGroupName/providers/Microsoft.DataFactory/factories/myDataFactoryName

    スコープの例の詳細については、「Azure RBAC のスコープについて」を参照してください。

  3. サービス プリンシパルを作成します。

    この例では、myServicePrincipalName という名前の新しいサービス プリンシパルが、リソース グループ RG1 のすべてのリソースに対する 閲覧者 アクセス許可を使用して作成されます。

    # Bash script
    az ad sp create-for-rbac --name myServicePrincipalName1 \
                             --role reader \
                             --scopes /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG1
    

    --scopes パラメーターは、スコープのスペース区切りのリストを受け入れます。 この例では、mySERVICEPrincipalName2 という名前 新しいサービス プリンシパルが、myRG1 リソース グループ内のすべてのリソースに対する 閲覧者 アクセス許可使用して作成されます。 このサービス プリンシパルには、myRG2 にある myVM閲覧者アクセス許可も付与されています。

    # Bash script
    az ad sp create-for-rbac --name myServicePrincipalName2 \
                             --role reader \
                             --scopes /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG2/providers/Microsoft.Compute/virtualMachines/myVM
    

新しいサービス プリンシパルに対するアクセス許可が少なすぎるか、または多すぎると判断した場合は、サービス プリンシパル ロールを管理 アクセス許可を変更します。

変数を使用してサービス プリンシパルを作成

変数を使用してサービス プリンシパルを作成することもできます。

# Bash script
let "randomIdentifier=$RANDOM*$RANDOM"
servicePrincipalName="msdocs-sp-$randomIdentifier"
roleName="azureRoleName"
subscriptionID=$(az account show --query id --output tsv)
# Verify the ID of the active subscription
echo "Using subscription ID $subscriptionID"
resourceGroup="myResourceGroupName"

echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup"
az ad sp create-for-rbac --name $servicePrincipalName \
                         --role $roleName \
                         --scopes /subscriptions/$subscriptionID/resourceGroups/$resourceGroup

サービス プリンシパルのプロパティの完全な一覧については、az ad sp list 使用し、「既存のサービス プリンシパルを取得する」を参照してください。

警告

az ad sp create-for-rbac コマンドを使用して Azure サービス プリンシパルを作成する場合、出力には、保護する必要がある資格情報が含まれます。 これらの資格情報をコードに含めないようにするか、資格情報をソース管理にチェックインしてください。 別の方法として、資格情報を使用する必要がないように、可能であればマネージド ID を使用することを検討してください。

次のステップ

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