演習 - GitHub アクションのアクセス許可とシークレットを構成する

完了

このユニットでは、次のタスクを行います。

  • アプリが正しくデプロイされていることを確認する
  • GitHub から ACR および AKS にデプロイするためのアクセス許可を設定する
  • GitHub Actions によって使用される機密データを格納するためのシークレットを作成する

AKS へのデプロイを検証する

アプリが AKS にデプロイされると、コマンド シェルに次のようなメッセージが表示されます。

The eShop-Learn application has been deployed to "http://203.0.113.55" (IP: 203.0.113.55).

You can begin exploring these services (when ready):
- Centralized logging       : http://203.0.113.55/seq/#/events?autorefresh (See transient failures during startup)
- General application status: http://203.0.113.55/webstatus/ (See overall service status)
- Web SPA application       : http://203.0.113.55/

ヒント

これらの URL を再度表示するには、次のコマンドを実行します。

cat ~/clouddrive/aspnet-learn-temp/deployment-urls.txt

アプリがデプロイされている場合でも、オンラインになるまで数分かかることがあります。 次の手順に従って、アプリがデプロイされ、オンラインになっていることを確認します。

  1. コマンド シェルで General application status リンクを選択して、WebStatus 正常性チェック ダッシュボードを表示します。 結果のページには、デプロイ内の各マイクロサービスの状態が表示されます。 ページは 10 秒ごとに自動的に更新されます。

    [正常性チェック] ページ

    注意

    アプリの起動時に、最初はサーバーから HTTP 503 または 502 応答を受信することがあります。 約 1 分後に再試行してください。 Centralized logging URL で表示できる Seq ログは、他のエンドポイントより先に使用できます。

  2. すべてのサービスが正常な状態になったら、コマンド シェルで [Web SPA application](Web SPA アプリケーション) のリンクを選択して、eShopOnContainers Web アプリをテストします。 次のページが表示されます。

    eShop シングル ページ アプリ

  3. 購入を完了するには、次の手順を行います。

    1. 右上にある [LOGIN](ログイン) リンクを選択して、アプリにサインインします。 サインイン情報がページに表示されます。

    2. .NET BLUE HOODIE の画像を選択して、ショッピング カートに追加します。

    3. 右上にあるショッピング カート アイコンを選択します。

    4. [CHECKOUT](適用) ボタンを選択します。

    5. 10 USD の割引が適用されるコード「DISC-10」を [HAVE A DISCOUNT CODE?](割引コードをお持ちですか?) テキスト ボックスに入力して、[APPLY](適用) を選択します。

      割引コードのテキスト ボックスが表示された買い物かご

    6. [PLACE ORDER](注文する) を選択して購入を完了します。

アプリが AKS にデプロイされ、正常に動作していることを確認できました。 割引コード機能は、クーポン サービスによってサポートされています。 このモジュールでは、CI/CD パイプラインを構築して、クーポン サービスのビルドとデプロイを自動化します。

GitHub からデプロイするためのアクセス許可を設定する

GitHub Actions を使用して、コンテナー イメージを ACR に発行します。 GitHub Actions のランナーが Azure に接続できるようにアクセス許可を構成するには、次の手順を実行します。

  1. 次のコマンドを実行して、GitHub からのアクセスを許可する Azure Active Directory サービス プリンシパルを作成します。

    az ad sp create-for-rbac --sdk-auth --name http://eshop-learn-sp
    

    次のような出力が表示されます。

    Creating a role assignment under the scope of "/subscriptions/<SUBSCRIPTION-ID>"
    {
      "clientId": "<CLIENT-ID>",
      "clientSecret": "<CLIENT-SECRET>",
      "subscriptionId": "<SUBSCRIPTION-ID>",
      "tenantId": "<TENANT-ID>",
      "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
      "resourceManagerEndpointUrl": "https://management.azure.com/",
      "activeDirectoryGraphResourceId": "https://graph.windows.net/",
      "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
      "galleryEndpointUrl": "https://gallery.azure.com/",
      "managementEndpointUrl": "https://management.core.windows.net/"
    }
    
  2. コマンド シェルから JSON 出力をコピーします。 JSON の上のテキスト出力は含めないでください。 この JSON と資格情報は、次の手順の GitHub アクションで必要になります。

シークレットを作成する

コンテナー レジストリのサービス プリンシパルと資格情報は、機密情報です。 GitHub Actions のランナーは、ACR および AKS と対話するためにこの資格情報を必要とします。 ベスト プラクティスとして、機密情報は暗号化された "シークレット" として安全な場所に保存する必要があります。 シークレットはリポジトリ管理者が管理し、GitHub Actions のランナーによってアクセスできる必要があります。 次の手順を実行して、機密情報を環境変数としてリポジトリに安全に格納します。

  1. フォークした GitHub リポジトリで、[Settings](設定) > [Secrets](シークレット) にアクセスします。

  2. [New secret](適用) ボタンを選択します。

  3. AZURE_CREDENTIALS とコピーした JSON 出力を、[Name](名前)[Value](値) テキスト ボックスにそれぞれ入力します。

    この時点では、次のようになります。

    AZURE_CREDENTIALS 環境変数のシークレットのページ

  4. [Add secret](適用) ボタンを選択します。

  5. 4 つの追加シークレットを作成します。 次のコマンドを実行して、新しいシークレットの値を取得します。

    cat ~/clouddrive/aspnet-learn-temp/config.txt
    

    次のようにシークレットに名前を付け、テキストの出力で指定されている値を使用します。

    • IP_ADDRESS
    • REGISTRY_LOGIN_SERVER
    • REGISTRY_PASSWORD
    • REGISTRY_USERNAME

5 つのシークレットをすべて構成すると、次のページが表示されます。

3 つの GitHub シークレットを表示するページ

このユニットでは、アプリが正しく展開されたことを確認しました。 次に、Azure Active Directory サービス プリンシパルを作成し、関連する機密情報を GitHub シークレットとして保存しました。