web-dev-qa-db-ja.com

Azure Key Vault:アクセスが拒否されました

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ポータルにシークレットの読み取りを妨げる設定がある可能性がありますか?

16
Eutherpy

拒否されたアクセスを修正するには、Active Directoryのアクセス許可を構成する必要があります。 KeyVaultへのアクセスを許可します。

1。 PowerShellを使用して、次のコマンドを実行します。

Set-AzureRmKeyVaultAccessPolicy -VaultName 'XXXXXXX' -ServicePrincipalName XXXXX -PermissionsToKeys decrypt,sign,get,unwrapKey

2。 Azureポータルを使用する

  1. Key Vaultを開く
  2. Key VaultリソースブレードからAccess Policiesを選択します
  3. ブレード上部の[+新規追加]ボタンをクリックします
  4. Select Principalをクリックして、以前に作成したアプリケーションを選択します
  5. [キーのアクセス許可]ドロップダウンから、[復号化]、[署名]、[取得]、[UnwrapKey]アクセス許可を選択します
  6. 変更内容を保存

キーまたはシークレットの使用をアプリケーションに許可

25
Alexandr

質問では、Azure Portalの使用が指定されていました。KeyVaultアクセスのサービスプリンシパルの作成について説明しました here

具体的にはステップ2から:

Azure PortalでKey Vaultを開き、[設定]で[アクセスポリシー]ブレードを選択します。 [新規追加]をクリックし、[プリンシパルの選択]をクリックします。表示される前に、前の手順で作成した登録済みアプリの完全な名前を検索ボックスに入力する必要があります。 。

上部のドロップダウンから適切なテンプレートを選択するか、キー、シークレット、または証明書のアクセス許可を手動で選択できます。この段階では、承認済みアプリケーションについて心配する必要はありません。

重要:[OK]ボタンを押すと、新しいポリシーがリストに追加されますが、保存されません!続行する前に、必ず[保存]をクリックしてください。

5
therightstuff

何が起こっている-サービスプリンシパルには、上記の操作を実行する権限がありません。このスレッドを見てください。

Azure KeyVaultシークレットをプログラムで作成するときの「操作 'set' not allowed」エラーを修正するにはどうすればよいですか?

2
4c74356b41

同じアプリケーションに、Vaultでsecretsの読み取りを許可する場合は、次を実行します。

Set-AzureRmKeyVaultAccessPolicy -VaultName 'yourKeyVaultName' -ServicePrincipalName ClientId -PermissionsToSecrets Get

Azure ClientIdにアプリケーションを登録すると、生成されます。

1
Dhananjay Yadav

.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;
1
Priti kumari