惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
有赞技术团队
有赞技术团队
博客园 - 三生石上(FineUI控件)
博客园_首页
博客园 - 【当耐特】
WordPress大学
WordPress大学
月光博客
月光博客
博客园 - 叶小钗
S
SegmentFault 最新的问题
雷峰网
雷峰网
H
Help Net Security
宝玉的分享
宝玉的分享
A
About on SuperTechFans
IT之家
IT之家
J
Java Code Geeks
Hugging Face - Blog
Hugging Face - Blog
D
DataBreaches.Net
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
B
Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Y
Y Combinator Blog

博客园 - 衡子

Ubuntu24.04更改SSH端口 记录安装过程 Azure CLI创建管理员用户 创建VMSS中的instance 创建不带公网IP的VM Azure LSv3系列VM 自动挂载NVMe本地磁盘 Azure AD访问Azure Storage Azure Linux VM使用Managed Identity获取Key-vault的Secret Azure AD SSO with Google Cloud Identity 通过VM SWAP OS DISK升级VM Azure Front Door添加自定义域名 VM间网络PPS和带宽测试 Azure获取access token的方法 VM间记录时延 Windows Terminal的一些配置 安装hping Azure解除不再使用Directory的关联 使用VSCode Remote Containers功能实现开发环境统一 Azure AKS容器网络详解
通过API获取Azure KeyVault Securet
衡子 · 2022-02-17 · via 博客园 - 衡子

在之前的文章中介绍了如何获取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进行访问。