次の方法で共有


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

この記事では、Azure Red Hat OpenShift クラスターの Microsoft Entra ID サービス プリンシパルの資格情報をローテーションする方法について説明します。 Azure CLI コマンドは Bash 構文を使用し、Azure Cloud Shell で実行できます。

[前提条件]

  • 最新の更新プログラムが適用された既存の Azure Red Hat OpenShift クラスター。
  • サービス プリンシパルの資格情報をローテーションするには、Azure CLI バージョン 2.24.0 が必要です。 Azure CLI のバージョンを確認するには、 az --versionを実行します。 アップグレードする必要がある場合は、 Azure CLI のインストール方法に関するページを 参照してください。

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

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

どちらの方法でも、クラスターの名前とリソース グループの変数を作成します。 <clusterName><resourceGroupName>をクラスターの値に置き換えます。

CLUSTER=<clusterName>
RESOURCEGROUP=<resourceGroupName>

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

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

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

az aro update --refresh-credentials --name $CLUSTER --resource-group $RESOURCEGROUP

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

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

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

SP_ID=$(az aro show --name $CLUSTER --resource-group $RESOURCEGROUP \
    --query servicePrincipalProfile.clientId --output tsv)

SP_ID変数を使用して、サービス プリンシパルの新しいセキュリティで保護されたシークレット (--client-secret) を生成します。 新しいセキュリティで保護されたシークレット SP_SECRET 環境変数として格納します。

SP_SECRET=$(az ad sp credential reset --id $SP_ID --query password --output tsv)

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

az aro update --client-id $SP_ID --client-secret $SP_SECRET \
    --name $CLUSTER --resource-group $RESOURCEGROUP

トラブルシューティング

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

サービス プリンシパルの資格情報には 1 年の有効期限が設定されており、その期間内にローテーションする必要があります。 資格情報の有効期限が切れている場合は、次のエラーが発生する可能性があります。

Failed to refresh the Token for request to <resourceGroupName> 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.

サービス プリンシパル資格情報の有効期限を確認するには、次のコマンドを実行します。 日付は ISO 8601 UTC 形式で出力されます。

SP_ID=$(az aro show --name $CLUSTER --resource-group $RESOURCEGROUP \
    --query servicePrincipalProfile.clientId --output tsv)
az ad app credential list --id $SP_ID --query "[].endDateTime" --output tsv

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

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

サービス プリンシパルの資格情報の自動ローテーションaz aro update コマンドを使用すると、次のエラーが発生します。

Cluster application contains a client secret with an empty description.
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 コマンド

Azure CLI コマンドの詳細については、 az aro ドキュメントを参照してください。 コマンド ラインで az aro update --help などのコマンドを使用することもできます。

リソースをクリーンアップする

完了したら、変数をクリアして機密データを削除する必要があります。

SP_SECRET=""
SP_ID=""
CLUSTER=""
RESOURCEGROUP=""

サービス プリンシパルの詳細については、「サービス プリンシパルを 作成して使用して Azure Red Hat OpenShift クラスターをデプロイする」を参照してください。