AzureKeyVault

Use the Azure Key Vault integration to safeguard and manage cryptographic keys and secrets used by cloud applications and services.

Authentication & Identity Management · Azure Key Vault

Details

IDAzureKeyVault
ProviderMicrosoft
CategoryAuthentication & Identity Management
From Version5.5.0
Docker Imagedemisto/crypto:1.0.0.10120494
Supported ModulesAgentix XSIAM Cloud Posture Security

README

Use the Azure Key Vault integration to safeguard and manage cryptographic keys and secrets used by cloud applications and services.
This integration was integrated and tested with version 2022-07-01 of AzureKeyVault.

Configure Azure Key Vault on Cortex XSOAR

  1. Navigate to Settings > Integrations > Servers & Services.
  2. Search for Azure Key Vault.
  3. Click Add instance to create and configure a new integration instance.

    Parameter Required
    Azure Cloud False
    Client ID False
    Client Secret False
    Tenant ID True
    Certificate Thumbprint False
    Private Key False
    Use Azure Managed Identities False
    Azure Managed Identities Client ID False
    Default Subscription ID True
    Default Resource Group Name True
    Fetches credentials False
    Credentials Fetch Mode False
    Key Vault names - comma-separated list of Key Vaults to fetch secrets from. False
    Secret names - comma-separated list of secrets to fetch. False
    Trust any certificate (not secure) False
    Use system proxy settings False
  4. Azure cloud options

    Azure Cloud Description
    Worldwide The publicly accessible Azure Cloud
    US GCC Azure cloud for the USA Government Cloud Community (GCC)
    US GCC-High Azure cloud for the USA Government Cloud Community High (GCC-High)
    DoD Azure cloud for the USA Department of Defense (DoD)
    Germany Azure cloud for the German Government
    China Azure cloud for the Chinese Government
  5. Click Test to validate the URLs, token, and connection.

Commands

You can execute these commands from the Cortex XSOAR CLI, as part of an automation, or in a playbook.
After you successfully execute a command, a DBot message appears in the War Room with the command details.

azure-key-vault-create-update


Create or update a key vault in the specified subscription. If the Key Vault exists, the updated properties will overwrite the existing ones. Please use azure-key-vault-access-policy-update command if you wish to update the access policy of an existing Key Vault.

Base Command

azure-key-vault-create-update

Input

Argument Name Description Required
vault_name Key Vault name. Required
location Key Vault supported Azure location. The location cannot be changed after the Key Vault is created. Default value is ‘westus’. Possible values are: northcentralus, eastus, northeurope, westeurope, eastasia, southeastasia, eastus2, centralus, southcentralus, westus, japaneast, japanwest, australiaeast, australiasoutheast, brazilsouth, centralindia, southindia, westindia, canadacentral, canadaeast, uksouth, ukwest, westcentralus, westus2, koreacentral, francecentral, australiacentral, uaenorth, southafricanorth, switzerlandnorth, germanywestcentral, norwayeast, westus3, jioindiawest. Optional
sku_name Specify whether the key vault is a standard vault or a premium vault. Default value is ‘standard’. Possible values are: standard, premium. Optional
object_id The object ID of a user, service principal or security group in the Entra ID tenant for the vault. The object ID must be unique for the list of access policies: Any change in the access policy regards that object ID, will override the exists one. To retrieve it navigate in the Azure Portal to App registrations > your registered application > click on manage application in local directory > copy Object ID property. Required
keys Permissions to keys. If the Key Vault exists, you must supply the previous keys’ permissions in order to keep them unchanged. Access policy property. Default value is [get,list,create,update,import,delete,backup,restore,recover]. . Possible values are: get, list, create, update, import, delete, backup, restore, recover, decrypt, encrypt, unwrapKey, wrapKey, verify, sign, purge. Optional
secrets Permissions to secrets. If the Key Vault exists, you must supply the previous secrets’ permissions in order to keep them unchanged. Access policy property. Default value is [get,list,set,delete,backup,restore,recover]. Possible values are: get, list, set, delete, recover, backup, restore, purge. Optional
certificates Permissions to certificates. If the Key Vault exists, you must supply the previous certificate’s permissions in order to keep them unchanged. Access policy property. Default value is [get,list,update,create,import,delete,recover,backup,restore,managecontacts,manageissuers,getissuers,listissuers,setissuers,deleteissuers]. Possible values are: get, list, update, create, import, delete, recover, backup, restore, managecontacts, manageissuers, getissuers, listissuers, setissuers, deleteissuers, purge. Optional
storage Permissions to storage accounts. If the Key Vault exists, you must supply the previous storage’s permissions in order to keep them unchanged. Access policy property. Default value is [get,list,set,delete,backup,restore,recover]. Possible values are: get, list, delete, set, update, regeneratekey, getsas, listsas, deletesas, setsas, recover, backup, restore, purge. Optional
enabled_for_deployment Specifies whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault. If the Key Vault exists, you must supply the previous value in order to keep it the same. Default value is True. Possible values are: true, false. Optional
enabled_for_disk_encryption Specifies whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys.If the Key Vault exists, you must supply the previous value in order to keep it the same. Default value is True. Possible values are: true, false. Optional
enabled_for_template_deployment Specifies whether Azure Resource Manager is permitted to retrieve secrets from the key vault. If the Key Vault exists, you must supply the previous value in order to keep it the same. Default value is True. Possible values are: true, false. Optional
default_action The default action when no rule from ip_rules and from vnet_subnet_id match. For example, If no ip_rules and vnet_subnet_id arguments are supplied, the access to the key vault from any IP address or virtual network will be according to the default_action value. If you wish to allow access only from specific virtual network or IP address, use the ip_rules or the vnet_subnet_id arguments. This is only used after the bypass property has been evaluated. Network acl property. Possible values are: Allow, Deny. Optional
bypass Tells what traffic can bypass network rules. This can be ‘AzureServices’ or ‘None’. For example, use ‘AzureServices’ if you wish to give azure services access to key vault, although the default action is ‘Deny’ or the access for a specific IP address. Network acl property. Default value is ‘AzureServices’. Possible values are: AzureServices, None. Optional
vnet_subnet_id Allow accessibility of a vault from a specific virtual network. This argument must be the full resource ID of a virtual network subnet. For example, for the subnet ID “/subscriptions/subid/resourceGroups/rg1/providers/Microsoft.Network/virtualNetworks/test-vnet/subnets/subnet1”, you allow access to the Key Vault from subnet1. Network acl property. Optional
ignore_missing_vnet_service_endpoint Specifies whether the Network Resource Provider will ignore the check if parent subnet has serviceEndpoints configured. This allows the configuration for the Key Vault to complete without error before the configuration to the virtual network’s subnet is complete. Once the subnet configuration is complete, the Cosmos account will then be accessible through the configured subnet. Network Acl property. Possible values are: . Default is True. Optional
ip_rules The list of IP address rules. Each rule defines the accessibility of a vault from a specific IP address or IP range. It can be a simple IP address “124.56.78.91” or “124.56.78.0/24” - all addresses that start with 124.56.78. For example, for the IP addresses list: “124.56.78.91,124.56.78.92”, you can access the Key Vault from “124.56.78.91” or “124.56.78.92” IP addresses. Network acl property.  
subscription_id The subscription ID. Note: This argument will override the instance parameter ‘Subscription ID’. Optional
resource_group_name The resource group name. Note: This argument will override the instance parameter ‘Resource Group Name’. Optional

Context Output

Path Type Description
AzureKeyVault.KeyVault.id String Resource ID.
AzureKeyVault.KeyVault.name String Key Vault name.
AzureKeyVault.KeyVault.type String Resource type in Azure.
AzureKeyVault.KeyVault.location String Key Vault location.
AzureKeyVault.KeyVault.properties.sku.family String SKU family name.
AzureKeyVault.KeyVault.properties.sku.name String SKU name to specify whether the key vault is a standard vault or a premium vault.
AzureKeyVault.KeyVault.properties.tenantId String The Entra ID tenant ID that should be used for authenticating requests to the key vault.
AzureKeyVault.KeyVault.properties.accessPolicies.tenantId String The Entra ID tenant ID that should be used for authenticating requests to the key vault.
AzureKeyVault.KeyVault.properties.accessPolicies.objectId String The object ID of a user, service principal or security group in the Entra ID tenant for the vault. The object ID must be unique for the list of access policies.
AzureKeyVault.KeyVault.properties.accessPolicies.permissions.keys Unknown Permissions to keys.
AzureKeyVault.KeyVault.properties.accessPolicies.permissions.secrets Unknown Permissions to secrets.
AzureKeyVault.KeyVault.properties.accessPolicies.permissions.certificates Unknown Permissions to certificates.
AzureKeyVault.KeyVault.properties.enabledForDeployment Boolean Property to specify whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault.
AzureKeyVault.KeyVault.properties.enabledForDiskEncryption Boolean Property to specify whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys.
AzureKeyVault.KeyVault.properties.enabledForTemplateDeployment Boolean Property to specify whether Azure Resource Manager is permitted to retrieve secrets from the key vault.
AzureKeyVault.KeyVault.properties.vaultUri String The URI of the vault for performing operations on keys and secrets.
AzureKeyVault.KeyVault.properties.provisioningState String The current provisioning state.

Command Example

!azure-key-vault-create-update object_id=YOUR_OBJECT_ID vault_name=xsoar-test-285 keys=create,decrypt

Context Example

{
    "AzureKeyVault": {
        "KeyVault": {
            "id": "/subscriptions/SUBSCRIPTION_ID/resourceGroups/test-group/providers/Microsoft.KeyVault/vaults/xsoar-test-285",
            "location": "westus",
            "name": "xsoar-test-285",
            "properties": {
                "accessPolicies": [
                    {
                        "objectId": "YOUR_OBJECT_ID",
                        "permissions": {
                            "certificates": [
                                "get",
                                "list",
                                "update",
                                "create",
                                "import",
                                "delete",
                                "recover",
                                "backup",
                                "restore",
                                "managecontacts",
                                "manageissuers",
                                "getissuers",
                                "listissuers",
                                "setissuers",
                                "deleteissuers"
                            ],
                            "keys": [
                                "create",
                                "decrypt"
                            ],
                            "secrets": [
                                "get",
                                "list",
                                "set",
                                "delete",
                                "recover",
                                "backup",
                                "restore"
                            ],
                            "storage": [
                                "get",
                                "list",
                                "delete",
                                "set",
                                "update",
                                "regeneratekey",
                                "getsas",
                                "listsas"
                            ]
                        },
                        "tenantId": "YOUR_TENANT_ID"
                    }
                ],
                "enableSoftDelete": true,
                "enabledForDeployment": true,
                "enabledForDiskEncryption": true,
                "enabledForTemplateDeployment": true,
                "provisioningState": "Succeeded",
                "sku": {
                    "family": "A",
                    "name": "standard"
                },
                "tenantId": "YOUR_TENANT_ID",
                "vaultUri": "https://xsoar-test-285.vault.azure.net/"
            },
            "tags": {},
            "type": "Microsoft.KeyVault/vaults"
        }
    }
}

Human Readable Output

xsoar-test-285 Information

Id Name Type Location
/subscriptions/SUBSCRIPTION_ID/resourceGroups/test-group/providers/Microsoft.KeyVault/vaults/xsoar-test-285 xsoar-test-285 Microsoft.KeyVault/vaults westus

azure-key-vault-delete


Delete the specified key vault.

Base Command

azure-key-vault-delete

Input

Argument Name Description Required
vault_name Key Vault name to delete. Required
subscription_id The subscription ID. Note: This argument will override the instance parameter ‘Subscription ID’. Optional
resource_group_name The resource group name. Note: This argument will override the instance parameter ‘Resource Group Name’. Optional

Context Output

There is no context output for this command.

Command Example

!azure-key-vault-delete vault_name=xsoar-test-262

Human Readable Output

Deleted Key Vault xsoar-test-262 successfully.

azure-key-vault-get


Get the specified key vault.

Base Command

azure-key-vault-get

Input

Argument Name Description Required
vault_name Key Vault name. Required
subscription_id The subscription ID. Note: This argument will override the instance parameter ‘Subscription ID’. Optional
resource_group_name The resource group name. Note: This argument will override the instance parameter ‘Resource Group Name’. Optional

Context Output

Path Type Description
AzureKeyVault.KeyVault.id String Resource ID.
AzureKeyVault.KeyVault.name String Key Vault name.
AzureKeyVault.KeyVault.type String Resource type in Azure.
AzureKeyVault.KeyVault.location String Key Vault location.
AzureKeyVault.KeyVault.properties.sku.family String SKU family name.
AzureKeyVault.KeyVault.properties.sku.name String SKU name to specify whether the key vault is a standard vault or a premium vault.
AzureKeyVault.KeyVault.properties.tenantId String The Entra ID tenant ID that should be used for authenticating requests to the key vault.
AzureKeyVault.KeyVault.properties.accessPolicies.tenantId String The Entra ID tenant ID that should be used for authenticating requests to the key vault.
AzureKeyVault.KeyVault.properties.accessPolicies.objectId String The object ID of a user, service principal or security group in the Entra ID tenant for the vault. The object ID must be unique for the list of access policies.
AzureKeyVault.KeyVault.properties.accessPolicies.permissions.keys Unknown Permissions to keys.
AzureKeyVault.KeyVault.properties.accessPolicies.permissions.secrets Unknown Permissions to secrets.
AzureKeyVault.KeyVault.properties.accessPolicies.permissions.certificates Unknown Permissions to certificates.
AzureKeyVault.KeyVault.properties.enabledForDeployment Boolean Property to specify whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault.
AzureKeyVault.KeyVault.properties.enabledForDiskEncryption Boolean Property to specify whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys.
AzureKeyVault.KeyVault.properties.enabledForTemplateDeployment Boolean Property to specify whether Azure Resource Manager is permitted to retrieve secrets from the key vault.
AzureKeyVault.KeyVault.properties.enableSoftDelete Boolean Property to specify whether the ‘soft delete’ functionality is enabled for this key vault. If it’s not set to any value(true or false) when creating new key vault, it will be set to true by default. Once set to true, it cannot be reverted to false.
AzureKeyVault.KeyVault.properties.vaultUri String The URI of the vault for performing operations on keys and secrets. This property is readonly.

Command Example

!azure-key-vault-get vault_name=xsoar-test-vault

Context Example

{
    "AzureKeyVault": {
        "KeyVault": {
            "id": "/subscriptions/SUBSCRIPTION_ID/resourceGroups/test-group/providers/Microsoft.KeyVault/vaults/xsoar-test-vault",
            "location": "eastus",
            "name": "xsoar-test-vault",
            "properties": {
                "accessPolicies": [
                    {
                        "objectId": "YOUR_OBJECT_ID",
                        "permissions": {
                            "certificates": [
                                "Get",
                                "List",
                                "Update",
                                "Create",
                                "Import",
                                "Delete",
                                "Recover",
                                "Backup",
                                "Restore",
                                "ManageContacts",
                                "ManageIssuers",
                                "GetIssuers",
                                "ListIssuers",
                                "SetIssuers",
                                "DeleteIssuers",
                                "Purge"
                            ],
                            "keys": [
                                "Get",
                                "List",
                                "Update",
                                "Create",
                                "Import",
                                "Delete",
                                "Recover",
                                "Backup",
                                "Restore",
                                "Decrypt",
                                "Encrypt",
                                "UnwrapKey",
                                "WrapKey",
                                "Verify",
                                "Sign",
                                "Purge"
                            ],
                            "secrets": [
                                "Get",
                                "List",
                                "Set",
                                "Delete",
                                "Recover",
                                "Backup",
                                "Restore",
                                "Purge"
                            ]
                        },
                        "tenantId": "YOUR_TENANT_ID"
                    }
                ],
                "enableRbacAuthorization": false,
                "enableSoftDelete": true,
                "enabledForDeployment": false,
                "enabledForDiskEncryption": false,
                "enabledForTemplateDeployment": false,
                "provisioningState": "Succeeded",
                "sku": {
                    "family": "A",
                    "name": "Standard"
                },
                "softDeleteRetentionInDays": 90,
                "tenantId": "YOUR_TENANT_ID",
                "vaultUri": "https://xsoar-test-vault.vault.azure.net/"
            },
            "tags": {},
            "type": "Microsoft.KeyVault/vaults"
        }
    }
}

Human Readable Output

xsoar-test-vault Information

Id Name Type Location
/subscriptions/SUBSCRIPTION_ID/resourceGroups/test-group/providers/Microsoft.KeyVault/vaults/xsoar-test-vault xsoar-test-vault Microsoft.KeyVault/vaults eastus

azure-key-vault-list


The List operation gets information about the vaults associated with the subscription. For a limit greater than 25, more than one API call will be required and the command might take longer time.

Base Command

azure-key-vault-list

Input

Argument Name Description Required
limit Limit on the number of keys vaults to return. Default value is 50. Optional
offset First index to retrieve from. Default value is 0. Optional
subscription_id The subscription ID. Note: This argument will override the instance parameter ‘Subscription ID’. Optional

Context Output

Path Type Description
AzureKeyVault.KeyVault.id String Resource ID.
AzureKeyVault.KeyVault.name String Key Vault name.
AzureKeyVault.KeyVault.type String Resource type in Azure.
AzureKeyVault.KeyVault.location String Key Vault location.
AzureKeyVault.KeyVault.properties.sku.family String SKU family name.
AzureKeyVault.KeyVault.properties.sku.name String SKU name to specify whether the key vault is a standard vault or a premium vault.
AzureKeyVault.KeyVault.properties.tenantId String The Entra ID tenant ID that should be used for authenticating requests to the key vault.
AzureKeyVault.KeyVault.properties.accessPolicies.tenantId String The Entra ID tenant ID that should be used for authenticating requests to the key vault.
AzureKeyVault.KeyVault.properties.accessPolicies.objectId String The object ID of a user, service principal or security group in the Entra ID tenant for the vault. The object ID must be unique for the list of access policies.
AzureKeyVault.KeyVault.properties.accessPolicies.permissions.keys Unknown Permissions to keys.
AzureKeyVault.KeyVault.properties.accessPolicies.permissions.secrets Unknown Permissions to secrets.
AzureKeyVault.KeyVault.properties.accessPolicies.permissions.certificates Unknown Permissions to certificates.
AzureKeyVault.KeyVault.properties.enabledForDeployment Boolean Property to specify whether Azure Virtual Machines are permitted to retrieve certificates stored as secrets from the key vault.
AzureKeyVault.KeyVault.properties.enabledForDiskEncryption Boolean Property to specify whether Azure Disk Encryption is permitted to retrieve secrets from the vault and unwrap keys.
AzureKeyVault.KeyVault.properties.enabledForTemplateDeployment Boolean Property to specify whether Azure Resource Manager is permitted to retrieve secrets from the key vault.
AzureKeyVault.KeyVault.properties.enableSoftDelete Boolean Property to specify whether the ‘soft delete’ functionality is enabled for this key vault. If it’s not set to any value(true or false) when creating new key vault, it will be set to true by default. Once set to true, it cannot be reverted to false.
AzureKeyVault.KeyVault.properties.vaultUri String The URI of the vault for performing operations on keys and secrets.

Command Example

!azure-key-vault-list limit=1

Context Example

{
    "AzureKeyVault": {
        "KeyVault": {
            "id": "/subscriptions/SUBSCRIPTION_ID/resourceGroups/test-group/providers/Microsoft.KeyVault/vaults/xsoar-test-265",
            "location": "eastasia",
            "name": "xsoar-test-265",
            "properties": {
                "accessPolicies": [
                    {
                        "objectId": "YOUR_OBJECT_ID",
                        "permissions": {
                            "certificates": [
                                "get",
                                "list",
                                "update",
                                "create",
                                "import",
                                "delete",
                                "recover",
                                "backup",
                                "restore",
                                "managecontacts",
                                "manageissuers",
                                "getissuers",
                                "listissuers",
                                "setissuers",
                                "deleteissuers"
                            ],
                            "keys": [
                                "get",
                                "list",
                                "update",
                                "create",
                                "import",
                                "delete",
                                "recover",
                                "backup",
                                "restore",
                                "decrypt"
                            ],
                            "secrets": [
                                "get",
                                "list",
                                "set",
                                "delete",
                                "recover",
                                "backup",
                                "restore"
                            ],
                            "storage": [
                                "get",
                                "list",
                                "delete",
                                "set",
                                "update",
                                "regeneratekey",
                                "getsas",
                                "listsas"
                            ]
                        },
                        "tenantId": "YOUR_TENANT_ID"
                    }
                ],
                "enableSoftDelete": true,
                "enabledForDeployment": true,
                "enabledForDiskEncryption": true,
                "enabledForTemplateDeployment": true,
                "provisioningState": "Succeeded",
                "sku": {
                    "family": "A",
                    "name": "standard"
                },
                "tenantId": "YOUR_TENANT_ID",
                "vaultUri": "https://xsoar-test-265.vault.azure.net/"
            },
            "tags": {},
            "type": "Microsoft.KeyVault/vaults"
        }
    }
}

Human Readable Output

Key Vaults List

Id Name Type Location
/subscriptions/SUBSCRIPTION_ID/resourceGroups/test-group/providers/Microsoft.KeyVault/vaults/xsoar-test-265 xsoar-test-265 Microsoft.KeyVault/vaults eastasia

azure-key-vault-access-policy-update


Update access policies in a key vault in the specified subscription. The update regards only the access policy for the specified object ID.

Base Command

azure-key-vault-access-policy-update

Input

Argument Name Description Required
vault_name The name of the Key Vault to update it’s access policy. Required
operation_kind The name of the operation to do on the vault’s access policy. Supports three operations: add,remove,replace. For example, to add get, list permissions to the current secret permissions, use operation_kind=add and secrets=get,list. Possible values are: add, remove, replace. Required
object_id The object ID of a user, service principal or security group in the Entra ID tenant for the vault. The update regards only the access policy for the specified object ID. Required
keys Permissions to keys. Possible values are: encrypt, decrypt, wrapKey, unwrapKey, sign, verify, get, list, create, update, import, delete, backup, restore, recover, purge. Optional
secrets Permissions to secrets. Possible values are: get, list, set, delete, backup, restore, recover, purge. Optional
certificates Permissions to certificates. Possible values are: get, list, delete, create, import, update, managecontacts, getissuers, listissuers, setissuers, deleteissuers, manageissuers, recover, purge. Optional
storage Permissions to storage accounts. Possible values are: get, list, delete, set, update, regeneratekey, getsas, listsas, deletesas, setsas, recover, backup, restore, purge. Optional
subscription_id The subscription ID. Note: This argument will override the instance parameter ‘Subscription ID’. Optional
resource_group_name The resource group name. Note: This argument will override the instance parameter ‘Resource Group Name’. Optional

Context Output

Path Type Description
AzureKeyVault.VaultAccessPolicy.id String Resource ID.
AzureKeyVault.VaultAccessPolicy.type String Resource type in Azure.
AzureKeyVault.VaultAccessPolicy.properties.accessPolicies.tenantId String The Entra ID tenant ID that should be used for authenticating requests to the key vault.
AzureKeyVault.VaultAccessPolicy.properties.accessPolicies.objectId String The object ID of a user, service principal or security group in the Entra ID tenant for the vault. The object ID must be unique for the list of access policies.
AzureKeyVault.VaultAccessPolicy.properties.accessPolicies.permissions.keys Unknown Permissions to keys.
AzureKeyVault.VaultAccessPolicy.properties.accessPolicies.permissions.secrets Unknown Permissions to secrets.
AzureKeyVault.VaultAccessPolicy.properties.accessPolicies.permissions.certificates Unknown Permissions to certificates.

Command Example

!azure-key-vault-access-policy-update object_id=YOUR_OBJECT_ID operation_kind=add vault_name=xsoar-test-285 keys=import,list

Context Example

{
    "AzureKeyVault": {
        "VaultAccessPolicy": {
            "id": "/subscriptions/SUBSCRIPTION_ID/resourceGroups/test-group/providers/Microsoft.KeyVault/vaults/xsoar-test-285/accessPolicies/",
            "properties": {
                "accessPolicies": [
                    {
                        "objectId": "YOUR_OBJECT_ID",
                        "permissions": {
                            "certificates": [
                                "get",
                                "list",
                                "update",
                                "create",
                                "import",
                                "delete",
                                "recover",
                                "backup",
                                "restore",
                                "managecontacts",
                                "manageissuers",
                                "getissuers",
                                "listissuers",
                                "setissuers",
                                "deleteissuers"
                            ],
                            "keys": [
                                "create",
                                "decrypt",
                                "import",
                                "list"
                            ],
                            "secrets": [
                                "get",
                                "list",
                                "set",
                                "delete",
                                "recover",
                                "backup",
                                "restore"
                            ],
                            "storage": [
                                "get",
                                "list",
                                "delete",
                                "set",
                                "update",
                                "regeneratekey",
                                "getsas",
                                "listsas"
                            ]
                        },
                        "tenantId": "YOUR_TENANT_ID"
                    }
                ]
            },
            "type": "Microsoft.KeyVault/vaults/accessPolicies"
        }
    }
}

Human Readable Output

xsoar-test-285 Updated Access Policy

Id Type
/subscriptions/SUBSCRIPTION_ID/resourceGroups/test-group/providers/Microsoft.KeyVault/vaults/xsoar-test-285/accessPolicies/ Microsoft.KeyVault/vaults/accessPolicies

azure-key-vault-key-get


Get the public part of a stored key. This operation requires the keys/get permission.

Base Command

azure-key-vault-key-get

Input

Argument Name Description Required
vault_name The name of the Key Vault where the key resides in. Required
key_name Key name. Required
key_version Adding the version parameter retrieves a specific version of a key. This URI fragment is optional. If not specified, the latest version of the key is returned. Optional

Context Output

Path Type Description
AzureKeyVault.Key.key.kid String Key identifier.
AzureKeyVault.Key.key.kty String JsonWebKey Key Type.
AzureKeyVault.Key.key.key_ops Unknown Supported key operations.
AzureKeyVault.Key.key.n String RSA modulus.
AzureKeyVault.Key.key.e String RSA public exponent.
AzureKeyVault.Key.attributes.enabled Boolean Determines whether the object is enabled.
AzureKeyVault.Key.attributes.created Date Creation time in UTC.
AzureKeyVault.Key.attributes.updated Date Last updated time in UTC.
AzureKeyVault.Key.attributes.recoveryLevel Unknown Reflects the deletion recovery level currently in effect for keys in the current vault. If it contains ‘Purgeable’ the key can be permanently deleted by a privileged user; otherwise, only the system can purge the key, at the end of the retention interval.

Command Example

!azure-key-vault-key-get key_name=test-key-1 vault_name=xsoar-test-vault

Context Example

{
    "AzureKeyVault": {
        "Key": {
            "attributes": {
                "created": "2021-08-11T12:03:16",
                "enabled": true,
                "recoverableDays": 90,
                "recoveryLevel": "Recoverable+Purgeable",
                "updated": "2021-08-11T12:03:16"
            },
            "key": {
                "e": "AQAB",
                "key_ops": [
                    "sign",
                    "verify",
                    "wrapKey",
                    "unwrapKey",
                    "encrypt",
                    "decrypt"
                ],
                "kid": "https://xsoar-test-vault.vault.azure.net/keys/test-key-1/KEY_VERSION",
                "kty": "RSA",
                "n": "XXX-XXXX-XXX"
            },
            "key_vault_name": "xsoar-test-vault",
            "tags": {}
        }
    }
}

Human Readable Output

test-key-1 Information

Key Id Enabled Json Web Key Type Key Operations Create Time Update Time
https://xsoar-test-vault.vault.azure.net/keys/test-key-1/KEY_VERSION true RSA sign,
verify,
wrapKey,
unwrapKey,
encrypt,
decrypt
2021-08-11T12:03:16 2021-08-11T12:03:16

azure-key-vault-key-list


List keys in the specified vault. For a limit greater than 25, more than one API call will be required and the command might take longer time. This operation requires the keys/list permission.

Base Command

azure-key-vault-key-list

Input

Argument Name Description Required
vault_name The name of the Key Vault where the keys reside in. Required
limit Limit on the number of keys to return. Default value is 50. Default is 50. Optional
offset First index to retrieve from. Default value is 0. Default is 0. Optional

Context Output

Path Type Description
AzureKeyVault.Key.kid String Key identifier.
AzureKeyVault.Key.attributes.enabled Boolean Determines whether the object is enabled.
AzureKeyVault.Key.attributes.created Date Creation time in UTC.
AzureKeyVault.Key.attributes.updated Date Last updated time in UTC.
AzureKeyVault.Key.attributes.recoveryLevel String Reflects the deletion recovery level currently in effect for keys in the current vault. If it contains ‘Purgeable’ the key can be permanently deleted by a privileged user; otherwise, only the system can purge the key, at the end of the retention interval.
AzureKeyVault.Key.attributes.recoverableDays Number Soft Delete data retention days. Value should be >=7 and <=90 when softDelete enabled, otherwise 0.

Command Example

!azure-key-vault-key-list vault_name=xsoar-test-vault limit=1

Context Example

{
    "AzureKeyVault": {
        "Key": {
            "attributes": {
                "created": "2021-08-11T12:05:48",
                "enabled": false,
                "exp": "2022-08-11T12:05:48",
                "nbf": "2021-08-11T11:55:48",
                "recoverableDays": 90,
                "recoveryLevel": "Recoverable+Purgeable",
                "updated": "2021-09-05T14:02:13"
            },
            "key_vault_name": "xsoar-test-vault",
            "kid": "https://xsoar-test-vault.vault.azure.net/keys/test-cer-1",
            "managed": true,
            "tags": {}
        }
    }
}

Human Readable Output

xsoar-test-vault Keys List

Key Id Enabled Create Time Update Time Expiry Time
https://xsoar-test-vault.vault.azure.net/keys/test-cer-1 false 2021-08-11T12:05:48 2021-09-05T14:02:13 2022-08-11T12:05:48

azure-key-vault-key-delete


Delete a key of any type from storage in Azure Key vault. This operation requires the keys/delete permission.

Base Command

azure-key-vault-key-delete

Input

Argument Name Description Required
vault_name The name of the Key Vault where the key resides in. Required
key_name Key name to delete. Required

Context Output

Path Type Description
AzureKeyVault.Key.recoveryId String The url of the recovery object, used to identify and recover the deleted key.
AzureKeyVault.Key.deletedDate Date The time when the key was deleted, in UTC.
AzureKeyVault.Key.key.kid String Key identifier.
AzureKeyVault.Key.key.kty String JsonWebKey Key Type.
AzureKeyVault.Key.key.key_ops Unknown Supported key operations.
AzureKeyVault.Key.key.n String RSA modulus.
AzureKeyVault.Key.key.e String RSA public exponent.
AzureKeyVault.Key.attributes.enabled Boolean Determines whether the object is enabled.
AzureKeyVault.Key.attributes.created Number Creation time in UTC.
AzureKeyVault.Key.attributes.updated Number Last updated time in UTC.
AzureKeyVault.Key.attributes.recoveryLevel String Reflects the deletion recovery level currently in effect for keys in the current vault. If it contains ‘Purgeable’ the key can be permanently deleted by a privileged user; otherwise, only the system can purge the key, at the end of the retention interval.

Command Example

!azure-key-vault-key-delete key_name=test-key-10 vault_name=xsoar-test-vault

Context Example

{
    "AzureKeyVault": {
        "Key": {
            "attributes": {
                "created": "2021-08-18T07:07:18",
                "enabled": true,
                "exp": "2023-08-18T07:07:03",
                "nbf": "2021-08-18T07:07:03",
                "recoverableDays": 90,
                "recoveryLevel": "Recoverable+Purgeable",
                "updated": "2021-08-18T07:07:18"
            },
            "deletedDate": "2021-11-01T12:52:40",
            "key": {
                "e": "AQAB",
                "key_ops": [
                    "sign",
                    "verify",
                    "wrapKey",
                    "unwrapKey",
                    "encrypt",
                    "decrypt"
                ],
                "kid": "https://xsoar-test-vault.vault.azure.net/keys/test-key-10/KEY_VERSION",
                "kty": "RSA",
                "n": "XXX-XXXX-XXX"
            },
            "key_vault_name": "xsoar-test-vault",
            "recoveryId": "https://xsoar-test-vault.vault.azure.net/deletedkeys/test-key-10",
            "scheduledPurgeDate": "2022-01-30T12:52:40",
            "tags": {}
        }
    }
}

Human Readable Output

Delete test-key-10

Key Id Recovery Id Deleted Date Scheduled Purge Date
https://xsoar-test-vault.vault.azure.net/keys/test-key-10/KEY_VERSION https://xsoar-test-vault.vault.azure.net/deletedkeys/test-key-10 2021-11-01T12:52:40 2022-01-30T12:52:40

azure-key-vault-secret-get


Get a specified secret from a given key vault. The GET operation is applicable to any secret stored in Azure Key Vault. This operation requires the secrets/get permission.

Base Command

azure-key-vault-secret-get

Input

Argument Name Description Required
vault_name The name of the Key Vault where the secret resides in. Required
secret_name Secret name. Required
secret_version Secret version.If not specified, the latest version of the secret is returned. Optional

Context Output

Path Type Description
AzureKeyVault.Secret.value String Secret value.
AzureKeyVault.Secret.id String Secret ID.
AzureKeyVault.Secret.attributes.enabled Boolean Determines whether the object is enabled.
AzureKeyVault.Secret.attributes.created Date Creation time in UTC.
AzureKeyVault.Secret.attributes.updated Date Last updated time in UTC.
AzureKeyVault.Secret.attributes.recoveryLevel String Reflects the deletion recovery level currently in effect for secrets in the current vault. If it contains ‘Purgeable’, the secret can be permanently deleted by a privileged user; otherwise, only the system can purge the secret, at the end of the retention interval.

Command Example

!azure-key-vault-secret-get secret_name=test-sec-1 vault_name=xsoar-test-vault

Context Example

{
    "AzureKeyVault": {
        "Secret": {
            "attributes": {
                "created": "2021-08-11T12:04:12",
                "enabled": true,
                "exp": "2023-08-11T12:04:06",
                "nbf": "2021-08-11T12:04:06",
                "recoverableDays": 90,
                "recoveryLevel": "Recoverable+Purgeable",
                "updated": "2021-08-17T16:22:57"
            },
            "contentType": "text",
            "id": "https://xsoar-test-vault.vault.azure.net/secrets/test-sec-1/SECRET_VERSION",
            "key_vault_name": "xsoar-test-vault",
            "tags": {},
            "value": "test"
        }
    }
}

Human Readable Output

test-sec-1 Information

Secret Id Enabled Create Time Update Time Expiry Time
https://xsoar-test-vault.vault.azure.net/secrets/test-sec-1/SECRET_VERSION true 2021-08-11T12:04:12 2021-08-17T16:22:57 2023-08-11T12:04:06

azure-key-vault-secret-list


List secrets in a specified key vault. For a limit greater than 25, more than one API call will be required and the command might take longer time. This operation requires the secrets/list permission.

Base Command

azure-key-vault-secret-list

Input

Argument Name Description Required
vault_name The name of the Key Vault where the secrets reside in. Required
limit Limit on the number of secrets to return. Default value is 50. Optional
offset First index to retrieve from. Default value is 0. Optional

Context Output

Path Type Description
AzureKeyVault.Secret.id String Secret ID.
AzureKeyVault.Secret.attributes.enabled Boolean Determines whether the object is enabled.
AzureKeyVault.Secret.attributes.nbf Date Not before date in UTC.
AzureKeyVault.Secret.attributes.exp Date Expiry date in UTC.
AzureKeyVault.Secret.attributes.created Date Creation time in UTC.
AzureKeyVault.Secret.attributes.updated Date Last updated time in UTC.
AzureKeyVault.Secret.attributes.recoveryLevel String Reflects the deletion recovery level currently in effect for secrets in the current vault. If it contains ‘Purgeable’, the secret can be permanently deleted by a privileged user; otherwise, only the system can purge the secret, at the end of the retention interval.
AzureKeyVault.Secret.attributes.recoverableDays Number Soft Delete data retention days. Value should be >=7 and <=90 when softDelete enabled, otherwise 0.

Command Example

!azure-key-vault-secret-list vault_name=xsoar-test-vault limit=1

Context Example

{
    "AzureKeyVault": {
        "Secret": {
            "attributes": {
                "created": "2021-08-11T12:05:48",
                "enabled": false,
                "exp": "2022-08-11T12:05:48",
                "nbf": "2021-08-11T11:55:48",
                "recoverableDays": 90,
                "recoveryLevel": "Recoverable+Purgeable",
                "updated": "2021-09-05T14:02:13"
            },
            "contentType": "application/x-pkcs12",
            "id": "https://xsoar-test-vault.vault.azure.net/secrets/test-cer-1",
            "key_vault_name": "xsoar-test-vault",
            "managed": true,
            "tags": {}
        }
    }
}

Human Readable Output

xsoar-test-vault Secrets List

Secret Id Enabled Create Time Update Time Expiry Time
https://xsoar-test-vault.vault.azure.net/secrets/test-cer-1 false 2021-08-11T12:05:48 2021-09-05T14:02:13 2022-08-11T12:05:48

azure-key-vault-secret-delete


Delete a secret from a specified key vault. This operation requires the secrets/delete permission.

Base Command

azure-key-vault-secret-delete

Input

Argument Name Description Required
vault_name The name of the Key Vault where the secret resides in. Required
secret_name Secret name to delete. Required

Context Output

Path Type Description
AzureKeyVault.Secret.recoveryId String The URL of the recovery object, used to identify and recover the deleted secret.
AzureKeyVault.Secret.deletedDate Date The time when the secret was deleted, in UTC.
AzureKeyVault.Secret.scheduledPurgeDate Date The time when the secret is scheduled to be purged, in UTC.
AzureKeyVault.Secret.id String Deleted secret ID.
AzureKeyVault.Secret.attributes.enabled Boolean Determines whether the object is enabled.
AzureKeyVault.Secret.attributes.created Date Creation time in UTC.
AzureKeyVault.Secret.attributes.updated Date Last updated time in UTC.
AzureKeyVault.Secret.attributes.recoveryLevel String Reflects the deletion recovery level currently in effect for secrets in the current vault.

Command Example

!azure-key-vault-secret-delete secret_name=test-sec-10 vault_name=xsoar-test-vault

Context Example

{
    "AzureKeyVault": {
        "Secret": {
            "attributes": {
                "created": "2021-08-18T07:08:10",
                "enabled": true,
                "recoverableDays": 90,
                "recoveryLevel": "Recoverable+Purgeable",
                "updated": "2021-08-18T07:08:10"
            },
            "contentType": "aa",
            "deletedDate": "2021-11-01T12:52:54",
            "id": "https://xsoar-test-vault.vault.azure.net/secrets/test-sec-10/SECRET_VERSION",
            "key_vault_name": "xsoar-test-vault",
            "recoveryId": "https://xsoar-test-vault.vault.azure.net/deletedsecrets/test-sec-10",
            "scheduledPurgeDate": "2022-01-30T12:52:54",
            "tags": {}
        }
    }
}

Human Readable Output

Delete test-sec-10

Secret Id Recovery Id Deleted Date Scheduled Purge Date
https://xsoar-test-vault.vault.azure.net/secrets/test-sec-10/SECRET_VERSION https://xsoar-test-vault.vault.azure.net/deletedsecrets/test-sec-10 2021-11-01T12:52:54 2022-01-30T12:52:54

azure-key-vault-certificate-get


Gets information about a specific certificate. This operation requires the certificates/get permission.

Base Command

azure-key-vault-certificate-get

Input

Argument Name Description Required
vault_name The name of the Key Vault where the certificate resides in. Required
certificate_name Certificate name. Required
certificate_version The version of the certificate. If not specified, the latest version of the certificate is returned. Optional

Context Output

Path Type Description
AzureKeyVault.Certificate.id String Certificate ID.
AzureKeyVault.Certificate.kid String Key ID.
AzureKeyVault.Certificate.sid String Secret ID.
AzureKeyVault.Certificate.x5t String Thumbprint of the certificate.
AzureKeyVault.Certificate.cer String CER contents of x509 certificate.
AzureKeyVault.Certificate.attributes.enabled Boolean Determines whether the object is enabled.
AzureKeyVault.Certificate.attributes.exp Date Expiry date in UTC.
AzureKeyVault.Certificate.attributes.created Date Creation time in UTC.
AzureKeyVault.Certificate.attributes.updated Date Last updated time in UTC.
AzureKeyVault.Certificate.attributes.recoveryLevel String Reflects the deletion recovery level currently in effect for certificates in the current vault. If it contains ‘Purgeable’, the certificate can be permanently deleted by a privileged user; otherwise, only the system can purge the certificate, at the end of the retention interval.
AzureKeyVault.Certificate.policy Unknown The management policy.

Command Example

!azure-key-vault-certificate-get certificate_name=test-cer-1 vault_name=xsoar-test-vault

Context Example

{
    "AzureKeyVault": {
        "Certificate": {
            "attributes": {
                "created": "2021-08-11T12:05:48",
                "enabled": false,
                "exp": "2022-08-11T12:05:48",
                "nbf": "2021-08-11T11:55:48",
                "recoverableDays": 90,
                "recoveryLevel": "Recoverable+Purgeable",
                "updated": "2021-09-05T14:02:13"
            },
            "cer": "XXXXX-XXXXXX",
            "id": "https://xsoar-test-vault.vault.azure.net/certificates/test-cer-1/CERTIFICATE_VERSION",
            "key_vault_name": "xsoar-test-vault",
            "kid": "https://xsoar-test-vault.vault.azure.net/keys/test-cer-1/CERTIFICATE_VERSION",
            "pending": {
                "id": "https://xsoar-test-vault.vault.azure.net/certificates/test-cer-1/pending"
            },
            "policy": {
                "attributes": {
                    "created": "2021-08-11T12:05:31",
                    "enabled": true,
                    "updated": "2021-08-11T12:05:31"
                },
                "id": "https://xsoar-test-vault.vault.azure.net/certificates/test-cer-1/policy",
                "issuer": {
                    "name": "Self"
                },
                "key_props": {
                    "exportable": true,
                    "key_size": 2048,
                    "kty": "RSA",
                    "reuse_key": false
                },
                "lifetime_actions": [
                    {
                        "action": {
                            "action_type": "AutoRenew"
                        },
                        "trigger": {
                            "lifetime_percentage": 80
                        }
                    }
                ],
                "secret_props": {
                    "contentType": "application/x-pkcs12"
                },
                "x509_props": {
                    "basic_constraints": {
                        "ca": false
                    },
                    "ekus": [
                        "1.3.6.1.5.5.7.3.1",
                        "1.3.6.1.5.5.7.3.2"
                    ],
                    "key_usage": [
                        "digitalSignature",
                        "keyEncipherment"
                    ],
                    "sans": {
                        "dns_names": []
                    },
                    "subject": "CN=test",
                    "validity_months": 12
                }
            },
            "sid": "https://xsoar-test-vault.vault.azure.net/secrets/test-cer-1/CERTIFICATE_VERSION",
            "tags": {},
            "x5t": "XXXX-XXXXX"
        }
    }
}

Human Readable Output

test-cer-1 Information

Certificate Id Enabled Create Time Update Time Expiry Time
https://xsoar-test-vault.vault.azure.net/certificates/test-cer-1/CERTIFICATE_VERSION false 2021-08-11T12:05:48 2021-09-05T14:02:13 2022-08-11T12:05:48

azure-key-vault-certificate-list


List certificates in a specified key vault. For a limit greater than 25, more than one API call will be required and the command might take longer time. This operation requires the certificates/list permission.

Base Command

azure-key-vault-certificate-list

Input

Argument Name Description Required
vault_name The name of the Key Vault where the certificate reside in. Required
limit Limit on the number of certificates to return. Default value is 50. Optional
offset First index to retrieve from. Default value is 0. Optional

Context Output

Path Type Description
AzureKeyVault.Certificate.id String Certificate ID.
AzureKeyVault.Certificate.x5t String Thumbprint of the certificate.
AzureKeyVault.Certificate.attributes.enabled Boolean Determines whether the object is enabled.
AzureKeyVault.Certificate.attributes.created Date Creation time in UTC.
AzureKeyVault.Certificate.attributes.updated Date Last updated time in UTC.

Command Example

!azure-key-vault-certificate-list vault_name=xsoar-test-vault limit=1

Context Example

{
    "AzureKeyVault": {
        "Certificate": {
            "attributes": {
                "created": "2021-08-11T12:05:48",
                "enabled": false,
                "exp": "2022-08-11T12:05:48",
                "nbf": "2021-08-11T11:55:48",
                "updated": "2021-09-05T14:02:13"
            },
            "id": "https://xsoar-test-vault.vault.azure.net/certificates/test-cer-1",
            "key_vault_name": "xsoar-test-vault",
            "subject": "",
            "tags": {},
            "x5t": "XXXX-XXXXX"
        }
    }
}

Human Readable Output

xsoar-test-vault Certificates List

Certificate Id Enabled Create Time Update Time Expiry Time
https://xsoar-test-vault.vault.azure.net/certificates/test-cer-1 false 2021-08-11T12:05:48 2021-09-05T14:02:13 2022-08-11T12:05:48

azure-key-vault-certificate-policy-get


Get the policy of the specified certificate.This operation requires the certificates/get permission.

Base Command

azure-key-vault-certificate-policy-get

Input

Argument Name Description Required
vault_name The name of the Key Vault where the secret resides in. Required
certificate_name The name of the certificate to retrieve the policy from. Required

Context Output

Path Type Description
AzureKeyVault.CertificatePolicy.id String Policy ID.
AzureKeyVault.CertificatePolicy.key_props Unknown Properties of the key backing a certificate.
AzureKeyVault.CertificatePolicy.x509_props Unknown Properties of the X509 component of a certificate.
AzureKeyVault.CertificatePolicy.lifetime_actions Unknown Actions that will be performed by Key Vault over the lifetime of a certificate.
AzureKeyVault.CertificatePolicy.issuer Unknown Parameters for the issuer of the X509 component of a certificate.
AzureKeyVault.CertificatePolicy.attributes.enabled Boolean Determines whether the object is enabled.
AzureKeyVault.CertificatePolicy.attributes.created Date Creation time in UTC.
AzureKeyVault.CertificatePolicy.attributes.updated Date Last updated time in UTC.

Command Example

!azure-key-vault-certificate-policy-get certificate_name=test-cer-1 vault_name=xsoar-test-vault

Context Example

{
    "AzureKeyVault": {
        "CertificatePolicy": {
            "CertificateName": "test-cer-1",
            "attributes": {
                "created": "2021-08-11T12:05:31",
                "enabled": true,
                "updated": "2021-08-11T12:05:31"
            },
            "id": "https://xsoar-test-vault.vault.azure.net/certificates/test-cer-1/policy",
            "issuer": {
                "name": "Self"
            },
            "key_props": {
                "exportable": true,
                "key_size": 2048,
                "kty": "RSA",
                "reuse_key": false
            },
            "lifetime_actions": [
                {
                    "action": {
                        "action_type": "AutoRenew"
                    },
                    "trigger": {
                        "lifetime_percentage": 80
                    }
                }
            ],
            "secret_props": {
                "contentType": "application/x-pkcs12"
            },
            "x509_props": {
                "basic_constraints": {
                    "ca": false
                },
                "ekus": [
                    "1.3.6.1.5.5.7.3.1",
                    "1.3.6.1.5.5.7.3.2"
                ],
                "key_usage": [
                    "digitalSignature",
                    "keyEncipherment"
                ],
                "sans": {
                    "dns_names": []
                },
                "subject": "CN=test",
                "validity_months": 12
            }
        }
    }
}

Human Readable Output

test-cer-1 Policy Information

Id Key Props Secret Props X509 Props Issuer Attributes
https://xsoar-test-vault.vault.azure.net/certificates/test-cer-1/policy exportable: true
kty: RSA
key_size: 2048
reuse_key: false
contentType: application/x-pkcs12 subject: CN=test
sans: {“dns_names”: []}
ekus: 1.3.6.1.5.5.7.3.1,
1.3.6.1.5.5.7.3.2
key_usage: digitalSignature,
keyEncipherment
validity_months: 12
basic_constraints: {“ca”: false}
name: Self enabled: true
created: 2021-08-11T12:05:31
updated: 2021-08-11T12:05:31

azure-key-vault-subscriptions-list


List all subscriptions for a tenant.

Base Command

azure-key-vault-subscriptions-list

Input

There are no input arguments for this command.

Context Output

Path Type Description
AzureKeyVault.Subscription.id String Subscription ID.
AzureKeyVault.Subscription.displayName String Subscription display name.
AzureKeyVault.Subscription.state String Subscription state.
AzureKeyVault.Subscription.subscriptionPolicies Unknown Subscription policies.
AzureKeyVault.Subscription.authorizationSource String Authorization source.
AzureKeyVault.Subscription.managedByTenants Unknown Managed by tenants.
AzureKeyVault.Subscription.tenantId String Tenant ID.

azure-key-vault-resource-group-list


List all resource groups for a subscription.

Base Command

azure-key-vault-resource-group-list

Input

Argument Name Description Required
subscription_id The subscription ID. Note: This argument will override the instance parameter ‘Subscription ID’. Optional
limit Limit on the number of resource groups to return. Default is 50. Default is 50. Optional
tag A single tag in the form of ‘{“Tag Name”:”Tag Value”}’ to filter the list by. Optional

Context Output

Path Type Description
AzureKeyVault.ResourceGroup.id String Resource group ID.
AzureKeyVault.ResourceGroup.name String Resource group name.
AzureKeyVault.ResourceGroup.location String Resource group location.
AzureKeyVault.ResourceGroup.tags Unknown Resource group tags.
AzureKeyVault.ResourceGroup.properties.provisioningState unknown Resource group provisioning state.

azure-key-vault-auth-reset


Run this command if for some reason you need to rerun the authentication process.

Base Command

azure-key-vault-auth-reset

Input

There are no input arguments for this command.

Context Output

There is no context output for this command.

Configuration parameters

  • azure_cloud — Azure Cloud
  • client_id — Client ID
  • credentials
  • tenant_id — Tenant ID (required)
  • certificate_thumbprint — Certificate Thumbprint
  • credentials_certificate_thumbprint
  • private_key — Private Key
  • use_managed_identities — Use Azure Managed Identities
  • managed_identities_client_id
  • subscription_id — Default Subscription ID (required)
  • resource_group_name — Default Resource Group Name (required)
  • isFetchCredentials — Fetches credentials
  • credentials_fetch_mode — Credentials Fetch Mode
  • key_vaults — Key Vault names - a comma separated list of Key Vaults to fetch secrets from.
  • secrets — Secret names - a comma separated list of secrets to fetch.
  • insecure — Trust any certificate (not secure)
  • proxy — Use system proxy settings

Commands (17)

  • azure-key-vault-access-policy-update

    Update access policies in a key vault in the specified subscription. The update regards only the access policy for the specified object ID.

  • azure-key-vault-auth-reset

    Run this command if for some reason you need to rerun the authentication process.

  • azure-key-vault-certificate-get

    Gets information about a specific certificate. This operation requires the certificates/get permission.

  • azure-key-vault-certificate-list

    List certificates in a specified key vault. For a limit greater than 25, more than one API call will be required and the command might take longer time. This operation requires the certificates/list permission.

  • azure-key-vault-certificate-policy-get

    Get the policy of the specified certificate.This operation requires the certificates/get permission.

  • azure-key-vault-create-update

    Create or update a key vault in the specified subscription. If the Key Vault exists, the updated properties will overwrite the existing ones. Please use azure-key-vault-access-policy-update command if you wish to update the access policy of an existing Key Vault.

  • azure-key-vault-delete

    Delete the specified key vault.

  • azure-key-vault-get

    Get the specified key vault.

  • azure-key-vault-key-delete

    Delete a key of any type from storage in Azure Key vault. This operation requires the keys/delete permission.

  • azure-key-vault-key-get

    Get the public part of a stored key. This operation requires the keys/get permission.

  • azure-key-vault-key-list

    List keys in the specified vault. For a limit greater than 25, more than one API call will be required and the command might take longer time. This operation requires the keys/list permission.

  • azure-key-vault-list

    The List operation gets information about the vaults associated with the subscription. For a limit greater than 25, more than one API call will be required and the command might take longer time.

  • azure-key-vault-resource-group-list

    List all resource groups for a subscription.

  • azure-key-vault-secret-delete

    Delete a secret from a specified key vault. This operation requires the secrets/delete permission.

  • azure-key-vault-secret-get

    Get a specified secret from a given key vault. The GET operation is applicable to any secret stored in Azure Key Vault. This operation requires the secrets/get permission.

  • azure-key-vault-secret-list

    List secrets in a specified key vault. For a limit greater than 25, more than one API call will be required and the command might take longer time. This operation requires the secrets/list permission.

  • azure-key-vault-subscriptions-list

    List all subscriptions for a tenant.

import pytest
from AzureKeyVault import (
    KeyVaultClient,
    convert_attributes_to_readable,
    convert_key_info_to_readable,
    convert_time_attributes_to_iso,
    create_or_update_key_vault_command,
    delete_key_command,
    delete_key_vault_command,
    delete_secret_command,
    get_certificate_command,
    get_certificate_policy_command,
    get_key_command,
    get_key_vault_command,
    get_secret_command,
    list_certificates_command,
    list_key_vaults_command,
    list_keys_command,
    list_secrets_command,
    update_access_policy_command,
)
from CommonServerPython import *

"""MOCK PARAMETERS """
CLIENT_ID = "client_id"
CLIENT_SECRET = "client_secret"
TENANT_ID = "tenant_id"
SUBSCRIPTION_ID = "sub_id"
RESOURCE_GROUP_NAME = "group_name"

"""CONSTANTS"""
VAULT_NAME = "myvault"
KEY_NAME = "key_test"
SECRET_NAME = "sec_test"
SECRET_NAME_2 = "sec_test_2"
CERTIFICATE_NAME = "selfSignedCert01"
BASE_VAULT_URL = f"https://{VAULT_NAME}.vault.azure.net"
BASE_MANAGEMENT_URL = (
    f"https://management.azure.com/subscriptions/{SUBSCRIPTION_ID}/"
    f"resourceGroups/{RESOURCE_GROUP_NAME}/providers/Microsoft.KeyVault/vaults"
)
ACCESS_TOKEN_REQUEST_URL = f"https://login.microsoftonline.com/{TENANT_ID}/oauth2/token"
API_MANAGEMENT_VERSION_PARAM = "?api-version=2019-09-01"
API_VAULT_VERSION_PARAM = "?api-version=7.2"
KEY_VAULT_PREFIX = "AzureKeyVault.KeyVault"
KEY_PREFIX = "AzureKeyVault.Key"
SECRET_PREFIX = "AzureKeyVault.Secret"
CERTIFICATE_PREFIX = "AzureKeyVault.Certificate"
# The following two values must match the "Credentials Fetch Mode" options in AzureKeyVault.yml.
# They are intentionally hard-coded (not imported from the integration) so the tests verify that
# the code recognizes the exact strings the YAML/platform sends, and catch any drift between them.
STORE_IN_CORTEX_MODE_YML = "Store in Cortex"
ON_DEMAND_MODE_YML = "External Credentials Vault (on-demand)"
OBJECT_ID = "00000000-0000-0000-0000-000000000000"


def load_mock_response(file_name: str) -> str:
    """
    Load mock file that simulates an API response.
    Args:
        file_name (str): Name of the mock response JSON file to return.
    Returns:
        str: Mock file content.
    """
    with open(f"test_data/{file_name}", encoding="utf-8") as mock_file:
        return mock_file.read()


def mock_client():
    return KeyVaultClient(
        tenant_id=TENANT_ID,
        client_id=CLIENT_ID,
        client_secret=CLIENT_SECRET,
        subscription_id=SUBSCRIPTION_ID,
        resource_group_name=RESOURCE_GROUP_NAME,
        verify=False,
        proxy=False,
        certificate_thumbprint=None,
        private_key=None,
    )


def test_azure_key_vault_key_vault_create_or_update_command(requests_mock):
    """
    Scenario: Create or Update Key Vault.
    Given:
     - User has provided valid credentials.
     - Key Vault name argument
    When:
     - azure-key-vault-key-vault-create-or-update command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    mock_response = json.loads(load_mock_response("create_or_update_key_vault.json"))
    url = "https://management.azure.com/subscriptions/sub_id/\
resourceGroups/group_name/providers/Microsoft.KeyVault/vaults/myvault?api-version=2022-07-01"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json={})
    requests_mock.put(url, json=mock_response)

    result = create_or_update_key_vault_command(
        mock_client(),
        {"vault_name": VAULT_NAME, "storage": None, "object_id": "00000000-0000-0000-0000-000000000000"},
        params={"subscription_id": "sub_id", "resource_group_name": "group_name"},
    )

    assert len(result.outputs) == 6
    assert result.outputs_prefix == KEY_VAULT_PREFIX
    assert result.outputs.get("name") == VAULT_NAME


def test_azure_key_vault_key_vault_list_command(requests_mock):
    """
    Scenario: list Key Vaults.
    Given:
     - User has provided valid credentials.
    When:
     - azure-key-vault-key-vault-list command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """
    mock_response = json.loads(load_mock_response("list_key_vaults.json"))
    url = "https://management.azure.com/subscriptions/sub_id/providers/Microsoft.KeyVault/vaults?$top=50&api-version=2022-07-01"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json=mock_response)
    requests_mock.get(url, json=mock_response)

    result = list_key_vaults_command(mock_client(), {}, params={"subscription_id": "sub_id"})

    assert len(result.outputs) == 1
    assert result.outputs_prefix == KEY_VAULT_PREFIX
    assert result.outputs[0].get("name") == VAULT_NAME
    assert result.outputs[0].get("type") == "Microsoft.KeyVault/vaults"
    assert result.outputs[0].get("properties").get("tenantId") == "00000000-0000-0000-0000-000000000000"


def test_azure_key_vault_key_vault_get_command(requests_mock):
    """
    Scenario: get Key Vault.
    Given:
     - User has provided valid credentials.
     - Key Vault name argument.
    When:
     - azure-key-vault-key-vault-get command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    mock_response = json.loads(load_mock_response("get_key_vault.json"))
    url = "https://management.azure.com/subscriptions/sub_id/resourceGroups/group_name/providers/\
Microsoft.KeyVault/vaults/myvault?api-version=2022-07-01"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json=mock_response)
    requests_mock.get(url, json=mock_response)

    result = get_key_vault_command(
        mock_client(), {"vault_name": VAULT_NAME}, params={"subscription_id": "sub_id", "resource_group_name": "group_name"}
    )

    assert len(result.outputs) == 6
    assert result.outputs_prefix == "AzureKeyVault.KeyVault"
    assert result.outputs.get("name") == VAULT_NAME


def test_azure_key_vault_key_vault_delete_command(requests_mock):
    """
    Scenario: delete Key Vault.
    Given:
     - User has provided valid credentials.
     - Key Vault name
     - Key name
    When:
     - azure-key-vault-key-vault-delete command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
    """

    mock_response = json.loads(load_mock_response("delete_key_vault.json"))
    url = "https://management.azure.com/subscriptions/sub_id/resourceGroups/\
group_name/providers/Microsoft.KeyVault/vaults/myvault?api-version=2022-07-01"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json={})
    requests_mock.delete(url, json=mock_response)

    result = delete_key_vault_command(
        mock_client(), {"vault_name": VAULT_NAME}, params={"subscription_id": "sub_id", "resource_group_name": "group_name"}
    )
    assert result.outputs is None


def test_azure_key_vault_key_vault_access_policy_update_command(requests_mock):
    """
    Scenario: update access policy of Key Vault.
    Given:
     - User has provided valid credentials.
     - Key Vault name argument
     - Operation kind argument
    When:
     - azure-key-vault-key-vault-access-policy-update command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    operation_kind = "add"
    command_arguments = {
        "vault_name": VAULT_NAME,
        "operation_kind": operation_kind,
        "object_id": "00000000-0000-0000-0000-000000000000",
    }

    mock_response = json.loads(load_mock_response("update_access_policy.json"))

    url = "https://management.azure.com/subscriptions/sub_id/resourceGroups/\
group_name/providers/Microsoft.KeyVault/vaults/myvault/accessPolicies/add?api-version=2022-07-01"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json={})
    requests_mock.put(url, json=mock_response)

    result = update_access_policy_command(
        mock_client(), command_arguments, params={"subscription_id": "sub_id", "resource_group_name": "group_name"}
    )
    assert len(result.outputs) == 1
    assert result.outputs.get("properties").get("accessPolicies")[0].get("tenantId") == "00000000-0000-0000-0000-000000000000"
    assert result.outputs_prefix == "AzureKeyVault.VaultAccessPolicy"


def test_azure_key_vault_key_list_command(requests_mock):
    """
    Scenario: list Keys.
    Given:
     - User has provided valid credentials.
     - vault_name argument
    When:
     - azure-key-vault-key-list command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    mock_response = json.loads(load_mock_response("list_keys.json"))
    url = f"{BASE_VAULT_URL}/keys{API_VAULT_VERSION_PARAM}"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json={})
    requests_mock.get(url, json=mock_response)

    command_arguments = {"vault_name": VAULT_NAME}
    result = list_keys_command(mock_client(), command_arguments)
    assert len(result.outputs) == 1
    assert result.outputs_prefix == KEY_PREFIX
    assert result.outputs[0].get("kid") == "https://myvault.vault.azure.net/keys/sdktestkey"


def test_azure_key_vault_key_get_command(requests_mock):
    """
    Scenario: get Key.
    Given:
     - User has provided valid credentials.
    When:
     - azure-key-vault-key-get command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    mock_response = json.loads(load_mock_response("get_key.json"))
    url = f"{BASE_VAULT_URL}/keys/{KEY_NAME}{API_VAULT_VERSION_PARAM}"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json={})
    requests_mock.get(url, json=mock_response)

    command_arguments = {"vault_name": VAULT_NAME, "key_name": KEY_NAME}
    result = get_key_command(mock_client(), command_arguments)
    assert len(result.outputs) == 4
    assert result.outputs_prefix == KEY_PREFIX
    assert result.outputs.get("key_vault_name") == VAULT_NAME
    assert result.outputs.get("key").get("e") == "AQAB"


def test_azure_key_vault_key_delete_command(requests_mock):
    """
    Scenario: delete Key.
    Given:
     - User has provided valid credentials.
     - Key Vault name
     - key name
    When:
     - azure-key-vault-key-delete command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    mock_response = json.loads(load_mock_response("delete_key.json"))
    url = f"{BASE_VAULT_URL}/keys/{KEY_NAME}{API_VAULT_VERSION_PARAM}"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json={})
    requests_mock.delete(url, json=mock_response)

    command_arguments = {"vault_name": VAULT_NAME, "key_name": KEY_NAME}
    result = delete_key_command(mock_client(), command_arguments)
    assert len(result.outputs) == 7
    assert result.outputs_prefix == "AzureKeyVault.Key"
    assert result.outputs.get("recoveryId") == "https://test.vault.azure.net/deletedkeys/key_test"
    assert result.outputs.get("deletedDate") == "2017-05-05T00:00:52"


def test_azure_key_vault_secret_list_command(requests_mock):
    """
    Scenario: list secrets.
    Given:
     - User has provided valid credentials.
     - Key Vault name
    When:
     - azure-key-vault-secret-list command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    mock_response = json.loads(load_mock_response("list_secrets.json"))
    url = f"{BASE_VAULT_URL}/secrets{API_VAULT_VERSION_PARAM}"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json={})
    requests_mock.get(url, json=mock_response)

    command_arguments = {"vault_name": VAULT_NAME}
    result = list_secrets_command(mock_client(), command_arguments)
    assert len(result.outputs) == 1
    assert result.outputs_prefix == SECRET_PREFIX
    assert result.outputs[0].get("id") == "https://myvault.vault.azure.net/secrets/listsecrettest0"
    assert result.outputs[0].get("contentType") == "plainText"
    assert result.outputs[0].get("attributes").get("enabled") is True


def test_azure_key_vault_secret_get_command(requests_mock):
    """
    Scenario: get secret.
    Given:
     - User has provided valid credentials.
     - Key vault name
     - Secret name
    When:
     - azure-key-vault-secret-get command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    mock_response = json.loads(load_mock_response("get_secret.json"))
    url = f"{BASE_VAULT_URL}/secrets/{SECRET_NAME}{API_VAULT_VERSION_PARAM}"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json=mock_response)
    requests_mock.get(url, json=mock_response)

    command_arguments = {"vault_name": VAULT_NAME, "secret_name": SECRET_NAME}
    result = get_secret_command(mock_client(), command_arguments)
    assert len(result.outputs) == 7
    assert result.outputs_prefix == SECRET_PREFIX
    assert result.outputs.get("value") == "mysecretvalue"
    assert result.outputs.get("kid") == "mykid"
    assert result.outputs.get("key_vault_name") == VAULT_NAME
    assert result.outputs.get("attributes").get("enabled") is True


def test_azure_key_vault_secret_delete_command(requests_mock):
    """
    Scenario: delete secret.
    Given:
     - User has provided valid credentials.
     - Key vault name
     - Secret name
    When:
     - azure-key-vault-secret-delete command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    mock_response = json.loads(load_mock_response("delete_secret.json"))
    url = f"{BASE_VAULT_URL}/secrets/{SECRET_NAME}{API_VAULT_VERSION_PARAM}"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json=mock_response)
    requests_mock.delete(url, json=mock_response)

    command_arguments = {"vault_name": VAULT_NAME, "secret_name": SECRET_NAME}
    result = delete_secret_command(mock_client(), command_arguments)
    assert len(result.outputs) == 6
    assert result.outputs_prefix == "AzureKeyVault.Secret"
    assert result.outputs.get("recoveryId") == "https://test.vault.azure.net/deletedsecrets/sec_test"
    assert result.outputs.get("key_vault_name") == VAULT_NAME
    assert result.outputs.get("deletedDate") == "2017-05-04T22:53:53"


def test_azure_key_vault_certificate_list_command(requests_mock):
    """
    Scenario: list certificates.
    Given:
     - User has provided valid credentials.
     - Key vault name
    When:
     - azure-key-vault-certificate-list command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    mock_response = json.loads(load_mock_response("list_certificate.json"))
    url = f"{BASE_VAULT_URL}/certificates{API_VAULT_VERSION_PARAM}"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json=mock_response)
    requests_mock.get(url, json=mock_response)

    command_arguments = {"vault_name": VAULT_NAME}
    result = list_certificates_command(mock_client(), command_arguments)
    assert len(result.outputs) == 2
    assert result.outputs_prefix == CERTIFICATE_PREFIX
    assert result.outputs[0].get("x5t") == "fLi3U52HunIVNXubkEnf8tP6Wbo"
    assert result.outputs[0].get("attributes").get("enabled") is True


def test_azure_key_vault_certificate_get_command(requests_mock):
    """
    Scenario: get certificate.
    Given:
     - User has provided valid credentials.
     - Key vault name
     - Certificate name
    When:
     - azure-key-vault-certificate-get command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    mock_response = json.loads(load_mock_response("get_certificate.json"))
    url = f"{BASE_VAULT_URL}/certificates/{CERTIFICATE_NAME}{API_VAULT_VERSION_PARAM}"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json=mock_response)
    requests_mock.get(url, json=mock_response)

    command_arguments = {"vault_name": VAULT_NAME, "certificate_name": CERTIFICATE_NAME}
    result = get_certificate_command(mock_client(), command_arguments)
    assert len(result.outputs) == 8
    assert result.outputs_prefix == CERTIFICATE_PREFIX
    assert result.outputs.get("x5t") == "fLi3U52HunIVNXubkEnf8tP6Wbo"
    assert result.outputs.get("key_vault_name") == VAULT_NAME
    assert result.outputs.get("attributes").get("enabled") is True


def test_azure_key_vault_certificate_policy_get_command(requests_mock):
    """
    Scenario: get certificate's policy.
    Given:
     - User has provided valid credentials.
     - Key vault name
     - Certificate name
    When:
     - azure-key-vault-certificate-policy-get command called.
    Then:
     - Ensure number of items is correct.
     - Ensure outputs prefix is correct.
     - Ensure a sample value from the API matches what is generated in the context.
    """

    mock_response = json.loads(load_mock_response("get_certificate_policy.json"))
    url = f"{BASE_VAULT_URL}/certificates/{CERTIFICATE_NAME}/policy{API_VAULT_VERSION_PARAM}"

    requests_mock.post(ACCESS_TOKEN_REQUEST_URL, json=mock_response)
    requests_mock.get(url, json=mock_response)

    command_arguments = {"vault_name": VAULT_NAME, "certificate_name": CERTIFICATE_NAME}
    result = get_certificate_policy_command(mock_client(), command_arguments)
    assert len(result.outputs) == 8
    assert result.outputs_prefix == "AzureKeyVault.CertificatePolicy"
    assert result.outputs.get("id") == "https://myvault.vault.azure.net/certificates/selfSignedCert01/policy"
    assert result.outputs.get("attributes").get("enabled") is True


def test_config_vault_permission():
    """
    Scenario: configure Key Vault permission property.
    Given:
     - User has provided valid credentials.
     - List of keys permissions.
     - List of secrets permissions.
     - List of storage permissions.
    When:
     - azure-key-vault-create-update command called.
     - azure-key-vault-update-policy command called.
    Then:
     - Ensure number of items is correct.
     - Ensure that each permissions list contains the right values.
    """

    client = mock_client()
    keys = ["list", "get", "purge"]
    secrets = keys
    certificates = []
    storage = ["delete", "set", "update"]

    permissions = client.config_vault_permission(keys, secrets, certificates, storage)
    assert len(permissions) == 3
    assert permissions["keys"] == permissions["secrets"]
    assert permissions["secrets"] == ["list", "get", "purge"]
    assert permissions["storage"] == ["delete", "set", "update"]


def test_config_vault_network_acls():
    """
     Scenario: configure Key Vault network acls property.
     Given:
      - User has provided valid credentials.
      - default action argument.
      - bypass argument.
      - virtual network subnet ID argument.
      - ignore missing vnet Service endpoint argument.
    When:
      - azure-key-vault-create-update command called.

     Then:
      - Ensure number of items is correct.
      - Ensure that each field contains the right values.
    """

    client = mock_client()
    default_action = "Allow"
    bypass = "None"
    subnet_id = "subnet"
    ignore_missing_vnet = True
    ip_rules = []
    network_acl = client.config_vault_network_acls(default_action, bypass, subnet_id, ignore_missing_vnet, ip_rules)

    assert len(network_acl) == 3
    assert network_acl["defaultAction"] == default_action
    assert network_acl["virtualNetworkRules"][0]["id"] == subnet_id
    assert network_acl["virtualNetworkRules"][0]["ignoreMissingVnetServiceEndpoint"] == ignore_missing_vnet


def test_config_vault_properties():
    """
     Scenario: configure Key Vault properties.
     Given:
      - User has provided valid credentials.
      - Key Vault access policy.
      - Key Vault network acl.
    When:
      - azure-key-vault-create-update command called.
     Then:
      - Ensure number of items is correct.
      - Ensure that each field contains the right values.
    """

    client = mock_client()
    permissions = {"keys": ["list", "get", "purge"], "secrets": ["list", "get", "purge"]}
    network_acl = {"defaultAction": "Allow", "bypass": "AzureServices"}

    properties = client.config_vault_properties(OBJECT_ID, TENANT_ID, True, True, True, "standard", permissions, network_acl)

    assert len(properties) == 7
    assert properties["accessPolicies"][0]["objectId"] == OBJECT_ID
    assert properties["accessPolicies"][0]["tenantId"] == TENANT_ID
    assert properties["accessPolicies"][0]["permissions"] == permissions
    assert properties["sku"]["name"] == "standard"
    assert properties["networkAcls"] == network_acl


def test_convert_attributes_to_readable():
    """
     Scenario: convert entity's attributes to readable.
     Given:
       - Key Vault entities' attributes.
    When:
      - Preparing the readable output for the users in the commands.
     Then:
      - Ensure number of items is correct.
      - Ensure that each field contains the right values.
    """

    attributes = {
        "nbf": 1493938410,
        "exp": 1493938410,
        "created": 1493938410,
        "updated": 1493938410,
        "recoveryLevel": "Recoverable+Purgeable",
    }
    readable_attributes = convert_attributes_to_readable(attributes)

    assert len(attributes) == 5
    assert "should_not_be_retrieved_Before" in readable_attributes
    assert "expiry_time" in readable_attributes
    assert "create_time" in readable_attributes
    assert "update_time" in readable_attributes
    assert "recovery_level" in readable_attributes
    assert readable_attributes["create_time"] == "2017-05-04T22:53:30"


def test_convert_key_info_to_readable():
    """
     Scenario: convert key info to readable.
     Given:
       - Key Vault entities' attributes.
    When:
      - Preparing the readable output for the users in the commands.
     Then:
      - Ensure number of items is correct.
      - Ensure that each field contains the right values.
    """

    key = {
        "kid": "https://test.vault.azure.net/keys/test/78deebed173b48e48f55abf87ed4cf71",
        "kty": "RSA",
        "key_ops": ["encrypt", "decrypt", "sign", "verify", "wrapKey", "unwrapKey"],
        "n": "xxx",
        "e": "AQAB",
    }
    readable_key_info = convert_key_info_to_readable(key)
    assert len(readable_key_info) == 5
    assert "key_id" in readable_key_info
    assert "json_web_key_type" in readable_key_info
    assert "key_operations" in readable_key_info
    assert "RSA_modulus" in readable_key_info
    assert "RSA_public_components" in readable_key_info


def test_convert_time_attributes_to_iso():
    attributes = {"exp": 1493938410, "created": 1493938410, "updated": 1493938410, "recoveryLevel": "Recoverable+Purgeable"}
    readable_time_attributes = convert_time_attributes_to_iso(attributes)

    assert len(attributes) == 4
    assert readable_time_attributes["exp"] == "2017-05-04T22:53:30"
    assert readable_time_attributes["created"] == "2017-05-04T22:53:30"
    assert readable_time_attributes["updated"] == "2017-05-04T22:53:30"


@pytest.mark.parametrize(argnames="client_id", argvalues=["test_client_id", None])
def test_test_module_command_with_managed_identities(mocker, requests_mock, client_id):
    """
    Scenario: run test module when managed identities client id provided.
    Given:
     - User has provided managed identities client oid.
    When:
     - test-module called.
    Then:
     - Ensure the out[ut are as expected
    """
    import AzureKeyVault
    from AzureKeyVault import MANAGED_IDENTITIES_TOKEN_URL, main

    def additional_matcher(request):
        return request.qs["resource"] and (not client_id or request.qs["client_id"] == [client_id])

    mock_token = {"access_token": "test_token", "expires_in": "86400"}
    requests_mock.get(MANAGED_IDENTITIES_TOKEN_URL, additional_matcher=additional_matcher, json=mock_token)
    params = {
        "managed_identities_client_id": {"password": client_id},
        "use_managed_identities": "True",
        "subscription_id": {"password": "test"},
        "resource_group": "test_resource_group",
    }
    mocker.patch.object(demisto, "params", return_value=params)
    mocker.patch.object(demisto, "command", return_value="test-module")
    mocker.patch.object(AzureKeyVault, "return_results")
    mocker.patch.object(KeyVaultClient, "list_key_vaults_request")

    main()

    assert "ok" in AzureKeyVault.return_results.call_args_list[0][0]


def test_fetch_credentials_store_in_cortex_mode(mocker):
    """
    Scenario: Fetch credentials in the default "Store in Cortex" mode.
    Given:
     - Configured key vaults and secrets, no specific identifier.
     - Credentials Fetch Mode is "Store in Cortex".
    When:
     - fetch_credentials is called.
    Then:
     - Ensure the secret values are fetched from Azure Key Vault and returned with passwords.
    """
    from AzureKeyVault import fetch_credentials

    client = mock_client()
    get_secret_mock = mocker.patch.object(
        client,
        "get_secret_credentials",
        side_effect=lambda vault, secret: {"user": secret, "password": "value", "name": f"{vault}/{secret}"},
    )
    credentials_mock = mocker.patch.object(demisto, "credentials")

    fetch_credentials(client, [VAULT_NAME], [SECRET_NAME], "", STORE_IN_CORTEX_MODE_YML)

    get_secret_mock.assert_called_once_with(VAULT_NAME, SECRET_NAME)
    credentials = credentials_mock.call_args[0][0]
    assert credentials == [{"user": SECRET_NAME, "password": "value", "name": f"{VAULT_NAME}/{SECRET_NAME}"}]


def test_fetch_credentials_on_demand_mode_returns_names_only(mocker):
    """
    Scenario: Fetch credentials in the "External Credentials Vault (on-demand)" mode.
    Given:
     - Configured key vaults and secrets, no specific identifier.
     - Credentials Fetch Mode is "External Credentials Vault (on-demand)".
    When:
     - fetch_credentials is called.
    Then:
     - Ensure only the credential names are returned with empty passwords and no secret values
       are fetched from Azure Key Vault.
    """
    from AzureKeyVault import fetch_credentials

    client = mock_client()
    get_secret_mock = mocker.patch.object(client, "get_secret_credentials")
    credentials_mock = mocker.patch.object(demisto, "credentials")

    fetch_credentials(client, [VAULT_NAME], [SECRET_NAME, SECRET_NAME_2], "", ON_DEMAND_MODE_YML)

    get_secret_mock.assert_not_called()
    credentials = credentials_mock.call_args[0][0]
    assert credentials == [
        {"user": SECRET_NAME, "password": "", "name": f"{VAULT_NAME}/{SECRET_NAME}"},
        {"user": SECRET_NAME_2, "password": "", "name": f"{VAULT_NAME}/{SECRET_NAME_2}"},
    ]


def test_fetch_credentials_on_demand_mode_with_identifier_fetches_value(mocker):
    """
    Scenario: A specific credential is requested at runtime while in on-demand mode.
    Given:
     - A specific credential identifier in the format KEY_VAULT_NAME/SECRET_NAME.
     - Credentials Fetch Mode is "External Credentials Vault (on-demand)".
    When:
     - fetch_credentials is called with the identifier.
    Then:
     - Ensure the secret value is fetched live from Azure Key Vault and returned.
    """
    from AzureKeyVault import fetch_credentials

    client = mock_client()
    get_secret_mock = mocker.patch.object(
        client,
        "get_secret_credentials",
        return_value={"user": SECRET_NAME, "password": "value", "name": f"{VAULT_NAME}/{SECRET_NAME}"},
    )
    credentials_mock = mocker.patch.object(demisto, "credentials")

    fetch_credentials(client, [], [], f"{VAULT_NAME}/{SECRET_NAME}", ON_DEMAND_MODE_YML)

    get_secret_mock.assert_called_once_with(VAULT_NAME, SECRET_NAME)
    credentials = credentials_mock.call_args[0][0]
    assert credentials == [{"user": SECRET_NAME, "password": "value", "name": f"{VAULT_NAME}/{SECRET_NAME}"}]


def test_fetch_credentials_defaults_to_store_in_cortex_mode(mocker):
    """
    Scenario: Fetch credentials without explicitly passing a fetch mode.
    Given:
     - Configured key vaults and secrets, no specific identifier.
     - No fetch_mode argument is provided (relies on the default).
    When:
     - fetch_credentials is called.
    Then:
     - Ensure the default behavior is "Store in Cortex": the secret values are fetched from
       Azure Key Vault and returned with passwords.
    """
    from AzureKeyVault import fetch_credentials

    client = mock_client()
    get_secret_mock = mocker.patch.object(
        client,
        "get_secret_credentials",
        side_effect=lambda vault, secret: {"user": secret, "password": "value", "name": f"{vault}/{secret}"},
    )
    credentials_mock = mocker.patch.object(demisto, "credentials")

    fetch_credentials(client, [VAULT_NAME], [SECRET_NAME], "")

    get_secret_mock.assert_called_once_with(VAULT_NAME, SECRET_NAME)
    credentials = credentials_mock.call_args[0][0]
    assert credentials == [{"user": SECRET_NAME, "password": "value", "name": f"{VAULT_NAME}/{SECRET_NAME}"}]