GitHub Actions で Azure Key Vault を使用して Azure Spring Apps を認証する
Note
Basic、Standard、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-cli-2020-01-19-04-39-02
など) をコピーします。 [アクセス ポリシー] メニューを開き、次に [アクセス ポリシーの追加] リンクを選択します。 [テンプレート] に Secret Management
を選択し、[プリンシパル] を選択します。 [プリンシパル]/[選択] 入力ボックスに資格情報の名前を貼り付けます。
[アクセス ポリシーの追加] ダイアログで [追加] ボタンを選択し、[保存] を選択します。
完全なスコープの 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 文字列を貼り付けることができます。
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