Azure Red Hat OpenShift (ARO) クラスターのサービス プリンシパルの資格情報をローテーションする

この記事では、Azure Red Hat OpenShift クラスター (ARO) でサービス プリンシパルの資格情報をローテーションするために必要な詳細情報を提供します。

開始する前に

この記事では、最新の更新プログラムが適用されている既存の ARO クラスターがあることを前提としています。

ARO クラスター内でサービス プリンシパルの資格情報をローテーションするための最小 Azure CLI 要件は2.24.0 です。

Azure CLI のバージョンを確認するには以下を実行します。

# Azure CLI version
az --version

Azure CLI をインストールまたはアップグレードするには、「Azure CLI のインストール」に従ってください。

次の手順では、bash 構文を使用します。

サービス プリンシパルの資格情報のローテーション

重要

サービス プリンシパルの資格情報のローテーションは、クラスターの状態によっては 2 時間以上かかることがあります。

サービス プリンシパルの資格情報のローテーションには、次の 2 つの方法があります。

自動化されたサービス プリンシパルの資格情報のローテーション

重要

自動化されたサービス プリンシパルの資格情報のローテーションには、Azure CLI バージョン2.24.0 以上で ARO クラスターを作成する必要があります。

自動化されたサービス プリンシパルの資格情報のローテーションでは、サービス プリンシパルが存在するかどうかが確認され、新しいサービス プリンシパルがローテーションまたは作成されます。

次のコマンドを使用して、サービス プリンシパルの資格情報を自動的にローテーションします。

# Automatically rotate service principal credentials
az aro update --refresh-credentials --name MyManagedCluster --resource-group MyResourceGroup

ユーザー指定のクライアント ID とクライアントシークレットのサービス プリンシパルの資格情報のローテーション

次の手順に従って、ユーザー指定のクライアント ID とクライアントシークレットを使用してサービス プリンシパルの資格情報を手動でローテーションします。

サービス プリンシパル クライアント ID (--client-id) を取得し、これを SP_ID 環境変数として設定します。

# Retrieve the service principal clientId
SP_ID=$(az aro show --name MyManagedCluster --resource-group MyResourceGroup \
    --query servicePrincipalProfile.clientId -o tsv)

上記の SP_ID 変数を使用してサービス プリンシパルの新しいセキュア シークレット (--client-secret) を生成します。 SP_SECRET 環境変数として新しいセキュア シークレットを格納します。

# Generate a new secure secret for the service principal
SP_SECRET=$(az ad sp credential reset --id $SP_ID --query password -o tsv)

上記の環境変数を使用して、サービス プリンシパルの資格情報をローテーションします。

# Rotate service principal credentials
az aro update --client-id $SP_ID --client-secret $SP_SECRET \
    --name MyManagedCluster --resource-group MyResourceGroup

トラブルシューティング

サービス プリンシパルの有効期限日

サービス プリンシパルの資格情報には、1 年の有効期限が設定されており、指定された期間内にローテーションされる必要があります。

有効期限が過ぎると、次のエラーが発生する可能性があります。

Failed to refresh the Token for request to MyResourceGroup StatusCode=401
Original Error: Request failed. Status Code = '401'.
[with]
Response body: {"error":"invalid_client","error_description": The provided client secret keys are expired.
[or]
Response body: {"error":"invalid_client","error_description": Invalid client secret is provided.

サービス プリンシパルの資格情報の有効期限を確認するには、以下を実行します。

# Service principal expiry in ISO 8601 UTC format
SP_ID=$(az aro show --name MyManagedCluster --resource-group MyResourceGroup \
    --query servicePrincipalProfile.clientId -o tsv)
az ad app credential list --id $SP_ID --query "[].endDateTime" -o tsv

サービス プリンシパルの資格情報の有効期限が切れている場合、2 つの資格情報ローテーション方法のいずれかを使用して更新してください。

クラスター AAD アプリケーションには、説明が空のクライアント シークレットが含まれています

自動化されたサービス プリンシパルの資格情報のローテーションを使用すると、次のエラーが発生します。

$ az aro update --refresh-credentials --name MyManagedCluster --resource-group MyResourceGroup

Cluster AAD application contains a client secret with an empty description.
Please either manually remove the existing client secret and run `az aro update --refresh-credentials`,
or manually create a new client secret and run `az aro update --client-secret <ClientSecret>`.

クラスターが Azure CLI 2.24.0 以上を使用して作成されていません。 代わりにユーザー指定のクライアント ID とクライアントシークレットのサービス プリンシパルの資格情報のローテーションを使用してください。

Azure CLI ARO 更新プログラムのヘルプ

詳細については、Azure CLI ARO 更新プログラムのヘルプ コマンドを参照してください。

# Azure CLI ARO update help
az aro update -h