• 通过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 .[].appOwnerTenantId)
    obj_id=$(az ad sp list --display-name $name | jq -r .[].objectId)
    
    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进行访问。

  • 相关阅读:
    java1.8--OptionalInt,OptionalDouble,OptionalLong类
    java1.8--Optional类
    java1.8--Null Object模式
    JDK自带的缓存--包装类的缓存
    函数式编程--lambda表达式对比匿名内部类
    java1.8--改进的接口
    Mybatis Generator(定制化)代码生成器
    Mybatis
    git fork
    git原理图解
  • 原文地址:https://www.cnblogs.com/hengwei/p/15906700.html
Copyright © 2020-2023  润新知