gpt4 book ai didi

azure - 在本地开发时,如何使用 @azure/identity 和来自 'az login' 的 DefaultCredentials 而不是服务帐户?

转载 作者:行者123 更新时间:2023-12-04 04:22:44 25 4
gpt4 key购买 nike

不确定这是否已经以某种方式成为可能,或者是否存在预期的不同“流程”,并且我尚未发现它是否有意义。

我们使用 @azure/keyvault-secrets + @azure/identity 来访问/管理应用程序和开发环境中的所有 secret / key 。

在生产环境中,这很容易,因为我们可以直接将服务帐户与应用服务相关联,或者只是创建一个服务帐户并将其设置在环境变量中,然后永远不要碰它。

但在本地,出于开发目的,必须获取我们正在开发的应用程序的 key /配置并不理想,最好能够使用 azure cli 中的帐户凭据来检索 secret 基于开发应用程序的开发人员以及他们有权访问的内容,以便我们可以在他们的帐户上实现 MFA 并仅管理其用户帐户的 key 访问权限等。

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

最佳答案

根据我的理解,您想要使用 azure cli 凭证来获取 Azure key 保管库 secret 。如果是这样,您可以使用 sdk @azure/ms-rest-nodeauth。教育部详情请引用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
  • 使用 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);
    });

    enter image description here

    <小时/>

    更新

    根据我的测试,如果您使用sdk @azure/keyvault-secrets获取Key Vault Secret,请引用以下代码:

    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);
    });

    enter image description here

    另外,根据我的测试和研究,如果我们使用sdk @azure/keyvault-secrets@azure/keyvault-secrets,我们没有办法使用 azure cli 中的帐户凭据来检索 secret 。更多详情请引用document enter image description here

    因此,如果我们想在本地开发您的应用程序,我建议您创建一个服务主体来获取 key 保管库。详细步骤如下

    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

  • 创建 .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);
    });

    enter image description here

    关于azure - 在本地开发时,如何使用 @azure/identity 和来自 'az login' 的 DefaultCredentials 而不是服务帐户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58691507/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com