2020.12.10

Azure ADとAKSの統合をAzure Cloud Shellから実行すると失敗する話

文:

カテゴリ

タグ

CONTENTS

この記事をシェア:

Facebook Twitter LINE

Azure AKS(Azure Kubernetes Service)を統合することによりセキュアなクラスタ環境を構築することができますが、Azure Cloud Shellで実行した際に予期せぬエラーが発生したので、その解決法を残しておこうと思います。

ADとAKSの統合手順

今回はAKSクラスタの作成手順は省きます。
また、AKSとADの統合はMicrosoft公式の以下の手順に則り実行していきます。
https://docs.microsoft.com/ja-jp/azure/aks/azure-ad-integration-cli

AKSと統合するために必要なサーバーアプリケーションコンポーネントを作成します。
※今回はAKSクラスタ名を「myakscluster」とします。

$ serverApplicationId=$(az ad app create \
    --display-name "${aksname}Server" \
    --identifier-uris "https://${aksname}Server" \
    --query appId -o tsv)

作成したサーバーアプリケーションコンポーネント更新しグループメンバーシップを要求します。

$ az ad app update --id $serverApplicationId --set groupMembershipClaims=All

次にAzureプラットフォーム内でユーザを認証するために使用するサービスプリンシパルを作成します。コマンド実行後、作成されたサービスプリンシパルの情報が表示されます。

$ az ad sp create --id $serverApplicationId

サービス プリンシパルのシークレットを取得し、AKSクラスタデプロイ時に使用するための変数として「serverApplicationSecret」に割り当てます。

$ serverApplicationSecret=$(az ad sp credential reset \
    --name $serverApplicationId \
    --credential-description "AKSPassword" \
    --query password -o tsv)

AKSとAzure ADを統合にするにあたり、作成したサービスプリンシパルに以下のアクセス許可を付与します。

$ az ad app permission add \
    --id $serverApplicationId \
    --api 00000003-0000-0000-c000-000000000000 \
    --api-permissions e1fe6dd8-ba31-4d61-89e7-88639da4683d=Scope 06da0dbc-49e2-44d2-8312-53f166ab848a=Scope 7ab1d382-f21e-4acd-a863-ba3e13f7da61=Role

前の手順で割り当てたアクセス許可をサーバー アプリケーションコンポーネントに付与します。

$ az ad app permission grant --id $serverApplicationId --api 00000003-0000-0000-c000-000000000000

そして管理者の同意を別途必要とする可能性のある情報を Azure AD アプリケーションが要求するためのアクセス許可を追加し、サーバーアプリケーションコンポーネント設定は完了!のはずですが、、、

$ az ad app permission admin-consent --id  $serverApplicationId
CLIInternalError: The command failed with an unexpected error. Here is the traceback:
400 Client Error: Bad Request for url: http://localhost:50342/oauth2/token

エラーが返ってきますね、、、、、

原因

ここまでの手順で何が問題だったのか、何かしら操作に不備があったのか調査しましたが原因究明できず、、
そこでMicrosoftサポートに問い合わせたところ思わぬ結果が返ってきました。

「現時点で Azure Cloud Shell を利用した場合に、該当コマンドが、“400 Client Error: Bad Request” により失敗する問題が発生していることを確認いたしました。」

$ az ad app permission admin-consent --id  $serverApplicationId

おおおおお、、、、

解決法

今回の原因はAzure Cloud Shellを使用してしまったことが原因とのことなので、ローカルPCにAzure CLIをインストールしサブスクリプション認証を通してPowerShellから実行すれば問題ないとのことでした。。。

AzureCLIをローカルPCにインストールする手順は以下を参考にさせていただきました。

実際に以下の参考資料をもとに実行し、再度統合手順を実施したところ、問題なく設定することができました!

今回の件について多少めんどくさい&不満点をあげるとすれば
 ・PowerShellでの実行なので統合手順のコマンドは「$変数=文字列」に変更しなければいけない
 ・そもそも公式ドキュメントで取り上げといてほしいな、、、という

ともかく不思議な問題点ですが、無事解決することができました。

PS. AzureのKubernetesサービスからもADとの統合が設定できますが、こちらも問題なく設定できました。。。

文:

カテゴリ

タグ

今解決したいDXの
お困りごとなんですか?

DXの知識、導入事例を知りたい DXの知識、導入事例を知りたい セミナーに参加する

今取り組むべき事業のDX推進や、本当に活用できるコンテナ製品の導入プランをご紹介しています。お気軽に無料ウェビナーにご参加ください。

何から手をつけていいか分からない 何から手をつけていいか分からない サービスソリューションをみる

DX推進に取り組みたいが詳しい人材がいない。
まずどこから始めればいいのか、どういう方法があるのかイメージが掴め切れていない。

自社の具体的な導入を検討している 自社の具体的な導入を検討している 各種お問い合わせへ

コンテナ製品のご提案や人材育成支援も行います。事業のDX推進でお困りの方は、こちらからお問い合わせください。