Azure Key Vaultからシークレットを取得するための次のコードがあります。
public static async Task<string> GetToken(string authority, string resource, string scope)
{
var authContext = new AuthenticationContext(authority);
ClientCredential clientCred = new ClientCredential(...); //app id, app secret
AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);
if (result == null)
throw new InvalidOperationException("Failed to obtain the JWT token");
return result.AccessToken;
}
public static string GetSecret(string secretName)
{
KeyVaultClient keyVaultClient = new KeyVaultClient(GetToken);
try
{
return keyVaultClient.GetSecretAsync("my-key-vault-url", secretName).Result.Value;
}
catch(Exception ex)
{
return "Error";
}
}
私が得ているエラーは「アクセスが拒否されました」です。これは(と思う)ID、シークレット、ボールトのURLが問題ないことを意味しています。ただし、このエラーを修正するために別の方法でできることはわかりませんが、Azureポータルにシークレットの読み取りを妨げる設定がある可能性がありますか?
拒否されたアクセスを修正するには、Active Directoryのアクセス許可を構成する必要があります。 KeyVaultへのアクセスを許可します。
1。 PowerShellを使用して、次のコマンドを実行します。
Set-AzureRmKeyVaultAccessPolicy -VaultName 'XXXXXXX' -ServicePrincipalName XXXXX -PermissionsToKeys decrypt,sign,get,unwrapKey
2。 Azureポータルを使用する
質問では、Azure Portalの使用が指定されていました。KeyVaultアクセスのサービスプリンシパルの作成について説明しました here 。
具体的にはステップ2から:
Azure PortalでKey Vaultを開き、[設定]で[アクセスポリシー]ブレードを選択します。 [新規追加]をクリックし、[プリンシパルの選択]をクリックします。表示される前に、前の手順で作成した登録済みアプリの完全な名前を検索ボックスに入力する必要があります。 。
上部のドロップダウンから適切なテンプレートを選択するか、キー、シークレット、または証明書のアクセス許可を手動で選択できます。この段階では、承認済みアプリケーションについて心配する必要はありません。
重要:[OK]ボタンを押すと、新しいポリシーがリストに追加されますが、保存されません!続行する前に、必ず[保存]をクリックしてください。
何が起こっている-サービスプリンシパルには、上記の操作を実行する権限がありません。このスレッドを見てください。
Azure KeyVaultシークレットをプログラムで作成するときの「操作 'set' not allowed」エラーを修正するにはどうすればよいですか?
同じアプリケーションに、Vaultでsecretsの読み取りを許可する場合は、次を実行します。
Set-AzureRmKeyVaultAccessPolicy -VaultName 'yourKeyVaultName' -ServicePrincipalName ClientId -PermissionsToSecrets Get
Azure ClientIdにアプリケーションを登録すると、生成されます。
.NetコードAzure設定のKey Vaultへのアクセス:-App Service- 1-Enable-MSI(Managed service identity)-ON
Key Vault:1-Open Key Vault 2-Key Vaultリソースブレードからアクセスポリシーを選択
3-ブレードの上部にある[+新規追加]ボタンをクリックします4- [プリンシパルの選択]をクリックして、前に作成したアプリケーション(App Service)を選択します
.Net Code:-.Net Codeのキーボルトシークレットにアクセスするためのコード
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var secret = keyVaultClient.GetSecretAsync("https://test.vault.Azure.net/", "clientid").Result.Value;