【问题标题】:Unable to regenerate storage key with Azure Management API无法使用 Azure 管理 API 重新生成存储密钥
【发布时间】:2020-06-05 23:20:54
【问题描述】:

我无法使用 /regenerateKey [1] 通过 Azure 管理 API 为存储帐户重新生成密钥。

我在 JavaScript 中使用以下代码(资源已删除订阅)

const { ClientSecretCredential } = require('@azure/identity');
const { SecretClient } = require('@azure/keyvault-secrets');
const MSRestAzure = require('ms-rest-azure');

const keyVaultName = process.env.KEY_VAULT_NAME;
const KVUri = `https://${keyVaultName}.vault.azure.net`;

const credential = new ClientSecretCredential(
  process.env.AZURE_TENANT_ID,
  process.env.AZURE_CLIENT_ID,
  process.env.AZURE_CLIENT_SECRET,
);

const vault = new SecretClient(KVUri, credential);

function getCreds() {
  return new Promise((res, rej) => {
    MSRestAzure.loginWithServicePrincipalSecret(
      process.env.AZURE_CLIENT_ID,
      process.env.AZURE_CLIENT_SECRET,
      process.env.AZURE_TENANT_ID,
      (err, creds) => {
        if (err) {
          rej(err);
          return;
        }
        res(creds);
      },
    );
  });
}

const getResourceUrl = (resource, action) => `https://management.azure.com${resource}/${action}?api-version=2019-04-01`;
const resource = "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRg/providers/Microsoft.Storage/storageAccounts/MyStore


const creds = await getCreds();
const client = new MSRestAzure.AzureServiceClient(creds);

const regenUrl = getResourceUrl(resource, 'regenerateKey');

await client.sendRequest({ method: 'POST', url: regenUrl }).then(console.log);

我收到了UnexpectedException 回复 -

{
    "error": {
        "code": "UnexpectedException",
        "message": "The server was unable to complete your request."
    }
}

客户端 ID/秘密属于可以访问存储帐户的应用注册,以及该订阅的贡献者和存储帐户密钥操作员。

我认为我没有正确地形成请求。

【问题讨论】:

    标签: azure azure-storage azure-blob-storage azure-management-api


    【解决方案1】:

    如果我不指定请求正文,我可以重现错误。

    请按以下格式提供请求正文:

    {
        keyName: "key1 or key2 (basically which key you want to regenerate)"
    }
    

    【讨论】:

    • 没有看到我必须发送请求正文!对于那些查看代码的人, await client.sendRequest({ method: 'POST', url: regenUrl }).then(console.log);变成 await client.sendRequest({ method: 'POST', url: regenUrl, body: { keyName: $MYKEY } }).then(console.log);谢谢!
    猜你喜欢
    • 2019-05-14
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2015-07-27
    • 2019-12-24
    • 2022-12-11
    • 2020-08-22
    • 2018-03-15
    相关资源
    最近更新 更多