Skip to content

Commit 439895c

Browse files
authored
[Key Vault] Added versions of Key Vault libraries using clientcore and azure-core V2 (#45285)
* Added secrets-v2 base files. * Generated secrets using core-v2 * Moved generated classes to implementation and refactored a couple of class names * Added convenience layer and fixed issues between that and the impl layer. * Updated groupId, artifactId, and docs for Secrets V2. * More renaming and cleaning up customizations. * Removed unused impl classes. * Added Keys base files. * Fixed import issue by changing Base64Url to Base64Uri * Made a few corrections to secrets classes. * Added parameter validations and ensured exceptions are logged in SecretClient. * More updates to secrets. * Added convenience layer for Keys. * Re-generated impl classes for KV Secrets. * Fixed compilation issues for Secrets. * Changed a few calls for non *withResponse methods in SecretClient. * Added a mapResponse() method to SecretClient. * Updated generated Keys code and convenience layer. * Added generated Certificates code without customizations. * Added generated Administration code without customizations. * Updated service directory POM to include new packages. * Updated docs and POMs. * Updated generated code via customizations. * Added code customization Java classes. * Updated client builders for keys and secrets. * Updated KeyClient, KeyVaultKeyIdentifier, and KeyVaultCredentialPolicy for keys * Updated docs in KeyClient and SecretClient * Added properties files for certs, keys, and secrets * Updated polling code in keys and secrets. Fixed an issue with the secrets POM. * Added convenience layer for Certificates (docs pending). * Updated version_client.txt * Fixed KeyVaultCredentialPolicy and SecretClientImpl * Added a simple test for SecretClient * Fixed compilation issues in Keys * Fixed compilation issues and docs in Certificates * Fixed docs in Keys * Fixed docs in Secrets * Re-generated impl layers * Added customization files for KV Admin and updated other libraries' customization classes. * Added convenience layer for KV Admin * Updated some docs and refactored client constructors * Fixed JsonWebKey * Added more KV Admin docs * Removed old codesnippets from READMEs * Added cryptography package. * Updated versions. * Re-generated classes. * Updated clientcore versions and fixed convenience layer. * Moved Key Vault v2 files to a separate folder * Removed httpPipeline() from client builders and updated docs. * Fixed compilation issues in cryptography classes. * Added samples for secrets * Added samples for keys * Added samples for certificates * No longer making a copy of RequestContext when handling paging operations * Added samples for administration * Fixed a couple of typos * Fixed KeyVaultCredentialPolicy * Fixed build issues * Updated folder names and fixed identity dependency import. * Revert changes to tsp-location.yaml on v1 folders * Updated cspell.json * Updated dependency tags * Updated cspell.json yet again * Updated dependency tags for core v2 * Attempts on fixing the pullrequest pipeline. * Fixed cspell issues and samples READMEs * Added unreleased tag for identity v2 * Fixed more versioning tags * Fixed more cspell errors * Updated customizations for codegen and re-generated code. * Updated code to use the latest codegen and fixed build issues * Fixed pipeline issues. * Fixed cspell issues. * Removed unnecessary opens statements from module-info.java files * Fixed typo in README sample * Update cspell.json * Fixed more cspell issues * Fixed even more cspell issues * Fixed broken links in markdown files * Update cspell.json * Fixed more broken links in markdown files * Removed code coverage limits
1 parent 0111006 commit 439895c

File tree

405 files changed

+67611
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

405 files changed

+67611
-0
lines changed

.vscode/cspell.json

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"**/checkstyle-suppressions.xml",
1717
"**/spotbugs-exclude.xml",
1818
"**/sdk/**/target/**",
19+
"**/sdk/**/target/**",
1920
"**/session-records/**",
2021
"**/sdk/**/**/assets.json",
2122
"**/sdk/**/*-matrix.json",
@@ -1385,6 +1386,34 @@
13851386
"words": [
13861387
"AISEARCH"
13871388
]
1389+
},
1390+
{
1391+
"filename": "sdk/keyvault-v2/*",
1392+
"words": [
1393+
"azsdkengsys",
1394+
"baos",
1395+
"centralus",
1396+
"ekus",
1397+
"FIPS",
1398+
"IMDS",
1399+
"inprogress",
1400+
"mhsm",
1401+
"myaccount",
1402+
"myalias",
1403+
"mydomain",
1404+
"myissuer",
1405+
"northcentralus",
1406+
"OAEP",
1407+
"RLSIGN",
1408+
"RSAES",
1409+
"RSNULL",
1410+
"SECG",
1411+
"SECP",
1412+
"southcentralus",
1413+
"uksouth",
1414+
"upns",
1415+
"vcolin" // TODO: Remove after all TODOs are removed from the codebase
1416+
]
13881417
}
13891418
],
13901419
"allowCompoundWords": true

eng/versioning/version_client.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,10 @@ com.azure.v2:azure-core;2.0.0-beta.1;2.0.0-beta.1
493493
com.azure.v2:azure-core-test;2.0.0-beta.1;2.0.0-beta.1
494494
com.azure.v2:azure-data-appconfiguration;2.0.0-beta.1;2.0.0-beta.1
495495
com.azure.v2:azure-identity;2.0.0-beta.1;2.0.0-beta.1
496+
com.azure.v2:azure-security-keyvault-administration;5.0.0-beta.1;5.0.0-beta.1
497+
com.azure.v2:azure-security-keyvault-certificates;5.0.0-beta.1;5.0.0-beta.1
498+
com.azure.v2:azure-security-keyvault-secrets;5.0.0-beta.1;5.0.0-beta.1
499+
com.azure.v2:azure-security-keyvault-keys;5.0.0-beta.1;5.0.0-beta.1
496500
io.clientcore:clientcore-parent;1.0.0-beta.3;1.0.0-beta.3
497501
io.clientcore:core;1.0.0-beta.9;1.0.0-beta.10
498502
io.clientcore:http-netty4;1.0.0-beta.1;1.0.0-beta.1
@@ -513,6 +517,7 @@ io.clientcore:annotation-processor-test;1.0.0-beta.1;1.0.0-beta.1
513517
unreleased_io.clientcore:core;1.0.0-beta.10
514518
unreleased_io.clientcore:annotation-processor;1.0.0-beta.3
515519
unreleased_com.azure.v2:azure-core;2.0.0-beta.1
520+
unreleased_com.azure.v2:azure-identity;2.0.0-beta.1
516521

517522
# Released Beta dependencies: Copy the entry from above, prepend "beta_", remove the current
518523
# version and set the version to the released beta. Released beta dependencies are only valid

pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
<module>sdk/iothub</module>
130130
<module>sdk/iotoperations</module>
131131
<module>sdk/keyvault</module>
132+
<module>sdk/keyvault-v2</module>
132133
<module>sdk/kubernetesconfiguration</module>
133134
<module>sdk/kusto</module>
134135
<module>sdk/labservices</module>

sdk/keyvault-v2/.gitignore

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
*.class
2+
*.cer
3+
*.key
4+
*.pfx
5+
6+
#External libs
7+
extlib/
8+
9+
# Auth files
10+
*.auth
11+
*.azureauth
12+
13+
# Local checkstyle
14+
*.checkstyle
15+
16+
# Mobile Tools for Java (J2ME)
17+
.mtj.tmp/
18+
19+
# Package Files #
20+
*.jar
21+
*.war
22+
*.ear
23+
24+
# Azure Tooling #
25+
node_modules
26+
packages
27+
28+
# Eclipse #
29+
*.pydevproject
30+
.project
31+
.metadata
32+
bin/**
33+
tmp/**
34+
tmp/**/*
35+
*.tmp
36+
*.bak
37+
*.swp
38+
*~.nib
39+
local.properties
40+
.classpath
41+
.settings/
42+
.loadpath
43+
bin/
44+
45+
# Other Tooling #
46+
.classpath
47+
.project
48+
**/target/classes/**
49+
**/target/generated-sources/**
50+
**/target/generate-test-sources/**
51+
**/target/maven-status/**
52+
**/target/test-classes/com/**
53+
**/target/surefire-reports/**
54+
**/target/maven-archiver/**
55+
!**/target/test-classes/session-records/**
56+
.idea
57+
*.iml
58+
59+
# Mac OS #
60+
.DS_Store
61+
.DS_Store?
62+
63+
# Windows #
64+
Thumbs.db
65+
66+
# reduced pom files should not be included
67+
dependency-reduced-pom.xml

sdk/keyvault-v2/README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Azure Key Vault client libraries for Java
2+
3+
[![Build Status](https://dev.azure.com/azure-sdk/public/_apis/build/status/598?branchName=main)](https://dev.azure.com/azure-sdk/public/_build/latest?definitionId=598) [![Build Documentation](https://img.shields.io/badge/documentation-published-blue.svg)](https://azuresdkartifacts.blob.core.windows.net/azure-sdk-for-java/index.html) [![Dependencies](https://img.shields.io/badge/dependencies-analyzed-blue.svg)](https://azuresdkartifacts.blob.core.windows.net/azure-sdk-for-java/staging/dependencies.html) [![SpotBugs](https://img.shields.io/badge/SpotBugs-Clean-success.svg)](https://azuresdkartifacts.blob.core.windows.net/azure-sdk-for-java/staging/spotbugsXml.html) [![CheckStyle](https://img.shields.io/badge/CheckStyle-Clean-success.svg)](https://azuresdkartifacts.blob.core.windows.net/azure-sdk-for-java/staging/checkstyle-aggregate.html)
4+
5+
Azure Key Vault is a cloud service that provides secure storage of certificates, cryptographic keys and secrets used by
6+
cloud applications and services.
7+
8+
Azure Key Vault Managed HSM is a fully-managed, highly-available, single-tenant, standards-compliant cloud service that
9+
enables you to safeguard cryptographic keys for your cloud applications using FIPS 140-2 Level 3 validated HSMs.
10+
11+
For more information refer to [About Azure Key Vault][azure_keyvault] and
12+
[What is Azure Key Vault Managed HSM?][azure_keyvault_mhsm].
13+
14+
Documentation for this SDK can be found at [Azure Key Vault Java Documentation][azure_keyvault_java].
15+
16+
## Getting started
17+
18+
To get started with a specific library, see the **README.md** file located in the library's project folder. You can find
19+
service libraries in the `/sdk/keyvault-v2/azure-security-keyvault-<subcomponent>` directory.
20+
21+
- [Azure Key Vault Keys][azure_keyvault_keys_library] is a cloud service that enables you to safeguard and manage
22+
cryptographic keys.
23+
- [Azure Key Vault Certificates][azure_keyvault_certificates_library] is a cloud service that allows you to securely
24+
manage and tightly control your certificates.
25+
- [Azure Key Vault Secrets][azure_keyvault_secrets_library] is a cloud service that provides management and secure
26+
storage for secrets, such as passwords and database connection strings.
27+
- The [Azure Key Vault Administration][azure_keyvault_administration_library] library clients support administrative
28+
tasks such as full backup/restore and key-level role-based access control (RBAC) for Azure Key Vault Managed HSM.
29+
30+
<!-- LINKS -->
31+
[azure_keyvault]: https://learn.microsoft.com/azure/key-vault/general/overview
32+
[azure_keyvault_java]: https://learn.microsoft.com/java/api/overview/azure/keyvault
33+
[azure_keyvault_mhsm]: https://learn.microsoft.com/azure/key-vault/managed-hsm/overview
34+
[azure_keyvault_administration_library]: https://github.com/vcolin7/azure-sdk-for-java/blob/feature/vicolina/keyvault/v2/sdk/keyvault-v2/azure-security-keyvault-administration/README.md
35+
[azure_keyvault_certificates_library]: https://github.com/vcolin7/azure-sdk-for-java/blob/feature/vicolina/keyvault/v2/sdk/keyvault-v2/azure-security-keyvault-certificates/README.md
36+
[azure_keyvault_keys_library]: https://github.com/vcolin7/azure-sdk-for-java/blob/feature/vicolina/keyvault/v2/sdk/keyvault-v2/azure-security-keyvault-keys/README.md
37+
[azure_keyvault_secrets_library]: https://github.com/vcolin7/azure-sdk-for-java/blob/feature/vicolina/keyvault/v2/sdk/keyvault-v2/azure-security-keyvault-secrets/README.md

sdk/keyvault-v2/TROUBLESHOOTING.md

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
# Troubleshooting Azure Key Vault SDK Issues
2+
The Azure Key Vault SDKs for Java use a common HTTP pipeline and authentication to create, update, and delete secrets, keys, and certificates in Key Vault and Managed HSM. This troubleshooting guide contains steps for diagnosing issues common to these SDKs.
3+
4+
For package-specific troubleshooting guides, see any of the following:
5+
6+
* [Troubleshooting guide for the Azure Key Vault Administration SDK][kv_admin_troubleshooting]
7+
* [Troubleshooting guide for the Azure Key Vault Certificates SDK][kv_certs_troubleshooting]
8+
* [Troubleshooting guide for the Azure Key Vault Keys SDK][kv_keys_troubleshooting]
9+
* [Troubleshooting guide for the Azure Key Vault Secrets SDK][kv_secrets_troubleshooting]
10+
11+
## Table of Contents
12+
* [Troubleshooting Authentication Issues](#troubleshooting-authentication-issues)
13+
* [HTTP 401 Errors](#http-401-errors)
14+
* [Frequent HTTP 401 Errors in Logs](#frequent-http-401-errors-in-logs)
15+
* [AKV10032: Invalid issuer](#akv10032--invalid-issuer)
16+
* [HTTP 403 Errors](#http-403-errors)
17+
* [Operation Not Permitted](#operation-not-permitted)
18+
* [Access Denied to First Party Service](#access-denied-to-first-party-service)
19+
* [Other authentication issues](#other-authentication-issues)
20+
* [Tenant authentication issues](#tenant-authentication-issues)
21+
* [Incorrect challenge resource](#incorrect-challenge-resource)
22+
* [Other Service Errors](#other-service-errors)
23+
* [HTTP 429: Too Many Requests](#http-429--too-many-requests)
24+
* [Support](#support)
25+
26+
## Troubleshooting Authentication Issues
27+
### HTTP 401 Errors
28+
HTTP 401 errors may indicate problems authenticating, but silent 401 errors are also an expected part of the Azure Key Vault authentication flow.
29+
30+
#### Frequent HTTP 401 Errors in Logs
31+
Most often, this is expected. Azure Key Vault issues a challenge for initial requests that force authentication. You may see these errors most often during application startup, but may also see these periodically during the application's lifetime when authentication tokens are near expiration.
32+
33+
If you are not seeing subsequent exceptions from the Key Vault SDKs, authentication challenges are likely the cause. If you continuously see 401 errors without successful operations, there may be an issue with the authentication library that's being used. We recommend using the Azure SDK's [azure-identity] library for authentication.
34+
35+
#### AKV10032: Invalid issuer
36+
You may see an error similar to:
37+
38+
```text
39+
com.azure.v2.core.exception.HttpResponseException: Status code 401, "{"error":{"code":"Unauthorized","message":"AKV10032: Invalid issuer. Expected one of https://sts.windows.net/{tenant 1}/, found https://sts.windows.net/{tenant 2}/."}}"
40+
```
41+
42+
This is most often caused by being logged into a different tenant than the Key Vault authenticates. See our [DefaultAzureCredential] documentation to see the order credentials are read. You may be logged into a different tenant for one credential that gets read before another credential. For example, you might be logged into Visual Studio under the wrong tenant even though you're logged into the Azure CLI under the correct tenant.
43+
44+
Automatic tenant discovery support has been added when referencing package `azure-identity` version 1.4.0 or newer, and any of the following Key Vault SDK package versions or newer:
45+
46+
| Package | Minimum Version |
47+
|------------------------------------------|-----------------|
48+
| `azure-security-keyvault-administration` | 5.0.0-beta.1 |
49+
| `azure-security-keyvault-certificates` | 5.0.0-beta.1 |
50+
| `azure-security-keyvault-keys` | 5.0.0-beta.1 |
51+
| `azure-security-keyvault-secrets` | 5.0.0-beta.1 |
52+
53+
Upgrading to the package versions should resolve any "Invalid Issuer" errors as long as the application or user is a member of the resource's tenant.
54+
55+
### HTTP 403 Errors
56+
HTTP 403 errors indicate the user is not authorized to perform a specific operation in Key Vault or Managed HSM.
57+
58+
#### Operation Not Permitted
59+
You may see an error similar to:
60+
61+
```text
62+
com.azure.v2.core.exception.HttpResponseException: Status code 403, {"error":{"code":"Forbidden","message":"Operation decrypt is not permitted on this key.","innererror":{"code":"KeyOperationForbidden"}}}
63+
```
64+
65+
The operation and inner `code` may vary, but the rest of the text will indicate which operation is not permitted. This error indicates that the authenticated application or user does not have permissions to perform that operation, though the cause may vary.
66+
67+
1. Check that the application or user has the appropriate permissions:
68+
* [Access policies][access_policies] (Key Vault)
69+
* [Role-Based Access Control (RBAC)][rbac] (Key Vault and Managed HSM)
70+
2. If the appropriate permissions are assigned to your application or user, make sure you are authenticating as that user.
71+
If using the [DefaultAzureCredential], a different credential might've been used than one you expected.
72+
[Enable logging][identity_logging] and you will see which credential the [DefaultAzureCredential] used as shown below, and why previously-attempted credentials were rejected.
73+
74+
```text
75+
[ERROR] c.azure.identity.EnvironmentCredential : Azure Identity => ERROR in EnvironmentCredential: Missing required environment variable AZURE_CLIENT_ID
76+
[ERROR] c.azure.identity.EnvironmentCredential : EnvironmentCredential authentication unavailable. Environment variables are not fully configured.
77+
[INFO] c.azure.identity.DefaultAzureCredential : Azure Identity => Attempted credential EnvironmentCredential is unavailable.
78+
[ERROR] c.a.i.implementation.IdentityClient : ManagedIdentityCredential authentication unavailable. Connection to IMDS endpoint cannot be established, connect timed out.
79+
[ERROR] c.a.identity.ManagedIdentityCredential : Azure Identity => ERROR in getToken() call for scopes [https://management.core.windows.net//.default]: ManagedIdentityCredential authentication unavailable. Connection to IMDS endpoint cannot be established, connect timed out.
80+
[INFO] c.azure.identity.DefaultAzureCredential : Azure Identity => Attempted credential ManagedIdentityCredential is unavailable.
81+
[ERROR] c.a.identity.SharedTokenCacheCredential : Azure Identity => ERROR in getToken() call for scopes [https://management.core.windows.net//.default]: SharedTokenCacheCredential authentication unavailable. No accounts were found in the cache.
82+
[INFO] c.azure.identity.DefaultAzureCredential : Azure Identity => Attempted credential SharedTokenCacheCredential is unavailable.
83+
[ERROR] com.azure.v2.identity.IntelliJCredential : Azure Identity => ERROR in getToken() call for scopes [https://management.core.windows.net//.default]: Unrecognized field "tenantId" (class com.azure.v2.identity.implementation.IntelliJAuthMethodDetails), not marked as ignorable (4 known properties: "authMethod", "azureEnv", "accountEmail", "credFilePath"])
84+
```
85+
86+
#### Access Denied to First Party Service
87+
You may see an error similar to:
88+
89+
```text
90+
com.azure.v2.core.exception.HttpResponseException: Status code 403, {"error":{"code":"Forbidden","message":"Access denied to first party service. ...","innererror":{"code":"AccessDenied"}}}
91+
```
92+
93+
The error `message` may also contain the tenant ID (`tid`) and application ID (`appid`). This error may occur because:
94+
95+
1. You have the **Allow trust services** option enabled and are trying to access the Key Vault from a service not on
96+
[this list](https://docs.microsoft.com/azure/key-vault/general/overview-vnet-service-endpoints#trusted-services) of
97+
trusted services.
98+
2. You are authenticated against a Microsoft Account (MSA) in Visual Studio or another credential provider. See
99+
[above](#operation-not-permitted) for troubleshooting steps.
100+
101+
### Other authentication issues
102+
103+
See our Azure Identity [troubleshooting guide][identity_troubleshooting] for general guidance on authentication errors.
104+
105+
#### Multi-tenant authentication issues
106+
107+
If a `ClientAuthenticationException` is thrown with a message similar to:
108+
109+
> The current credential is not configured to acquire tokens for tenant
110+
111+
See our [troubleshooting guide for multi-tenant authentication issues][identity_multitenant]. Read our [release notes](https://aka.ms/azsdk/blog/multi-tenant-guidance) for more information about this change.
112+
113+
#### Incorrect challenge resource
114+
115+
If an exception is thrown with a message similar to:
116+
117+
> The challenge resource '<my-key-vault>.vault.azure.net' does not match the requested domain. If you wish to disable this check for your client, pass 'true' to the SecretClientBuilder.disableChallengeResourceVerification() method when building it. See https://aka.ms/azsdk/blog/vault-uri for more information.
118+
119+
Check that the resource is expected - that you're not receiving an authentication challenge from an unknown host which may indicate an incorrect request URI. If the resource is correct but you're using a mock service or non-transparent proxy, use the `disableChallengeResourceVerification()` when creating your clients with a client builder, for example:
120+
121+
```java
122+
import com.azure.v2.core.TokenCredential;
123+
import com.azure.v2.identity.DefaultAzureCredentialBuilder;
124+
import com.azure.v2.security.keyvault.secrets.SecretClient;
125+
import com.azure.v2.security.keyvault.secrets.SecretClientBuilder;
126+
127+
public class MyClass {
128+
public static void main(String[] args) {
129+
TokenCredential credential = new DefaultAzureCredentialBuilder().build();
130+
SecretClient client = new SecretClientBuilder()
131+
.vaultUrl("https://my-key-vault.vault.azure.net/")
132+
.credential(credential)
133+
.disableChallengeResourceVerification();
134+
}
135+
}
136+
```
137+
138+
Read our [release notes][release_notes_resource] for more information about this change.
139+
140+
## Other Service Errors
141+
To troubleshoot additional HTTP service errors not described below, see [Azure Key Vault REST API Error Codes][kv_error_codes].
142+
143+
### HTTP 429: Too Many Requests
144+
If you get an exception or see logs that describe HTTP 429, you may be making too many requests to Key Vault too quickly.
145+
146+
Possible solutions include:
147+
148+
1. Use a singleton for any `CertificateClient`, `KeyClient`, `CryptographyClient`, or `SecretClient` and their async counterparts in your application for a single Key Vault.
149+
2. Use a single instance of [DefaultAzureCredential] or other credential you use to authenticate your clients for each Key Vault or Managed HSM endpoint you need to access.
150+
3. You could cache a certificate, key, or secret in memory for a time to reduce calls to retrieve them.
151+
4. Use [Azure App Configuration][azure_appconfiguration] for storing non-secrets and references to Key Vault secrets. Storing all app configuration in Key Vault will increase the likelihood of requests being throttled as more application instances are started.
152+
5. If you are performing encryption or decryption operations, consider using wrap and unwrap operations for a symmetric key which this may also improve application throughput.
153+
154+
See our [Azure Key Vault throttling guide][throttling_guide] for more information.
155+
156+
## Support
157+
158+
For additional support, please search our [existing issues](https://github.com/Azure/azure-sdk-for-java/issues) or [open a new issue](https://github.com/Azure/azure-sdk-for-java/issues/new/choose). You may also find existing answers on community sites like [Stack Overflow](https://stackoverflow.com/questions/tagged/azure-keyvault+java).
159+
160+
[access_policies]: https://docs.microsoft.com/azure/key-vault/general/assign-access-policy
161+
[azure_appconfiguration]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/appconfiguration/azure-data-appconfiguration/README.md
162+
[azure-identity]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/identity/azure-identity/README.md
163+
[DefaultAzureCredential]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/identity/azure-identity/README.md#defaultazurecredential
164+
[kv_admin_troubleshooting]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/keyvault-v2/azure-security-keyvault-administration/TROUBLESHOOTING.md
165+
[kv_certs_troubleshooting]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/keyvault-v2/azure-security-keyvault-certificates/TROUBLESHOOTING.md
166+
[kv_error_codes]: https://docs.microsoft.com/azure/key-vault/general/rest-error-codes
167+
[kv_keys_troubleshooting]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/keyvault-v2/azure-security-keyvault-keys/TROUBLESHOOTING.md
168+
[kv_secrets_troubleshooting]: https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/keyvault-v2/azure-security-keyvault-secrets/TROUBLESHOOTING.md
169+
[identity_logging]: https://docs.microsoft.com/azure/developer/java/sdk/logging-overview
170+
[identity_troubleshooting]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/identity/azure-identity/TROUBLESHOOTING.md
171+
[identity_multitenant]: https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/identity/azure-identity/TROUBLESHOOTING.md#troubleshoot-multi-tenant-authentication-issues
172+
[rbac]: https://docs.microsoft.com/azure/key-vault/general/rbac-guide
173+
[release_notes_resource]: https://aka.ms/azsdk/blog/vault-uri
174+
[release_notes_tenant]: https://aka.ms/azsdk/blog/multi-tenant-guidance
175+
[throttling_guide]: https://docs.microsoft.com/azure/key-vault/general/overview-throttling

0 commit comments

Comments
 (0)