この記事では、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 クラスターをデプロイする」を参照してください。