Giter Club home page Giter Club logo

hybrid-keyvault-python-manage-secrets's Introduction

page_type languages products description urlFragment
sample
python
azure
This sample demonstrates how to manage key vaults and secrets in AzureStack using the Python SDK.
Hybrid-KeyVault-Python-Manage-Secrets

Hybrid-KeyVault-Python-Manage-Secrets

This sample demonstrates how to manage key vaults and secrets in AzureStack using the Python SDK.

On this page

Run this sample

  1. If you don't already have it, install Python.

  2. We recommend using a virtual environment to run this example, but it's not mandatory. You can initialize a virtual environment this way:

    pip install virtualenv
    virtualenv mytestenv
    cd mytestenv
    source bin/activate
    
  3. Clone the repository.

    git clone https://github.com/Azure-Samples/Hybrid-KeyVault-Python-Manage-Secrets.git
    
  4. Install the dependencies using pip.

    cd Hybrid-KeyVault-Python-Manage-Secrets
    pip install -r requirements.txt
    
  5. Create a service principal to work against AzureStack. Make sure your service principal has contributor/owner role on your subscription.

  6. Export these environment variables into your current shell.

    export AZURE_RESOURCE_LOCATION={your resource location}
    export AZURE_TENANT_ID={your tenant id}
    export AZURE_CLIENT_ID={your client id}
    export AZURE_OBJECT_ID={your client's object id}
    export AZURE_CLIENT_SECRET={your client secret}
    export AZURE_SUBSCRIPTION_ID={your subscription id}
    export ARM_ENDPOINT={your AzureStack Resource Manager Endpoint}
    
  7. Run the sample.

    python example.py
    

What is example.py doing?

This sample starts by setting up ResourceManagementClient and KeyVaultManagementClient objects using your subscription and credentials.

# Get_Credentials function to get credentials object
def get_credentials():
    mystack_cloud = get_cloud_from_metadata_endpoint(
        os.environ['ARM_ENDPOINT'])
    subscription_id = os.environ['AZURE_SUBSCRIPTION_ID']
    credentials = ServicePrincipalCredentials(
        client_id=os.environ['AZURE_CLIENT_ID'],
        secret=os.environ['AZURE_CLIENT_SECRET'],
        tenant=os.environ['AZURE_TENANT_ID'],
        cloud_environment=mystack_cloud
    )
    return credentials, subscription_id, mystack_cloud

#
# Create the Resource Manager Client with an Application (service principal) token provider
#
    credentials, subscription_id, mystack_cloud = get_credentials()
    kv_client = KeyVaultManagementClient(credentials, subscription_id,
        base_url=mystack_cloud.endpoints.resource_manager)
    resource_client = ResourceManagementClient(credentials, subscription_id,
        base_url=mystack_cloud.endpoints.resource_manager)

# Credentials for data_plane keyvault client
    kv_dp_credentials, sub_id, mystack = get_credentials()
    kv_data_client = KeyVaultClient(kv_dp_credentials)

It registers the subscription for the "Microsoft.KeyVault" namespace and creates a resource group and a storage account where the media services will be managed.

# You MIGHT need to add KeyVault as a valid provider for these credentials
# If so, this operation has to be done only once for each credentials
resource_client.providers.register('Microsoft.KeyVault')

# Create Resource group
print('Create Resource Group')
    resource_group_params = {'location': LOCATION}
    print_item(resource_client.resource_groups.create_or_update(GROUP_NAME, resource_group_params))

Here, the create_or_update method returns a ResourceGroup object after performing the appropriate operation, and the supporting function print_item prints some of its attributes.

Create a key vault

    vault = kv_client.vaults.create_or_update(
        GROUP_NAME,
        KV_NAME,
        {
            'location': LOCATION,
            'properties': {
                'sku': {
                    'name': 'standard'
                },
                'tenant_id': os.environ['AZURE_TENANT_ID'],
                'access_policies': [{
                    'tenant_id': os.environ['AZURE_TENANT_ID'],
                    'object_id': os.environ['AZURE_OBJECT_ID'],
                    'permissions': {
                        'keys': ['all'],
                        'secrets': ['all']
                    }
                }]
            }
        }
    )
    print_item(vault)

The object ID is unique for a User or an Application. Find this number in the Azure Active Directory blade of the Azure portal:

  • To find a User's object ID, navigate to "Users and groups" > "All users", search for the user name, and click it.
  • To find an Application's object ID, search for the application name under "App registrations" and click it.

In either of these cases, you can then find the object ID in the Essentials box.

Create a secret inside the keyvault

secret_bundle = kv_data_client.set_secret(
        vault.properties.vault_uri, 'auth-sample-secret', 'client is authenticated to the vault')
    print(secret_bundle)

Get secret from keyvault

secret_bundle = kv_data_client.get_secret(
        vault.properties.vault_uri, 'auth-sample-secret', secret_version=KeyVaultId.version_none)
    print(secret_bundle)

List key vaults

This code lists some attributes of all available key vaults.

for vault in kv_client.vaults.list():
    print_item(vault)

Delete a key vault

delete_async_operation = resource_client.resource_groups.delete(GROUP_NAME)
delete_async_operation.wait()
print("\nDeleted: {}".format(GROUP_NAME))

Deleting a resource is an asynchronous operation which may take some time, so the object returned from delete represents an operation in progress. Calling wait on it forces the caller to wait until it finishes.

hybrid-keyvault-python-manage-secrets's People

Contributors

microsoftopensource avatar msftgits avatar viananth avatar v-rajagt-zz avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.