在本地开发时,如何通过“ az登录”而不是服务帐户将@ azure / identity与DefaultCredentials一起使用?

塞巴斯蒂安

不知道这是否已经可以通过某种方式实现,或者是否存在预期的其他“流程”并且有意义,而我尚未发现。

我们使用@ azure / keyvault-secrets + @ azure / identity在整个应用程序和开发环境中访问/管理我们的所有机密/密钥。

在生产环境中,这很容易,因为我们可以直接将服务帐户与应用程序服务相关联,也可以只创建一个服务帐户并将其设置为环境变量,然后再切勿接触。

尽管在本地,出于开发目的,获取我们正在开发的应用程序的秘密密钥/配置并不是理想的选择,但是能够使用来自Azure cli的帐户凭据来基于密码获取秘密信息是理想的选择。开发人员开发应用程序以及他们可以访问的内容,以便我们可以在他们的帐户上强制实施mfa,并仅为其用户帐户管理对密钥的访问等等。

@ azure / identity模块当前是否支持此行为?如果不是,除了为开发人员中的每个应用配置服务帐户外,是否有针对该用例的建议行为。环境?

Jim Xu

根据我的理解,您想使用Azure凭据来获取Azure密钥库的秘密。如果是这样,您可以使用sdk @azure/ms-rest-nodeauth有关Moe的详细信息,请参阅https://github.com/Azure/azure-sdk-for-node/issues/2284详细步骤如下。

  1. 使用VS代码创建保护
npm init -y
npm install @azure/ms-rest-nodeauth
npm install @azure/keyvault
  1. 使用Azure CLI登录Azure
az login
var azure = require('@azure/ms-rest-nodeauth')
var keyvault = require('@azure/keyvault')

async function main() {
    const creds = await azure.AzureCliCredentials.create({ resource: "https://vault.azure.net" })


        const client = new keyvault.KeyVaultClient(creds)
        const secret = await client.getSecret('https://testkey08.vault.azure.net', 'test', '517cc458b7464c379d1d3e85bd2a5c94')
         console.log(secret)
}

main()
  .then(() => {
    console.log("Successfully executed sample.");
  })
  .catch((err) => {
    console.log(err.message);
  });

在此处输入图片说明


更新资料

根据我的测试,如果您使用sdk@azure/keyvault-secrets来获取密钥库的机密,请参考以下代码:

var azure = require('@azure/ms-rest-nodeauth')
var keyvault = require('@azure/keyvault-secrets')

async function main() {
    const creds = await azure.AzureCliCredentials.create({ resource: "https://vault.azure.net" })



        const client = new keyvault.SecretClient('https://<your key vault name>.vault.azure.net',creds)
        const secret = await client.getSecret('your secret name')
         console.log(secret)
}

main()
  .then(() => {
    console.log("Successfully executed sample.");
  })
  .catch((err) => {
    console.log(err.message);
  });

在此处输入图片说明

此外,根据我的测试和研究,如果我们使用sdk@azure/keyvault-secrets@azure/keyvault-secrets,我们将无法使用Azure cli中的帐户凭据来获取秘密。有关更多详细信息,请参阅文档 在此处输入图片说明

因此,如果我们要在本地开发您的应用程序,建议您创建一个服务主体以获取密钥库。具体步骤如下

  1. 创建sp
az ad sp create-for-rbac -n <your-application-name> --skip-assignment
az keyvault set-policy --name <your-key-vault-name> --spn $AZURE_CLIENT_ID --secret-permissions backup delete get list purge recover restore set

  1. 创建.env文件
AZURE_TENANT_ID=<tenant id>
AZURE_CLIENT_ID=<app id>
AZURE_CLIENT_SECRET=<password>
var keyvault = require('@azure/keyvault-secrets')
var azure1 = require('@azure/identity')
const dotenv = require('dotenv');
dotenv.config();
async function main() {
    //const creds = await azure.AzureCliCredentials.create({ resource: "https://vault.azure.net" })


        // console.log("way1")
        // const client = new keyvault.SecretClient('https://testkey08.vault.azure.net',creds)
        // const secret = await client.getSecret('test')
        // //const secret = await client.getSecret('https://testkey08.vault.azure.net', 'test', '517cc458b7464c379d1d3e85bd2a5c94')
        //  console.log(secret)
         console.log("-----------------------")
         console.log("way2")
         const creds1 = new  azure1.DefaultAzureCredential()


          const client1 = new keyvault.SecretClient('https://testkey08.vault.azure.net',creds1)
          const secret1 = await client1.getSecret('test')
          console.log(secret1)
}

main()
  .then(() => {
    console.log("Successfully executed sample.");
  })
  .catch((err) => {
    console.log(err.message);
  });

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章