次の方法で共有


GitHub Actions で Azure Key Vault を使用して Azure Spring Apps を認証する

Note

BasicStandard、および Enterprise プランは、2025 年 3 月中旬以降に非推奨になり、廃止期間は 3 年間になります。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の廃止のお知らせ」を参照してください。

Standard 従量課金と専用プランは、2024 年 9 月 30 日以降に非推奨になり、6 か月後に完全にシャットダウンされます。 Azure Container Apps に移行することをお勧めします。 詳細については、「Azure Spring Apps の Standard 従量課金および専用プランを Azure Container Apps に移行する」を参照してください。

この記事の適用対象: ✔️ Java ✔️ C#

この記事の適用対象: ✔️ Basic または Standard ✔️ Enterprise

この記事では、GitHub Actions を使用して Azure Spring Apps の CI/CD ワークフローでキー コンテナーを使用する方法について説明します。

キー コンテナーは、キーを安全に格納できる場所です。 エンタープライズ ユーザーは、管理対象のスコープ内にある CI/CD 環境の資格情報を保存する必要があります。 キー コンテナー内の資格情報を取得するキーは、リソース スコープに制限する必要があります。 これは、Azure スコープ全体ではなく、キー コンテナー スコープに対してのみアクセスできます。 これは、建物内のすべてのドアを開くことができるマスター キーではなく、頑丈な箱のみを開くことができるキーのようなものです。 キーを別のキーで取得する方法であり、CICD ワークフローで役立ちます。

資格情報を生成する

キー コンテナーにアクセスするキーを生成するには、ローカル コンピューター上で次のコマンドを実行します。

az ad sp create-for-rbac --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.KeyVault/vaults/<KEY_VAULT> --json-auth

--scopes パラメーターでスコープを指定すると、リソースへのキーのアクセスが制限されます。 これを使うと、頑丈な箱のみにアクセスできます。

結果:

{
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
    "resourceManagerEndpointUrl": "https://management.azure.com/",
    "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
    "galleryEndpointUrl": "https://gallery.azure.com/",
    "managementEndpointUrl": "https://management.core.windows.net/"
}

次に、GitHub リポジトリを設定して Azure で認証する方法の説明に従って、結果を GitHub のシークレットに保存します。

資格情報のアクセス ポリシーを追加する

上記で作成した資格情報を使うと、キー コンテナーに関する一般的な情報のみを取得できます。保存されているコンテンツは取得できません。 キー コンテナーに保存されているシークレットを取得するには、資格情報のアクセス ポリシーを設定する必要があります。

Azure portal の [Key Vault] ダッシュボードに移動し、[アクセス制御] メニューを選択して、[ロールの割り当て] タブを開きます。[種類] に対して [アプリ][スコープ] に対して This resource を選択します。 前の手順で作成した資格情報が表示されます。

[ロールの割り当て] タブが強調表示されている [アクセス制御] ページを示す Azure portal のスクリーンショット。

資格情報の名前 (azure-cli-2020-01-19-04-39-02 など) をコピーします。 [アクセス ポリシー] メニューを開き、次に [アクセス ポリシーの追加] リンクを選択します。 [テンプレート]Secret Management を選択し、[プリンシパル] を選択します。 [プリンシパル]/[選択] 入力ボックスに資格情報の名前を貼り付けます。

[プリンシパル] ウィンドウが開いている [アクセス ポリシーの追加] ページを示す Azure portal のスクリーンショット。

[アクセス ポリシーの追加] ダイアログで [追加] ボタンを選択し、[保存] を選択します。

完全なスコープの Azure 資格情報を生成する

これは、建物のすべてのドアを開くことができるマスター キーです。 この手順は前の手順と似ていますが、ここではスコープを変更してマスター キーを生成します。

az ad sp create-for-rbac --role contributor --scopes /subscriptions/<SUBSCRIPTION_ID> --json-auth

この場合も、結果は次のようになります。

{
    "clientId": "<GUID>",
    "clientSecret": "<GUID>",
    "subscriptionId": "<GUID>",
    "tenantId": "<GUID>",
    "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
    "resourceManagerEndpointUrl": "https://management.azure.com/",
    "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
    "galleryEndpointUrl": "https://gallery.azure.com/",
    "managementEndpointUrl": "https://management.core.windows.net/"
}

JSON 文字列全体をコピーします。 [Key Vault] ダッシュボードに戻ります。 [シークレット] メニューを開き、[生成/インポート] ボタンを選択します。 AZURE-CREDENTIALS-FOR-SPRING などのシークレット名を入力します。 JSON の資格情報文字列を [値] 入力ボックスに貼り付けます。 値の入力ボックスは、複数行のテキスト領域ではなく、1 行のテキスト フィールドであることがわかります。 ここには、完全な JSON 文字列を貼り付けることができます。

[シークレットの作成] ページを示す Azure portal のスクリーンショット。

GitHub Actions で資格情報を結合する

CICD パイプラインの実行時に使用する資格情報を設定します。

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}           # Strong box key you generated in the first step
    - uses: Azure/get-keyvault-secrets@v1.0
      with:
        keyvault: "<Your Key Vault Name>"
        secrets: "AZURE-CREDENTIALS-FOR-SPRING"           # Master key to open all doors in the building
      id: keyvaultaction
    - uses: azure/login@v1
      with:
        creds: ${{ steps.keyvaultaction.outputs.AZURE-CREDENTIALS-FOR-SPRING }}
    - name: Azure CLI script
      uses: azure/CLI@v1
      with:
        azcliversion: 2.0.75
        inlineScript: |
          az extension add --name spring             # Spring CLI commands from here
          az spring list

次のステップ