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
コマンドが許容されるソリューションです。 ただし、ロールとスコープがないと、新しいサービス プリンシパルはリソースにアクセスできません。 存在するだけです。
パラメーターを指定せずにサービス プリンシパルを作成する場合は、次の手順も実行します:
- システム割り当てパスワードを再度取得できないため、記録てください。 パスワードを紛失した場合は、「サービス プリンシパル資格情報のリセット」で説明されているように、az ad sp credential reset 使用してパスワードをリセットします。
- 「サービス プリンシパル ロールの管理」で説明されているように、az role assignment create 使用して、新しいサービス プリンシパルのロールの割り当てを設定。
Note
ご利用のアカウントにサービス プリンシパルを作成するためのアクセス許可がない場合は、az ad sp create-for-rbac
から "この操作を完了するのに十分な特権がありません" というエラー メッセージが返されます。 サービス プリンシパルを作成するには、Microsoft Entra 管理者に問い合わせてください。
ユーザー設定 [ユーザーはアプリケーションを登録できる] が [いいえ] に設定されている Microsoft Entra ID ディレクトリでは、次に示す Microsoft Entra ID 組み込みロール (アクション microsoft.directory/applications/createAsOwner
または microsoft.directory/applications/create
を含むもの) のいずれかのメンバーである必要があります。
Microsoft Entra ID ユーザー設定の詳細については、「アプリケーションを作成できるユーザーを制限する」を参照してください。
ロールとスコープを持つサービス プリンシパルを作成する
ベスト プラクティスとして、サービス プリンシパルを作成するときは、常に特定の --role
と --scopes
を割り当てます。 次の手順のようにします。
正しいロールを決定します。
ロールを決定するときは、常に最小特権の原則を使用します。 たとえば、サービス プリンシパルがリソース グループ内の Azure Storage にのみアクセスする必要がある場合は、サービス プリンシパルにサブスクリプションへ
contributor
アクセス許可を許可しないでください。 ストレージ BLOB データ共同作成者 のような専門なロール考えてみましょう。 Azure RBAC で使用可能なロールの完全な一覧については、「Azure 組み込みロール」を参照してください。スコープ パラメーターの値を取得します。
新しいサービス プリンシパルがアクセスする必要がある 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 のスコープについて」を参照してください。
サービス プリンシパルを作成します。
この例では、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 サービス プリンシパルを作成する方法がわかったので、次のステップに進み、パスワードベースの認証でサービス プリンシパルを使用する方法を理解してください。
Azure CLI