Azure Key Vaultを使用して接続文字列などにアクセスするASP.NET Coreアプリを含むDockerイメージがあります。イメージをローカルで実行すると、次のエラーが発生します。
Unhandled Exception: Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException: Parameters: Connection String: [No connection string specified], Resource: https://vault.Azure.net, Authority: https://login.windows.net/[guid]. Exception Message: Tried the following 3 methods to get an access token, but none of them worked.
Parameters: Connection String: [No connection string specified], Resource: https://vault.Azure.net, Authority: https://login.windows.net/[guid]. Exception Message: Tried to get token using Managed Service Identity. Unable to connect to the Managed Service Identity (MSI) endpoint. Please check that you are running on an Azure resource that has MSI setup.
Parameters: Connection String: [No connection string specified], Resource: https://vault.Azure.net, Authority: https://login.windows.net/[guid]. Exception Message: Tried to get token using Visual Studio. Access token could not be acquired. Environment variable LOCALAPPDATA not set.
Parameters: Connection String: [No connection string specified], Resource: https://vault.Azure.net, Authority: https://login.windows.net/[guid]. Exception Message: Tried to get token using Azure CLI. Access token could not be acquired. /bin/bash: az: No such file or directory
私が理解していることから、最初にアクセストークンをマネージドサービスIDとして取得しようとします。 Azureクラウドで実行されていないため、これを行うことはできず、ビジュアルスタジオ接続サービスを介して取得しようとします。これはDockerイメージにはないため、Azure CLIを使用しようとしますが、Dockerイメージにはインストールされません。
そのため、DockerイメージにAzure CLIをインストールする必要があります。 DockerfileのベースイメージがFROM Microsoft/dotnet:2.1-aspnetcore-runtime
であるとすると、これはどのように行われますか?
このベースイメージはアルパインOSイメージですか?アルパインでAzure CLIをインストールすることを検討する必要がありますか?
Azure CLIがインストールされている場合、Dockerfileソースコードに資格情報を保存したり、プレーンテキストでコンテナーに渡したりせずにKey Vaultにアクセスする方法はありますか?
より一般的には、ここでの最良のアプローチは何ですか。
問題の可能な解決策は、サービスプリンシパル([〜#〜] sp [〜#〜])を生成し、このサービスプリンシパルアクセスを許可することですキーコンテナー(RBACまたはIAM経由)。 [〜#〜] sp [〜#〜]の作成に関するMicrosoftドキュメント
[〜#〜] sp [〜#〜]の認証情報をclient-id
およびclient-secret
( ランダムな例 )次に、ボールトにログインしてシークレットを取得できます。
これは、Dockerコンテナーがrootユーザーとして実行されており、Key Vaultに登録されているユーザーが他のユーザー([email protected])であるためです。