Share via


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