Skip to content

Commit 175990a

Browse files
iscai-msftfengzhou-msft
authored andcommitted
Key Vault: Certs readme (#8345)
* updated readme * fixed url link
1 parent c2f6b2f commit 175990a

File tree

1 file changed

+118
-57
lines changed
  • sdk/keyvault/azure-keyvault-certificates

1 file changed

+118
-57
lines changed

sdk/keyvault/azure-keyvault-certificates/README.md

+118-57
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ and other secrets
1212

1313
## Getting started
1414
### Install the package
15-
Install the Azure Key Vault client library for Python with [pip][pip]:
16-
15+
Install [azure-keyvault-certificates][pypi_package_certificates] and
16+
[azure-identity][azure_identity] with [pip][pip]:
1717
```Bash
18-
pip install azure-keyvault-certificates
18+
pip install azure-keyvault-certificates azure-identity
1919
```
20+
[azure-identity][azure_identity] is used for Azure Active Directory
21+
authentication as demonstrated below.
2022

2123
### Prerequisites
2224
* An [Azure subscription][azure_sub]
@@ -59,16 +61,14 @@ names):
5961
}
6062
```
6163
62-
> The `"vaultUri"` property is the `vault_url` used by `CertificateClient`
64+
> The `"vaultUri"` property is the `vault_url` used by [CertificateClient][certificate_client_docs]
6365
6466
### Authenticate the client
65-
In order to interact with a Key Vault's certificates, you'll need an instance
66-
of the [CertificateClient][certificate_client_docs] class. Creating one
67-
requires a **vault url** and **credential**. This document demonstrates using
68-
`DefaultAzureCredential` as the credential, authenticating with a service
69-
principal's client id, secret, and tenant id. Other authentication methods are
70-
supported. See the [azure-identity][azure_identity] documentation for more
71-
details.
67+
This document demonstrates using [DefaultAzureCredential][default_cred_ref]
68+
to authenticate as a service principal. However, [CertificateClient][certificate_client_docs]
69+
accepts any [azure-identity][azure_identity] credential. See the
70+
[azure-identity][azure_identity] documentation for more information about other
71+
credentials.
7272
7373
#### Create a service principal
7474
This [Azure Cloud Shell][azure_cloud_shell] snippet shows how to create a
@@ -106,20 +106,26 @@ following example shows a way to do this in Bash:
106106
> Possible certificate permissions: backup, create, delete, deleteissuers, get, getissuers, import, list, listissuers, managecontacts, manageissuers, purge, recover, restore, setissuers, update
107107
108108
#### Create a client
109-
After setting the **AZURE_CLIENT_ID**, **AZURE_CLIENT_SECRET** and
110-
**AZURE_TENANT_ID** environment variables, you can create the [CertificateClient][certificate_client_docs]:
109+
Once the **AZURE_CLIENT_ID**, **AZURE_CLIENT_SECRET** and
110+
**AZURE_TENANT_ID** environment variables are set,
111+
[DefaultAzureCredential][default_cred_ref] will be able to authenticate the
112+
[CertificateClient][certificate_client_docs].
113+
114+
Constructing the client also requires your vault's URL, which you can
115+
get from the Azure CLI or the Azure Portal. In the Azure Portal, this URL is
116+
the vault's "DNS Name".
111117
112118
```python
113119
from azure.identity import DefaultAzureCredential
114120
from azure.keyvault.certificates import CertificateClient
115121
116122
credential = DefaultAzureCredential()
117123
118-
# Create a new certificate client using the default credential
119-
certificate_client = CertificateClient(vault_url=<your-vault-url>, credential=credential)
124+
certificate_client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
120125
```
126+
121127
## Key concepts
122-
With a `CertificateClient` you can get certificates from the vault, create new certificates and
128+
With a [CertificateClient][certificate_client_docs] you can get certificates from the vault, create new certificates and
123129
new versions of existing certificates, update certificate metadata, and delete certificates. You
124130
can also manage certificate issuers, contacts, and management policies of certificates. This is
125131
illustrated in the [examples](#examples) below.
@@ -128,73 +134,110 @@ illustrated in the [examples](#examples) below.
128134
129135
## Examples
130136
This section contains code snippets covering common tasks:
131-
* [Create a Certificate](#create-a-certificate)
132-
* [Retrieve a Certificate](#retrieve-a-certificate)
133-
* [Update Properties of an existing Certificate](#update-properties-of-an-existing-certificate)
134-
* [Delete a Certificate](#delete-a-certificate)
135-
* [List Properites of Certificates](#list-properties-of-certificates)
136-
* [Asynchronously create a Certificate](#asynchronously-create-a-certificate)
137-
* [Asynchronously list properties of Certificates](#asynchronously-list-properties-of-certificates)
137+
* [Create a Certificate](#create-a-certificate "Create a Certificate")
138+
* [Retrieve a Certificate](#retrieve-a-certificate "Retrieve a Certificate")
139+
* [Update Properties of an existing Certificate](#update-properties-of-an-existing-certificate "Update Properties of an existing Certificate")
140+
* [Delete a Certificate](#delete-a-certificate "Delete a Certificate")
141+
* [List Properites of Certificates](#list-properties-of-certificates "List Properties of Certificates")
142+
* [Asynchronously create a Certificate](#asynchronously-create-a-certificate "Asynchronously create a Certificate")
143+
* [Asynchronously list properties of Certificates](#asynchronously-list-properties-of-certificates "Asynchronously list properties of Certificates")
138144
139145
### Create a Certificate
140-
`begin_create_certificate` creates a certificate to be stored in the Azure Key Vault. If a certificate with
141-
the same name already exists, then a new version of the certificate is created.
146+
[begin_create_certificate](https://aka.ms/azsdk-python-keyvault-certificates-begincreatecert-ref) creates a certificate to be stored in the Azure Key Vault.
147+
If a certificate with the same name already exists, then a new version of the certificate is created.
142148
Before creating a certificate, a management policy for the certificate can be created or our default
143-
policy will be used. The `begin_create_certificate` operation returns a long running operation poller.
149+
policy will be used. The [begin_create_certificate](https://aka.ms/azsdk-python-keyvault-certificates-begincreatecert-ref) operation returns a long running operation poller.
144150
```python
145-
create_certificate_poller = certificate_client.begin_create_certificate(name="cert-name", policy=CertificatePolicy.get_default())
151+
from azure.identity import DefaultAzureCredential
152+
from azure.keyvault.certificates import CertificateClient, CertificatePolicy
153+
154+
credential = DefaultAzureCredential()
146155
156+
certificate_client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
157+
158+
create_certificate_poller = certificate_client.begin_create_certificate(name="cert-name", policy=CertificatePolicy.get_default())
147159
print(create_certificate_poller.result())
148160
```
161+
If you would like to check the status of your certificate creation, you can call `status()` on the poller or
162+
[get_certificate_operation](https://aka.ms/azsdk-python-keyvault-certificates-getcertop-ref) with the name of the certificate.
149163
150164
### Retrieve a Certificate
151-
`get_certificate` retrieves a certificate previously stored in the Key Vault without
165+
[get_certificate](https://aka.ms/azsdk-python-keyvault-certificates-getcert-ref) retrieves a certificate previously stored in the Key Vault without
152166
having to specify version.
153167
```python
168+
from azure.identity import DefaultAzureCredential
169+
from azure.keyvault.certificates import CertificateClient
170+
171+
credential = DefaultAzureCredential()
172+
173+
certificate_client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
174+
154175
certificate = certificate_client.get_certificate(name="cert-name")
155176
156177
print(certificate.name)
157178
print(certificate.properties.version)
158-
print(certificate.policy.id)
179+
print(certificate.policy.issuer_name)
159180
```
160181
161-
`get_certificate_version` retrieves a certificate based on the certificate name and the version of the certificate.
182+
[get_certificate_version](https://aka.ms/azsdk-python-keyvault-certificates-getcertversion-ref) retrieves a certificate based on the certificate name and the version of the certificate.
162183
Version is required.
163184
```python
185+
from azure.identity import DefaultAzureCredential
186+
from azure.keyvault.certificates import CertificateClient
187+
188+
credential = DefaultAzureCredential()
189+
190+
certificate_client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
164191
certificate = certificate_client.get_certificate_version(name="cert-name", version="cert-version")
165192
166193
print(certificate.name)
167194
print(certificate.properties.version)
168195
```
169196
170197
### Update properties of an existing Certificate]
171-
`update_certificate_properties` updates a certificate previously stored in the Key Vault.
198+
[update_certificate_properties](https://aka.ms/azsdk-python-keyvault-certificates-updatecertprops-ref) updates a certificate previously stored in the Key Vault.
172199
```python
173-
# You can specify additional application-specific metadata in the form of tags.
174-
tags = {"foo": "updated tag"}
200+
from azure.identity import DefaultAzureCredential
201+
from azure.keyvault.certificates import CertificateClient
202+
203+
credential = DefaultAzureCredential()
175204
176-
updated_certificate= certificate_client.update_certificate_properties(name="cert-name", tags=tags)
205+
certificate_client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
177206
178-
print(updated_certificate.name)
179-
print(updated_certificate.properties.version)
180-
print(updated_certificate.properties.updated_on)
181-
print(updated_certificate.properties.tags)
207+
# we will now disable the certificate for further use
208+
updated_certificate= certificate_client.update_certificate_properties(name="cert-name", enabled=False)
182209
210+
print(updated_certificate.name)
211+
print(updated_certificate.properties.enabled)
183212
```
184213
185214
### Delete a Certificate
186-
`delete_certificate` deletes a certificate previously stored in the Key Vault. When [soft-delete][soft_delete]
215+
[delete_certificate](https://aka.ms/azsdk-python-keyvault-certs-deletecert-ref) deletes a certificate previously stored in the Key Vault. When [soft-delete][soft_delete]
187216
is not enabled for the Key Vault, this operation permanently deletes the certificate.
188217
```python
218+
from azure.identity import DefaultAzureCredential
219+
from azure.keyvault.certificates import CertificateClient
220+
221+
credential = DefaultAzureCredential()
222+
223+
certificate_client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
224+
189225
deleted_certificate = certificate_client.delete_certificate(name="cert-name")
190226
191227
print(deleted_certificate.name)
192228
print(deleted_certificate.deleted_date)
193229
```
194230
### List properties of Certificates
195-
This example lists the properties of all certificates in the specified Key Vault.
231+
[list_certificates](https://aka.ms/azsdk-python-keyvault-certs-listcerts-ref) lists the properties of all certificates in the specified Key Vault.
196232
```python
197-
certificates = certificate_client.list_properites_of_certificates()
233+
from azure.identity import DefaultAzureCredential
234+
from azure.keyvault.certificates import CertificateClient
235+
236+
credential = DefaultAzureCredential()
237+
238+
certificate_client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
239+
240+
certificates = certificate_client.list_certificates()
198241
199242
for certificate in certificates:
200243
# this list doesn't include versions of the certificates
@@ -209,40 +252,57 @@ See
209252
for more information.
210253
211254
### Asynchronously create a Certificate
212-
`create_certificate` creates a certificate to be stored in the Azure Key Vault. If a certificate with the
255+
[create_certificate](https://aka.ms/azsdk-python-keyvault-certs-async-createcert) creates a certificate to be stored in the Azure Key Vault. If a certificate with the
213256
same name already exists, then a new version of the certificate is created.
214257
Before creating a certificate, a management policy for the certificate can be created or our default policy
215-
will be used. Awaiting the call to `create_certificate` returns your created certificate if creation is successful,
216-
and a `CertificateOperation` if creation is not.
258+
will be used. Awaiting the call to [create_certificate](https://aka.ms/azsdk-python-keyvault-certs-async-createcert) returns your created certificate if creation is successful,
259+
and a [CertificateOperation](https://aka.ms/azsdk-python-keyvault-certs-models-certop-ref) if creation is not.
217260
```python
261+
from azure.identity.aio import DefaultAzureCredential
262+
from azure.keyvault.certificates.aio import CertificateClient
263+
from azure.keyvault.certificates import CertificatePolicy
264+
265+
credential = DefaultAzureCredential()
266+
267+
certificate_client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
268+
218269
create_certificate_result = await certificate_client.create_certificate(name="cert-name", policy=CertificatePolicy.get_default())
219270
print(create_certificate_result)
220271
```
221272
222273
### Asynchronously list properties of Certificates
223-
This example lists all the certificates in the client's vault:
274+
[list_certificates](https://aka.ms/azsdk-python-keyvault-certs-async-listcerts-ref) lists all the
275+
properties of the certificates in the client's vault:
224276
```python
225-
certificates = certificate_client.list_certificates()
277+
from azure.identity.aio import DefaultAzureCredential
278+
from azure.keyvault.certificates.aio import CertificateClient
279+
280+
credential = DefaultAzureCredential()
226281
282+
certificate_client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
283+
284+
certificates = certificate_client.list_certificates()
227285
async for certificate in certificates:
228286
print(certificate.name)
229287
```
230288
231289
## Troubleshooting
232290
### General
233-
Key Vault clients raise exceptions defined in [`azure-core`][azure_core_exceptions].
234-
235-
For example, if you try to retrieve a certificate after it is deleted a `404` error is returned, indicating
236-
resource not found. In the following snippet, the error is handled gracefully by catching the exception and
237-
displaying additional information about the error.
291+
Key Vault clients raise exceptions defined in [azure-core][azure_core_exceptions].
292+
For example, if you try to get a key that doesn't exist in the vault, [CertificateClient][certificate_client_docs]
293+
raises [ResourceNotFoundError](https://aka.ms/azsdk-python-core-exceptions-resource-not-found-error):
238294
```python
295+
from azure.identity import DefaultAzureCredential
296+
from azure.keyvault.certificates import CertificateClient
239297
from azure.core.exceptions import ResourceNotFoundError
298+
299+
credential = DefaultAzureCredential()
300+
certificate_client = CertificateClient(vault_url="https://my-key-vault.vault.azure.net/", credential=credential)
301+
240302
try:
241-
certificate_client.get_certificate(name="deleted_certificate")
303+
certificate_client.get_certificate("which-does-not-exist")
242304
except ResourceNotFoundError as e:
243305
print(e.message)
244-
245-
Output: "certificate not found:deleted_certificate"
246306
```
247307
### Logging
248308
This library uses the standard
@@ -286,7 +346,7 @@ the library's documentation
286346
* [backup_restore_operations.py][backup_operations_sample] and [backup_restore_operations_async.py][backup_operations_async_sample] - backup and
287347
recover certificates
288348
289-
### Additional Documentation
349+
### Additional Documentation
290350
For more extensive documentation on Azure Key Vault, see the [API reference documentation][reference_docs].
291351
292352
## Contributing
@@ -306,6 +366,7 @@ see the Code of Conduct FAQ or contact [email protected] with any
306366
additional questions or comments.
307367
308368
[asyncio_package]: https://docs.python.org/3/library/asyncio.html
369+
[default_cred_ref]: https://aka.ms/azsdk-python-identity-default-cred-ref
309370
[azure_cloud_shell]: https://shell.azure.com/bash
310371
[azure_core_exceptions]: https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/core/azure-core/docs/exceptions.md
311372
[azure_identity]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/identity/azure-identity
@@ -315,12 +376,12 @@ additional questions or comments.
315376
[backup_operations_async_sample]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-certificates/samples/backup_restore_operations_async.py
316377
[hello_world_sample]: https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/keyvault/azure-keyvault-certificates/samples/hello_world.py
317378
[hello_world_async_sample]: https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/keyvault/azure-keyvault-certificates/samples/hello_world_async.py
318-
[certificate_client_docs]: https://azure.github.io/azure-sdk-for-python/ref/azure.keyvault.certificates.html#azure.keyvault.certificates.CertificateClient
319379
[keyvault_docs]: https://docs.microsoft.com/en-us/azure/key-vault/
320380
[list_operations_sample]: https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/keyvault/azure-keyvault-certificates/samples/list_operations.py
321381
[pip]: https://pypi.org/project/pip/
322382
[pypi_package_certificates]: https://pypi.org/project/azure-keyvault-certificates/
323-
[reference_docs]: https://azure.github.io/azure-sdk-for-python/ref/azure.keyvault.certificates.html
383+
[certificate_client_docs]: https://aka.ms/azsdk-python-keyvault-certificates-certificateclient-ref
384+
[reference_docs]: https://aka.ms/azsdk-python-keyvault-certificates-docs
324385
[certificates_client_src]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-certificates/azure/keyvault/certificates
325386
[certificates_samples]: https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/keyvault/azure-keyvault-certificates/samples
326387
[soft_delete]: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-ovw-soft-delete

0 commit comments

Comments
 (0)