14

うっかりaz ad sp reset-credentials、AKS クラスターが実行されているサービス プリンシパルに対して誤って実行してしまいました。そして今、次のようなエラーが発生しています:

ロード バランサーの作成中にエラーが発生しました (再試行します): サービス test/admin-api の LB を取得中にエラーが発生しました: azure.BearerAuthorizer#WithAuthorization: https://management.azure.com/subscriptions/への要求のトークンを更新できませんでした**** /resourceGroups/MC_****/providers/Microsoft.Network/loadBalancers?api-version=2017-09-01: StatusCode=0 -- 元のエラー: adal: 更新要求が失敗しました。ステータス コード = '401'。応答本文: {"error":"invalid_client","error_description":"AADSTS70002: 資格情報の検証中にエラーが発生しました。AADSTS50012: 無効なクライアント シークレットが提供されました。\r\nトレース ID:****\r\n相関 ID:*** * \r\nタイムスタンプ: 2018-08-23 12:01:33Z","error_codes":[70002,50012],"timestamp":"2018-08-23 12:01:33Z","trace_id":" ****"、"correlation_id":

イメージ "****.azurecr.io/****:****" のプルに失敗しました: rpc エラー: コード = 不明な desc = デーモンからのエラー応答: https://****.azurecr を取得してください。 io/v2/****/manifests/****: 無許可: 認証が必要です

そこで、サービス プリンシパルが使用する元のクライアント シークレットを見つけて、それをキーとしてサービス プリンシパルに再度追加できるようにします。それが、クラスター全体を再作成する以外に考えられる唯一の解決策です。

何か案は?

4

4 に答える 4

0

やりたいことが面倒くさい。あなたの問題では、認証なしでイメージをプルすることはできません。

まず、コンテナー レジストリのサービス プリンシパルを見つける必要があります。Azure portal でこれを行い、レジストリ パネルに移動すると、次のようにサービス プリンシパルを見つけることができます。

ここに画像の説明を入力

または、Azure CLI コマンドを使用して、次のようにレジストリ ID を見つけることができます。

az acr show --resource-group groupName --name registryName --query id --output tsv

次に、コマンドを使用して、次のようにサービス プリンシパル ID を見つけます。

az role assignment list --scope registryID

必要なサービス プリンシパルを選択できます。

kubectl get secrets次に、コマンドを使用してすべてのシークレットをkubectl get secrets secretName -o yaml取得し、シークレットのトークンを取得します。次に、1 つずつ分析して、ユーザー名がサービス プリンシパル ID と同じかどうかを確認します。JWT などのツールを使用して、シークレット トークンを分析できます。結果は次のようになります。

ここに画像の説明を入力

ユーザー名が見つけたサービス プリンシパル ID と同じ場合、それが必要なシークレットです。このステップは面倒です。シークレットを 1 つずつ確認する必要があります。そうしないと、より優れた方法で確認できます。

ちなみに、サービスプリンシパルのパスワードは作成時に一度だけ見られるようです。アズールは二度とあなたを見せません。ただし、Kubernetes シークレットを作成すると、パスワードはそこに保存されます。

于 2018-08-24T03:08:45.903 に答える