通过API获取Azure KeyVault Securet
在之前的文章中介绍了如何获取Azure的Access Token。本文将介绍,如何用获取的Access Token访问Azure的KeyVault的Secret。
一 创建Service Principal
通过Azure CLI创建全局Reader的用户,其中secret是创建SP时反显的PASSWORD,这个值只出现一次,创建完成后就不可见了:
name="whuser01" sub_id=$(az account list --query "[?isDefault]" | jq -r .[].id) az ad sp create-for-rbac -n $name --role reader --scopes /subscriptions/$sub_id client_id=$(az ad sp list --display-name $name | jq -r .[].appId) tenant_id=$(az ad sp list --display-name $name | jq -r .[].appOwnerOrganizationId) obj_id=$(az ad sp list --display-name $name | jq -r .[].id) secret="xxxx"
二 创建Azure KeyVault
1 创建Azure KeyVault
通过Azure Cli创建KeyVault服务
kvname="vhvk01" rg="kv" az_user=$(az account show -n dn-china-ats-weiheng | jq -r .user.name) az_user_id=$(az ad user list --upn $az_user | jq -r .[].objectId) az group create -n $rg -l eastasia az keyvault create -n $kvname -g $rg -l eastasia --no-self-perms --enable-soft-delete false
2 设置用户权限
通过Azure CLI设置用户权限。这里采用的是Vault access policy的方式,当然也可以在创建KeyVault时,采用RBAC的方式。
az keyvault set-policy -n $kvname -g $rg --secret-permissions all --object-id $obj_id az keyvault set-policy -n $kvname -g $rg --secret-permissions all --object-id $az_user_id
3 创建secret
az keyvault secret set -n $s_name --vault-name $kvname --value $s_value s_id=$(az keyvault secret show -n test --vault-name $kvname | jq -r .id)
三 获取service principal的Access Token
1通过REST API获取Access Token
Access Token是通过call Azure的API实现的,这里需要注意的是,resource由于是keyvault,所以resource的参数需要定义成https://vault.azure.net。
具体curl的命令如下:
curl -X POST -s \ -d "grant_type=client_credentials" \ -d "client_id=$client_id" \ -d "client_secret=$secret" \ -d "resource=https://vault.azure.net" \ https://login.microsoftonline.com/$tenant_id/oauth2/token | jq -r .access_token > /tmp/token.txt token=$(cat /tmp/token.txt)
2通过Azure CLI获取Token
当然可以通过Azure CLI获取Token,具体命令如下:
token=$(az account get-access-token --resource https://vault.azure.net | jq -r .accessToken)
四 用Access Token调用Azure KeyVault
在做好这些准备工作后,我们通过HTTP的REST API Call去获取KeyVault的secret内容。具体如下:
curl -s -X GET -H "Authorization: Bearer $token" $s_id?api-version=7.2 | jq -r .value
五 总结
本文通过如何获取Access Token,并通过对service principal的授权,实现通过Access Token对Azure KeyVault进行访问。