演習 - サービス プリンシパルとキーを作成する
重要
この演習を行うには、独自の Azure サブスクリプションが必要です。また、料金が発生することがあります。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
玩具会社の Web サイトのデプロイ パイプラインを作成する前に、サービス プリンシパルを作成し、それに Azure 環境へのアクセス権を付与する必要があります。 この演習では、デプロイ パイプラインに使用するサービス プリンシパルを作成します。
このプロセスでは、次のことを行います。
- アプリケーション、サービス プリンシパル、キーを 1 回の操作で作成します。
- キーを安全に処理します。
- サービス プリンシパルが動作することを、その資格情報を使用して Azure にサインインすることで確認します。
この演習では、Microsoft Entra ディレクトリでアプリケーションとサービス プリンシパルを作成するためのアクセス許可が必要です。 現在の Azure アカウントでこの要件を満たすことができない場合は、無料試用版を入手し、新しい Azure サブスクリプションとテナントを作成できます。 また、この演習をスキップすることもできます。
Azure へのサインイン
Azure でサービス プリンシパルを使用するには、Visual Studio Code ターミナルから Azure アカウントにサインインする必要があります。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に示されているように、通常、既定のシェルは pwsh です。
[起動プロファイル] ドロップダウン リストを選択し、[Azure Cloud Shell (Bash)] を選択します。
新しいシェルが開きます。
Azure CLI を使用して Azure にサインインする
Visual Studio Code ターミナルで、次のコマンドを実行して Azure にサインインします。
az login
開いたブラウザーで、Azure アカウントにサインインします。
このテンプレートを Azure にデプロイするには、Visual Studio Code ターミナルから Azure アカウントにサインインします。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に示されているように、通常、既定のシェルは pwsh です。
[起動プロファイル] ドロップダウン リストを選択し、[Azure Cloud Shell (PowerShell)] を選択します。
新しいシェルが開きます。
Azure PowerShell を使用して Azure にサインインする
Visual Studio Code ターミナルで、次のコマンドを実行して Azure にサインインします。
Connect-AzAccount
開いたブラウザーで、Azure アカウントにサインインします。
サービス プリンシパルとキーを作成する
Visual Studio Code ターミナルで、この Azure CLI コマンドを実行してサービス プリンシパルを作成します。
az ad sp create-for-rbac --name ToyWebsitePipeline
Azure CLI に、別のアプリケーションが同じ表示名を持っているというエラーが表示される場合は、Microsoft Entra テナントを使用する他のユーザーが同じ名前のサービス プリンシパルを作成したことを意味します。
--name
値を他の一意な値に変更します。 残りの演習に取り組む方法には影響しません。前のコマンドの JSON 出力を確認します。 次のプロパティがあります。
appId
: サービス プリンシパルのアプリケーション ID。password
: サービス プリンシパルのキー。tenant
:Microsoft Entra テナント ID。
これらの値を安全な場所にコピーします。 後ほどこれらを使用します。
Visual Studio Code ターミナルで、これらの Azure PowerShell コマンドを実行してサービス プリンシパルを作成します。
$servicePrincipal = New-AzADServicePrincipal ` -DisplayName ToyWebsitePipeline
次のコマンドを実行して、サービス プリンシパルのキーを取得します。
$servicePrincipalKey = $servicePrincipal.PasswordCredentials.SecretText
次のコマンドを実行して、サービス プリンシパルのアプリケーション ID、キー、Microsoft Entra テナント ID を表示します。
Write-Output "Service principal application ID: $($servicePrincipal.AppId)" Write-Output "Service principal key: $servicePrincipalKey" Write-Output "Your Azure AD tenant ID: $((Get-AzContext).Tenant.Id)"
値を安全な場所にコピーします。 後ほどこれらを使用します。
警告
前述のコマンドの出力には、サービス プリンシパルのキーが含まれます。 これらのコマンドを実行する場所に注意してください。 たとえば、他のユーザーがそれらを表示できる可能性がある環境では実行しないでください。
サービス プリンシパルをテストする
サービス プリンシパルが作成されたので、資格情報を使用してサインインし、正常に作成されたことを確認できます。
サービス プリンシパルの資格情報を使用して、Visual Studio Code ターミナルでこの Azure CLI コマンドを実行してサインインします。 プレースホルダーは、前の手順でコピーした値に置き換えてください。
az login --service-principal \ --username APPLICATION_ID \ --password PASSWORD \ --tenant TENANT_ID \ --allow-no-subscriptions
--allow-no-subscriptions
引数を含めることに注意してください。 通常、az login
コマンドを実行すると、アクセスできる Azure サブスクリプションが Azure CLI によって検索されます。 サービス プリンシパルには、まだアクセス権が付与されていません。そのため、--allow-no-subscriptions
引数を使用して、Azure CLI がサブスクリプション一覧をチェックしてエラーを表示しないようにします。前のコマンドの出力が JSON オブジェクトであり、これに、サービス プリンシパルのアプリケーション ID を示す
user
プロパティが含まれていることを確認します。 この情報は、サービス プリンシパルが正常にサインインしたことを示します。次のコマンドを使用して、サービス プリンシパルのアカウントからサインアウトします。
az logout
Visual Studio Code ターミナルで、この Azure PowerShell コマンドを実行します。これにより、サービス プリンシパルの資格情報の入力を求める安全なプロンプトが表示されます。 ユーザー名とパスワードについては、前の手順のサービス プリンシパルのアプリケーション ID とキーをそれぞれ使用します。
$credential = Get-Credential
サービス プリンシパルの資格情報を使用して、Visual Studio Code ターミナルでこの Azure PowerShell コマンドを実行してサインインします。
Connect-AzAccount -ServicePrincipal ` -Credential $credential ` -Tenant TENANT_ID
前のコマンドの出力に、サービス プリンシパルのアプリケーション ID を示す
Account
プロパティと、空のSubscriptionName
値が含まれていることを確認します。 この情報は、サービス プリンシパルが正常にサインインしたことを示します。次のコマンドを使用して、サービス プリンシパルのアカウントからサインアウトします。
Logout-AzAccount
動作するサービス プリンシパルを用意できたので、これによる Azure 環境へのアクセスを承認する、次のステージに進むことができます。