🚥

サービスプリンシパルでaz loginする際の注意点

に公開

問題事象

下記記事を参考にGithub ActionsでAzure Container RegistryにContainerイメージのビルド&プッシュを試そうとしたのですが、なぜか動きませんでした。
https://learn.microsoft.com/ja-jp/azure/container-instances/container-instances-github-action

原因を追ってみると、そもそもサービスプリンシパルの情報でaz loginが出来ないことが分かりました。

サービスプリンシパルとは

ザックリいうと、人ではないアプリケーション(今回でいうとGithub Actions)がクラウドAPI(今回でいうと、Azure Container Registry)にアクセスするためのID&パスワードになります。

Azure CLIでは以下のコマンドで作成が可能です。

az ad sp create-for-rbac \
  --scope <リソース グループのリソース ID> \
  --role Contributor \
  --sdk-auth

作成すると、以下のようなJSON情報が出力されます。

{
  "clientId": "xxxx6ddc-xxxx-xxxx-xxx-ef78a99dxxxx",
  "clientSecret": "xxxx79dc-xxxx-xxxx-xxxx-aaaaaec5xxxx",
  "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
  "resourceManagerEndpointUrl": "https://management.azure.com/",
  "activeDirectoryGraphResourceId": "https://graph.windows.net/",
  "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
  "galleryEndpointUrl": "https://gallery.azure.com/",
  "managementEndpointUrl": "https://management.core.windows.net/"
}

この時のパスワード(clientSecret)は、サービスプリンシパル作成直後でしか取得できないので、無くさないようにきちんと保管しましょう。

対策

出力されたパスワード(clientSecret)に、オーバーバー(‾)が使われていたのですが、これをチルダ(~)に置換することで、az login出来るようになりました。
どうも、az ad sp create-for-rbacで本来出力されるはずのチルダ(~)が何故かオーバーバー(‾)に変換されて出力されるみたいです。

所感

初見ではわからないので、ハマる人が多い気がします。

ヘッドウォータース

Discussion