演習 - ワークロード ID を作成する

完了

ワークフローを使用して玩具会社の Web サイトをデプロイする前に、ワークフローが Azure に対して認証されるようにする必要があります。 この演習では、以下のことを行います。

  • Web サイトのリソース グループを作成します。
  • Microsoft Entra ワークロード ID を作成し、リソース グループへのアクセス権を付与します。
  • ワークロード ID を使用するようにワークフローを準備するために、GitHub シークレットを作成します。

この演習では、Microsoft Entra ディレクトリでアプリケーションを作成するためのアクセス許可が必要です。 現在の Azure アカウントでこの要件を満たすことができない場合は、無料試用版を入手し、新しい Azure サブスクリプションとテナントを作成できます。

重要

このモジュールの最後の演習には、重要なクリーンアップ ステップが含まれています。 クリーンアップ手順は、このモジュールを完了しなかった場合でも必ず行ってください。

Azure へのサインイン

Azure でワークロード ID を操作するには、Visual Studio Code ターミナルから Azure アカウントにサインインします。 Azure CLI ツールがインストールされていることを確認してください。

  1. [ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。

    ターミナル ウィンドウの右側に示されているように、通常、既定のシェルは pwsh です。

    シェル オプションとして pwsh が表示されている Visual Studio Code のターミナル ウィンドウのスクリーンショット。

  2. [起動プロファイル] ドロップダウン リストを選択し、[Azure Cloud Shell (Bash)]を選択します。

    Visual Studio Code のターミナル ウィンドウのスクリーンショット。ターミナル シェルのドロップダウン リストと Azure Cloud Shell (Bash) メニュー項目が表示されます。

    新しいシェルが開きます。

Azure CLI を使用して Azure にサインインする

  1. Visual Studio Code のターミナルで次のコマンドを実行して、Azure にサインインします。

    az login
    
  2. 開いたブラウザーで、Azure アカウントにサインインします。

このテンプレートを Azure にデプロイするには、Visual Studio Code ターミナルから Azure アカウントにサインインします。 Azure PowerShell をインストールしたことを確認し、サンドボックスのアクティブ化に使用したのと同じアカウントにサインインします。

  1. [ターミナル] メニューで、[新しいターミナル] を選択します。 通常、ターミナル ウィンドウは画面の下半分に表示されます。

    ターミナル ウィンドウの右側に示されているように、通常、既定のシェルは pwsh です。

    シェル オプションとして pwsh が表示されている Visual Studio Code のターミナル ウィンドウのスクリーンショット。

  2. [起動プロファイル] ドロップダウン リストを選択し、[Azure Cloud Shell (PowerShell)]を選択します。

    Visual Studio Code のターミナル ウィンドウのスクリーンショット。ターミナル シェルのドロップダウン リストと Azure Cloud Shell (PowerShell) メニュー項目が表示されます。

    新しいシェルが開きます。

Azure PowerShell を使用して Azure にサインインする

  1. Visual Studio Code のターミナルで次のコマンドを実行して、Azure にサインインします。

    Connect-AzAccount
    
  2. 開いたブラウザーで、Azure アカウントにサインインします。

ワークロード ID を作成する

ヒント

このモジュールでは、ワークフローで使用するワークロード ID を作成します。 「ワークロード ID を使用して Azure デプロイ ワークフローを認証する」モジュールでは、ワークロード ID のさらに詳しい説明 (そのしくみや、作成、ロールの割り当て、管理を行う方法など) があります。

ワークロード ID を作成するため、Azure CLI コマンドは jq を使って JSON 出力からのデータを解析します。 jq をインストールしていない場合は、Azure Cloud Shell で Bash を使って、ワークロード ID、リソース グループ、ロールの割り当てを作成し、GitHub シークレットを準備できます。

  1. 次のコードを実行して、GitHub ユーザー名とリポジトリ名の変数を定義します。 mygithubuser は必ず、前の演習ユニットでメモした GitHub ユーザー名に置き換えてください。

    githubOrganizationName='mygithubuser'
    githubRepositoryName='toy-website-workflow'
    
  2. 次のコードを実行して、ワークロード 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\"]}"
    
  1. 次のコードを実行して、GitHub ユーザー名とリポジトリ名の変数を定義します。 mygithubuser は必ず、前の演習ユニットでメモした GitHub ユーザー名に置き換えてください。

    $githubOrganizationName = 'mygithubuser'
    $githubRepositoryName = 'toy-website-workflow'
    
  2. 次のコードを実行して、ワークロード 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 にいくつかのシークレットを作成します。

  1. ブラウザーで GitHub リポジトリに移動します。

  2. [設定]>[シークレットと変数]>[アクション] の順に選択します。

  3. [New repository secret](新しいリポジトリ シークレット) を選択します。

    GitHub インターフェイスの [Secrets]\(シークレット\) ページのスクリーンショット。[Create repository secret]\(リポジトリ シークレットの作成\) ボタンが強調表示されています。

  4. シークレットに AZURE_CLIENT_ID という名前を付けます。

  5. [値] フィールドに、ターミナル出力の最初の行の GUID を貼り付けます。 値には、AZURE_CLIENT_ID、コロン、スペースを含めないでください。

  6. [Add secret](シークレットの追加) を選択します。

    [New Secret]\(新しいシークレット\) ページが表示されている GitHub インターフェイスのスクリーンショット。名前と値が入力され、[Add Secret]\(シークレットの追加\) ボタンが強調表示されています。

  7. このプロセスを繰り返して AZURE_TENANT_IDAZURE_SUBSCRIPTION_ID のシークレットを作成します。値は、ターミナル出力の対応するフィールドからコピーします。

  8. シークレットの一覧に現在 3 つのシークレットが表示されていることを確認します。

    シークレットの一覧を示す GitHub インターフェイスのスクリーンショット。