マネージドサービスID(MSI)を介してServiceFabricアプリケーションからKeyVaultにアクセスしたい。 Azure Portalで設定された仮想マシンスケールでMSIを有効にし、KeyVaultリソースへのアクセスを許可しました。これは、クラウドの魅力のように機能します。しかし、地元の開発環境に問題があります。
私が理解している限り、Key Vaultへのアクセスを許可し、AzureCLIでaz login
を実行できます。残念ながら、これはローカルのServiceFabricクラスターでアプリケーションを実行している場合は機能しません。これは、ローカルクラスターがNETWORKSERVICEアカウントで実行されているためだと思います。
MSIを使用してローカルクラスターからKeyVaultにアクセスするにはどうすればよいですか?
Microsoft.Azure.Services.AppAuthenticationライブラリ を使用してMSIを使用してトークンを取得し、Key Vaultを認証していると想定しています。これは、Azureで機能しています。その場合、ローカル開発環境でまったく同じコードを実行できます。ライブラリは、AzureでMSIを使用するように自動的に切り替わります。ドキュメントを見つけることができます ここ
注:MSIシナリオのローカル開発は、現在のユーザーで実行されるアプリケーションを開発する場合にはるかに簡単です。アプリサービス。このような場合、ローカル開発にAzure CLI/VisualStudioアカウントを使用できます。別のサービスプリンシパルを作成する必要はありません。ローカルクラスターはネットワークサービスアカウントで実行されるため、Azure CLI/VisualStudioはServiceFabricローカル開発では機能しません。
Service Fabricシナリオの場合は、次の手順に従ってください。
サービスプリンシパルを作成し、KeyVaultへのアクセスを許可します。 2つのオプションがあります。証明書はセキュリティが優れていますが、実行するのが少し難しくなります。
オプション1: 証明書を使用してサービスプリンシパルを作成する 。ネットワークサービスアカウント、またはファブリックをローカルで実行するために使用されるアカウントに証明書へのアクセスを許可してください。 詳細は参照 アクセスを許可する方法について。
OR
オプション2: パスワードを使用してサービスプリンシパルを作成する
「AzureServicesAuthConnectionString」という環境変数を作成します。 これを参照 サービスファブリックの環境変数の作成について。
証明書を使用する場合は、「AzureServicesAuthConnectionString」をに設定します
RunAs = App; AppId = {AppId}; TenantId = {TenantId}; CertificateThumbprint = {Thumbprint}; CertificateStoreLocation = {LocalMachine or CurrentUser}
パスワードを使用する場合は、「AzureServicesAuthConnectionString」を
RunAs = App; AppId = {AppId}; TenantId = {TenantId}; AppKey = {ClientSecret}
上記の手順が機能しない場合は、発生したエラーを投稿してください。
マネージドサービスIDは、Azureで実行されているリソースに重点を置いています。ローカル開発環境をサポートする方法がありません。
ありがとう、-Arturo