🚥
サービスプリンシパルでaz loginする際の注意点
問題事象
下記記事を参考にGithub ActionsでAzure Container RegistryにContainerイメージのビルド&プッシュを試そうとしたのですが、なぜか動きませんでした。
原因を追ってみると、そもそもサービスプリンシパルの情報で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