演習 - ワークロード ID を作成する
ワークフローを使用して玩具会社の Web サイトをデプロイする前に、ワークフローが Azure に対して認証されるようにする必要があります。 この演習では、以下のことを行います。
- Web サイトのリソース グループを作成します。
- Microsoft Entra ワークロード ID を作成し、リソース グループへのアクセス権を付与します。
- ワークロード ID を使用するようにワークフローを準備するために、GitHub シークレットを作成します。
この演習では、Microsoft Entra ディレクトリでアプリケーションを作成するためのアクセス許可が必要です。 現在の Azure アカウントでこの要件を満たすことができない場合は、無料試用版を入手し、新しい Azure サブスクリプションとテナントを作成できます。
重要
このモジュールの最後の演習には、重要なクリーンアップ ステップが含まれています。 クリーンアップ手順は、このモジュールを完了しなかった場合でも必ず行ってください。
Azure へのサインイン
Azure でワークロード ID を操作するには、Visual Studio Code ターミナルから Azure アカウントにサインインします。 Azure CLI ツールがインストールされていることを確認してください。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に示されているように、通常、既定のシェルは pwsh です。
[起動プロファイル] ドロップダウン リストを選択し、[Azure Cloud Shell (Bash)]を選択します。
新しいシェルが開きます。
Azure CLI を使用して Azure にサインインする
Visual Studio Code のターミナルで次のコマンドを実行して、Azure にサインインします。
az login
開いたブラウザーで、Azure アカウントにサインインします。
このテンプレートを Azure にデプロイするには、Visual Studio Code ターミナルから Azure アカウントにサインインします。 Azure PowerShell をインストールしたことを確認し、サンドボックスのアクティブ化に使用したのと同じアカウントにサインインします。
[ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。
ターミナル ウィンドウの右側に示されているように、通常、既定のシェルは pwsh です。
[起動プロファイル] ドロップダウン リストを選択し、[Azure Cloud Shell (PowerShell)]を選択します。
新しいシェルが開きます。
Azure PowerShell を使用して Azure にサインインする
Visual Studio Code のターミナルで次のコマンドを実行して、Azure にサインインします。
Connect-AzAccount
開いたブラウザーで、Azure アカウントにサインインします。
ワークロード ID を作成する
ヒント
このモジュールでは、ワークフローで使用するワークロード ID を作成します。 「ワークロード ID を使用して Azure デプロイ ワークフローを認証する」モジュールでは、ワークロード ID のさらに詳しい説明 (そのしくみや、作成、ロールの割り当て、管理を行う方法など) があります。
ワークロード ID を作成するため、Azure CLI コマンドは jq
を使って JSON 出力からのデータを解析します。 jq
をインストールしていない場合は、Azure Cloud Shell で Bash を使って、ワークロード ID、リソース グループ、ロールの割り当てを作成し、GitHub シークレットを準備できます。
次のコードを実行して、GitHub ユーザー名とリポジトリ名の変数を定義します。
mygithubuser
は必ず、前の演習ユニットでメモした GitHub ユーザー名に置き換えてください。githubOrganizationName='mygithubuser' githubRepositoryName='toy-website-workflow'
次のコードを実行して、ワークロード ID を作成し、GitHub リポジトリに関連付けます。
applicationRegistrationDetails=$(az ad app create --display-name 'toy-website-workflow') applicationRegistrationObjectId=$(echo $applicationRegistrationDetails | jq -r '.id') applicationRegistrationAppId=$(echo $applicationRegistrationDetails | jq -r '.appId') az ad app federated-credential create \ --id $applicationRegistrationObjectId \ --parameters "{\"name\":\"toy-website-workflow\",\"issuer\":\"https://token.actions.githubusercontent.com\",\"subject\":\"repo:${githubOrganizationName}/${githubRepositoryName}:ref:refs/heads/main\",\"audiences\":[\"api://AzureADTokenExchange\"]}"
次のコードを実行して、GitHub ユーザー名とリポジトリ名の変数を定義します。
mygithubuser
は必ず、前の演習ユニットでメモした GitHub ユーザー名に置き換えてください。$githubOrganizationName = 'mygithubuser' $githubRepositoryName = 'toy-website-workflow'
次のコードを実行して、ワークロード ID を作成し、GitHub リポジトリに関連付けます。
$applicationRegistration = New-AzADApplication -DisplayName 'toy-website-workflow' New-AzADAppFederatedCredential ` -Name 'toy-website-workflow' ` -ApplicationObjectId $applicationRegistration.Id ` -Issuer 'https://token.actions.githubusercontent.com' ` -Audience 'api://AzureADTokenExchange' ` -Subject "repo:$($githubOrganizationName)/$($githubRepositoryName):ref:refs/heads/main"
Azure でリソース グループを作成してワークロード ID へのアクセス権を付与する
新しいリソース グループを作成し、それにワークロード ID へのアクセス権を付与するには、Visual Studio Code ターミナルで次の Azure CLI コマンドを実行します。
resourceGroupResourceId=$(az group create --name ToyWebsite --location westus3 --query id --output tsv)
az ad sp create --id $applicationRegistrationObjectId
az role assignment create \
--assignee $applicationRegistrationAppId \
--role Contributor \
--scope $resourceGroupResourceId
リソース グループを作成し、ワークロード ID へのアクセス権をそれに付与するには、Visual Studio Code ターミナルで次の Azure PowerShell コマンドを実行します。
$resourceGroup = New-AzResourceGroup -Name ToyWebsite -Location westus3
New-AzADServicePrincipal -AppId $applicationRegistration.AppId
New-AzRoleAssignment `
-ApplicationId $($applicationRegistration.AppId) `
-RoleDefinitionName Contributor `
-Scope $resourceGroup.ResourceId
GitHub シークレットを準備する
次のコードを実行して、GitHub シークレットとして作成する必要がある各値を表示します。
echo "AZURE_CLIENT_ID: $applicationRegistrationAppId"
echo "AZURE_TENANT_ID: $(az account show --query tenantId --output tsv)"
echo "AZURE_SUBSCRIPTION_ID: $(az account show --query id --output tsv)"
$azureContext = Get-AzContext
Write-Host "AZURE_CLIENT_ID: $($applicationRegistration.AppId)"
Write-Host "AZURE_TENANT_ID: $($azureContext.Tenant.Id)"
Write-Host "AZURE_SUBSCRIPTION_ID: $($azureContext.Subscription.Id)"
GitHub シークレットを作成する
リソース グループとワークロード ID を作成しました。 次に、ワークロード ID を使用してワークフローがサインインできるように、GitHub Actions にいくつかのシークレットを作成します。
ブラウザーで GitHub リポジトリに移動します。
[設定]>[シークレットと変数]>[アクション] の順に選択します。
[New repository secret](新しいリポジトリ シークレット) を選択します。
シークレットに AZURE_CLIENT_ID という名前を付けます。
[値] フィールドに、ターミナル出力の最初の行の GUID を貼り付けます。 値には、
AZURE_CLIENT_ID
、コロン、スペースを含めないでください。[Add secret](シークレットの追加) を選択します。
このプロセスを繰り返して AZURE_TENANT_ID と AZURE_SUBSCRIPTION_ID のシークレットを作成します。値は、ターミナル出力の対応するフィールドからコピーします。
シークレットの一覧に現在 3 つのシークレットが表示されていることを確認します。