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
| ID | AzureKeyVault |
|---|---|
| Provider | Microsoft |
| Category | Authentication & Identity Management |
| From Version | 5.5.0 |
| Docker Image | demisto/crypto:1.0.0.10120494 |
| Supported Modules | Agentix 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
- Navigate to Settings > Integrations > Servers & Services.
- Search for Azure Key Vault.
-
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 -
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 - 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,
decrypt2021-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: falsecontentType: 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 Cloudclient_id— Client IDcredentials—tenant_id— Tenant ID (required)certificate_thumbprint— Certificate Thumbprintcredentials_certificate_thumbprint—private_key— Private Keyuse_managed_identities— Use Azure Managed Identitiesmanaged_identities_client_id—subscription_id— Default Subscription ID (required)resource_group_name— Default Resource Group Name (required)isFetchCredentials— Fetches credentialscredentials_fetch_mode— Credentials Fetch Modekey_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-updateUpdate 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-resetRun this command if for some reason you need to rerun the authentication process.
-
azure-key-vault-certificate-getGets information about a specific certificate. This operation requires the certificates/get permission.
-
azure-key-vault-certificate-listList 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-getGet the policy of the specified certificate.This operation requires the certificates/get permission.
-
azure-key-vault-create-updateCreate 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-deleteDelete the specified key vault.
-
azure-key-vault-getGet the specified key vault.
-
azure-key-vault-key-deleteDelete a key of any type from storage in Azure Key vault. This operation requires the keys/delete permission.
-
azure-key-vault-key-getGet the public part of a stored key. This operation requires the keys/get permission.
-
azure-key-vault-key-listList 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-listThe 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-listList all resource groups for a subscription.
-
azure-key-vault-secret-deleteDelete a secret from a specified key vault. This operation requires the secrets/delete permission.
-
azure-key-vault-secret-getGet 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-listList 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-listList 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}"}]