Scripts/Get-AzKeyVaultAccessPolicies.ps1

param(
    [Parameter(Mandatory = $true)][string] $KeyVaultName = $(throw "Name of the Azure Key Vault is required"),
    [Parameter(Mandatory = $false)][string] $ResourceGroupName = ""
)

$keyVault = $null
if ($resourceGroupName -eq '') {
    Write-Verbose "Looking for the Azure Key Vault with name '$keyVaultName'..."
    $keyVault = Get-AzKeyVault -VaultName $keyVaultName
} else {
    Write-Verbose "Looking for the Azure Key Vault with name '$keyVaultName' in resource group '$resourceGroupName'.."
    $keyVault = Get-AzKeyVault -VaultName $keyVaultName -ResourceGroupName $resourceGroupName
}

$armAccessPolicies = @()
if ($keyVault) {
    Write-Verbose "Found Azure Key Vault '$keyVaultName'"
    
    $keyVaultAccessPolicies = $keyVault.accessPolicies
    if ($keyVaultAccessPolicies) {    
        foreach ($keyVaultAccessPolicy in $keyVaultAccessPolicies) {
            $armAccessPolicy = [pscustomobject]@{
                tenantId = $keyVaultAccessPolicy.TenantId
                objectId = $keyVaultAccessPolicy.ObjectId
            }

            $armAccessPolicyPermissions = [pscustomobject]@{
                keys         = $keyVaultAccessPolicy.PermissionsToKeys
                secrets      = $keyVaultAccessPolicy.PermissionsToSecrets
                certificates = $keyVaultAccessPolicy.PermissionsToCertificates
                storage      = $keyVaultAccessPolicy.PermissionsToStorage
            }

            Write-Verbose "Azure Key Vault access policy successfully retrieved for TenantId: $($armAccessPolicy.tenantId) and ObjectId: $($armAccessPolicy.ObjectId)"
            Write-Debug ($armAccessPolicyPermissions | Format-list | Out-String) 

            $armAccessPolicy | Add-Member -MemberType NoteProperty -Name permissions -Value $armAccessPolicyPermissions
            $armAccessPolicies += $armAccessPolicy
        }       
       
        Write-Host "Successfully retrieved Azure Key Vault access policies" -ForegroundColor Green
    }    
} else {
    Write-Warning "Azure Key Vault '$keyVaultName' could not be found, please check if the provided vault name and/or resource group name is correct."
}

$armAccessPoliciesParameter = [pscustomobject]@{
    list = $armAccessPolicies
}

return $armAccessPoliciesParameter