私の要件は単純です。非対話モードでシェルスクリプトを使用してAzureにログインしたいのですが、 "az login -u username -p password"コマンドで次のエラーが発生します。
Get Token request returned http error: 400 and server response: {"error":"invalid_grant","error_description":"AADSTS70002: Error validating credentials. : SAML token is invalid. : The element with ID 'xxxxxx' was either unsigned or the signature was invalid.
一部のサイトから、サービスプリンシパルを作成するように言われました。さて、私の質問は、サービスプリンシパルとは何ですか。また、シェルスクリプトからコマンド(アプリゲートウェイなどのさまざまなリソースを作成するため)を実行できるようにサービスプリンシパルを作成するにはどうすればよいですか。
公式ドキュメント を参照してください。
Azureサービスプリンシパルは、ユーザーが作成したアプリ、サービス、自動化ツールが特定のAzureリソースにアクセスするために使用するセキュリティIDです。これは、特定の役割と、リソースにアクセスするための厳格に制御された権限を持つ「ユーザーID」(ログインとパスワードまたは証明書)と考えてください。一般的なユーザーIDとは異なり、特定のことを実行できれば十分です。管理タスクを実行するために必要な最小限のアクセス許可レベルのみを付与すると、セキュリティが向上します。
Azure CLi 2.0で新しいサービスプリンシパル(sp)を作成する場合。 Azure ADユーザーでログインできます。次に以下のコマンドを実行します。
az ad sp create-for-rbac --name {appId} --password "{strong password}"
以下のような結果:
{
"appId": "a487e0c1-82af-47d9-9a0b-af184eb87646d",
"displayName": "MyDemoWebApp",
"name": "http://MyDemoWebApp",
"password": {strong password},
"tenant": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
}
appId
はログインユーザー、password
はログインパスワードです。
Spが作成されたら、Contributor
ロールも付与する必要があります。その後、Azureリソースを管理できます。
az role assignment create --assignee <objectID> --role Contributor
これで、次のコマンドで非対話モードでログインできます。
az login --service-principal -u <appid> --password {password-or-path-to-cert} --tenant {tenant}
ここに行く: ポータルを使用して、リソースにアクセスできるAzure Active Directoryアプリケーションとサービスプリンシパルを作成する 。
リソースへのアクセスまたはリソースの変更が必要なアプリケーションがある場合は、Azure Active Directory(AD)アプリケーションをセットアップし、それに必要なアクセス許可を割り当てる必要があります。次の理由により、このアプローチは、自分の資格情報でアプリを実行するよりも望ましい方法です。
- 自分の権限とは異なる権限をアプリIDに割り当てることができます。通常、これらの権限は、アプリが実行する必要のあるものに限定されます。
- 責任が変わっても、アプリの資格情報を変更する必要はありません。
- 無人スクリプトを実行するときに、証明書を使用して認証を自動化できます。
サービスプリンシパルは、Azure ADでユーザーの偽装として機能します。参照- https://sanganakauthority.blogspot.com/2019/04/how-to-create-service-principal-or-app.html
これを使用すると、REST APIを使用して、Azureに対してあらゆるタイプの管理タスクを実行できます。これにより、ポップアップで資格情報を提供する必要がなくなり、REST API。