演習 - デプロイのためにサービス プリンシパルを承認する
前の演習では、Web サイトのデプロイ パイプライン用のサービス プリンシパルを作成し、そのキーを使用してサインインできるかテストしました。 これで、サービス プリンシパルに Azure 環境へのアクセス権を付与する準備ができました。 この演習では、サービス プリンシパルのロールの割り当てを作成し、サービス プリンシパルを使用して Bicep ファイルをデプロイします。
このプロセスでは、次のことを行います。
- 自分のユーザー アカウントを使用してサインインします。
- 自社の Web サイトのリソース グループを作成します。
- ロールの割り当てを作成して、サービス プリンシパルがリソース グループにリソースをデプロイできるようにします。
- サービス プリンシパルとしてサインインし、自社の Web サイト リソースを作成する Bicep ファイルをデプロイします。
- デプロイを検証する。
- リソース グループとサービス プリンシパルをクリーンアップします。
ユーザー アカウントを使用してサインインする
前の演習では、サービス プリンシパルを使用してサインインし、その後、サインアウトしました。この演習では、次の手順を実行できるようにするために、自分のユーザー アカウントを使用して再びサインインする必要があります。
Visual Studio Code の Azure Cloud Shell (bash) ターミナルで、次のコマンドを実行して Azure にサインインします。
az login
開いたブラウザーで、Azure アカウントにサインインします。
Visual Studio Code の Azure Cloud Shell (PowerShell) ターミナルで、次のコマンドを実行して Azure にサインインします。
Connect-AzAccount
開いたブラウザーで、Azure アカウントにサインインします。
リソース グループを作成する
次に、玩具会社の Web サイト リソースを格納するリソース グループを作成します。
Visual Studio Code ターミナルで、この Azure CLI コマンドを実行してリソース グループを作成します。
az group create --name ToyWebsite --location eastus
前のコマンドの JSON 出力を確認します。
id
という名前のプロパティが含まれています。これは、リソース グループの ID です。 これを安全な場所にコピーします。 これは後ほど使用します。
Visual Studio Code ターミナルで、この Azure PowerShell コマンドを実行してリソース グループを作成します。
New-AzResourceGroup -Name ToyWebsite -Location eastus
前のコマンドの出力を確認します。
ResourceId
という名前のプロパティが含まれています。これは、リソース グループの ID です。 これを安全な場所にコピーします。 これは後ほど使用します。
役割の割り当ての作成
Web サイトのデプロイ パイプラインでは、次の詳細を使用してロールの割り当てを作成します。
- 担当者: 前の演習で作成したサービス プリンシパル。
- ロール: 共同作成者組み込みロール。
- スコープ: 前の手順で作成したリソース グループ。
Visual Studio Code ターミナルで、次の Azure CLI コマンドを実行してロールの割り当てを作成します。 プレースホルダーは、先ほどコピーした値に置き換えてください。
az role assignment create \
--assignee APPLICATION_ID \
--role Contributor \
--scope RESOURCE_GROUP_ID \
--description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."
Visual Studio Code ターミナルで、次の Azure CLI コマンドを実行してロールの割り当てを作成します。 プレースホルダーは、先ほどコピーした値に置き換えてください。
New-AzRoleAssignment `
-ApplicationId APPLICATION_ID `
-RoleDefinitionName Contributor `
-Scope RESOURCE_GROUP_ID `
-Description "The deployment pipeline for the company's website needs to be able to create resources within the resource group."
Bicep ファイルを作成する
Web サイトのリソースをデプロイする Bicep ファイルを前に作成しました。 ここでは、このファイルを保存して、サービス プリンシパルを使用してそれをテストできるようにします。
main.bicep という名前の新しいファイルを作成します。
main.bicep ファイルに次の内容を追加します。 すぐにテンプレートをデプロイします。
@description('The Azure region into which the resources should be deployed.') param location string = resourceGroup().location @description('The name of the App Service app.') param appServiceAppName string = 'toywebsite${uniqueString(resourceGroup().id)}' @description('The name of the App Service plan SKU.') param appServicePlanSkuName string = 'F1' var appServicePlanName = 'toy-website-plan' var applicationInsightsInstanceName = 'toy-website-insights' resource appServicePlan 'Microsoft.Web/serverFarms@2020-06-01' = { name: appServicePlanName location: location sku: { name: appServicePlanSkuName } } resource applicationInsightsInstance 'Microsoft.Insights/components@2018-05-01-preview' = { name: applicationInsightsInstanceName location: location kind: 'web' properties: { Application_Type: 'web' } } resource appServiceApp 'Microsoft.Web/sites@2020-06-01' = { name: appServiceAppName location: location properties: { serverFarmId: appServicePlan.id httpsOnly: true siteConfig: { appSettings: [ { name: 'APPINSIGHTS_INSTRUMENTATIONKEY' value: applicationInsightsInstance.properties.InstrumentationKey } { name: 'APPLICATIONINSIGHTS_CONNECTION_STRING' value: applicationInsightsInstance.properties.ConnectionString } ] } } }
変更内容をファイルに保存します。 [ファイル]>[名前を付けて保存] を選択するか、Windows で Ctrl+S (macOS では ⌘+S) を選択できます。 ファイルを保存した場所を忘れないようにしてください。 たとえば、保存場所として、scripts フォルダーを作成することをお勧めします。
サービス プリンシパルを使用して Bicep ファイルをデプロイする
現在、デプロイ パイプラインがないため、Bicep ファイルをデプロイするためのパイプラインの動作をシミュレートします。
サービス プリンシパルの資格情報を使用して、Visual Studio Code ターミナルで次の Azure CLI コマンドを実行してサインインします。 プレースホルダーは、前の演習でコピーした値に置き換えてください。
az login --service-principal \ --username APPLICATION_ID \ --password SERVICE_PRINCIPAL_KEY \ --tenant TENANT_ID
次の Azure CLI コマンドを実行して Bicep ファイルをデプロイします。
az deployment group create \ --resource-group ToyWebsite \ --template-file main.bicep
デプロイの完了には 1、2 分かかる可能性があります。その後、デプロイが成功したことがわかります。
Visual Studio Code ターミナルで、次の Azure PowerShell コマンドを実行します。これにより、サービス プリンシパルの資格情報の入力を求める安全なプロンプトが表示されます。 ユーザー名とパスワードについては、前の演習のサービス プリンシパルのアプリケーション ID とキーをそれぞれ使用します。
$credential = Get-Credential
サービス プリンシパルの資格情報を使用して、Visual Studio Code ターミナルで次の Azure PowerShell コマンドを実行してサインインします。
TENANT_ID
プレースホルダーは、先ほどコピーした値に置き換えてください。Connect-AzAccount -ServicePrincipal ` -Credential $credential ` -Tenant TENANT_ID
次の Azure PowerShell コマンドを実行して Bicep ファイルをデプロイします。
New-AzResourceGroupDeployment -ResourceGroupName ToyWebsite -TemplateFile main.bicep
デプロイの完了には 1、2 分かかる可能性があります。その後、デプロイが成功したことがわかります。
デプロイを検証する
Azure portal を使用して、デプロイしたリソースを調べ、デプロイの結果を調べます。
Azure ポータルにアクセスします。
左側のペインで、[リソース グループ] を選択します。
[ToyWebsite] を選択します。
[デプロイ] を選んで、デプロイが成功したことを確認します。
Failure-Anomalies-Alert-Rule-Deployment という名前のデプロイが表示される場合があります。 このデプロイは、Application Insights によって自動的に作成されます。
main デプロイを選んで、どのようなリソースがデプロイされたのかを確認し、次に [デプロイの詳細] を展開します。
この場合、App Service プラン、アプリ、Application Insights インスタンスが一覧表示されます。
このデプロイに関して異常な点は何もないことに注目してください。 サービス プリンシパルによって開始された場合でも、他の Bicep デプロイと同様になります。
リソース グループとサービス プリンシパルをクリーンアップする
サービス プリンシパルとロールの割り当てを正しく作成し、Bicep ファイルを使用して Web サイトのリソースをデプロイしました。 次に、作成したリソースを削除します。
次のコマンドを使用して、サービス プリンシパルのアカウントからサインアウトします。
az logout
次のコマンドを実行して、自分のユーザー アカウントを使用して Azure に再びサインインします。
az login
開いたブラウザーで、Azure アカウントにサインインします。
次の Azure CLI コマンドを実行して、リソース グループ、その内容、ロールの割り当てを削除します。
az group delete --name ToyWebsite
確認メッセージが表示されたら、
y
と入力します。次のコマンドを実行して、サービス プリンシパルを削除します。
APPLICATION_ID
プレースホルダーは、前の演習でコピーしたアプリケーション ID に置き換えてください。az ad sp delete --id APPLICATION_ID
次のコマンドを使用して、サービス プリンシパルのアカウントからサインアウトします。
Logout-AzAccount
次のコマンドを実行して、自分のユーザー アカウントを使用して Azure に再びサインインします。
Connect-AzAccount
開いたブラウザーで、Azure アカウントにサインインします。
次の Azure PowerShell コマンドを実行して、リソース グループ、その内容、ロールの割り当てを削除します。
Remove-AzResourceGroup -Name ToyWebsite
確認メッセージが表示されたら、
y
と入力します。次のコマンドを実行して、サービス プリンシパルを削除します。
APPLICATION_ID
プレースホルダーは、前の演習でコピーしたアプリケーション ID に置き換えてください。Remove-AzADServicePrincipal -ApplicationId APPLICATION_ID
確認メッセージが表示されたら、
y
と入力します。