如何轮换 Azure 日志分析工作区的密钥
How to rotate keys for azure log analytics workspace
以编程方式轮换 Azure Log Analytics Workspace 密钥的推荐方法是什么?
我找到的唯一描述方式是通过 REST API。但是它似乎不起作用:
curl -X POST -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" -d "" https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.OperationalInsights/workspaces/${LAW_NAME}/listKeys?api-version=2015-03-20
curl -X POST -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" -d "" https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.OperationalInsights/workspaces/${LAW_NAME}/regenerateSharedKey?api-version=2015-03-20
第一次调用列表键没有问题。第二个尝试轮换密钥失败并显示错误消息:
{
"message": "No HTTP resource was found that matches the request URI 'https://opinsightsweuams.trafficmanager.net/api/subscriptions/XXXXX/resourcegroups/XXXXX/providers/Microsoft.OperationalInsights/workspaces/XXXXX/regenerateSharedKey?api-version=2015-03-20&contextId=XXXXX'."
}
这个API还有效吗?还有其他方法可以轮换密钥吗?
01/23 更新:
我收到了支持团队的反馈。
Regenerate Shared Keys api 之前有一点改动,但是文档没有更新:(。
您需要添加值为primarySharedKey或secondarySharedKey的参数keyType。
变更原因:之前使用api重新生成key时,主副key会一起重新生成。所以有用户反馈我们应该更新api,让它每次只重新生成一个key。
我测试过,工作正常。测试截图如下:
原文:
Regenerate Shared Keys api 现在不起作用。
实际使用的api如下:
用于重新生成主键:
https://www.mms.microsoft.com/Embedded/Api/arm/management/CustomerManagement/AgentRegenerateSharedKey?keyType=primarySharedKey
.
用于重新生成辅助密钥:
https://www.mms.microsoft.com/Embedded/Api/arm/management/CustomerManagement/AgentRegenerateSharedKey?keyType=secondarySharedKey
以下是检查 api 以及如何重新生成新共享密钥的步骤。
步骤 1.Nav 到 Azure 门户 -> 您的 Log Analytics 工作区 -> 高级设置 -> 连接的源 -> Windows 服务器,然后按 F12 按钮检查实际请求(我是使用 Edge 浏览器)-> 然后单击主键的 Regenerate
按钮。截图如下(从截图可以看出,实际请求url是https://www.mms.microsoft.com/Embedded/Api/xxx
):
步骤2.Since我们知道了实际的url,那我们怎么才能拿到token呢?
简单的方法就是你可以从步骤1中获得令牌,当通过F12按钮查看任务详情时,你也可以找到令牌(它是临时的)。
另一种方法是,打开visual studio -> 使用你的Azure 帐户登录 -> 创建一个控制台项目 -> 然后安装包Microsoft.Azure.Services.AppAuthentication。然后在控制台项目中写入如下代码:
using Microsoft.Azure.Services.AppAuthentication;
using System;
namespace ConsoleApp17
{
class Program
{
static void Main(string[] args)
{
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = azureServiceTokenProvider.GetAccessTokenAsync("https://management.core.windows.net/").Result;
Console.WriteLine(accessToken);
Console.WriteLine("**completed**");
Console.ReadLine();
}
}
}
步骤3:After获取token,可以使用token重新生成Shared key。
我做了重新生成主键的测试,并使用了postman工具。
打开 postman,对于 headers 和 url,请按照下面的屏幕截图操作:
for Body,按照下面的截图:
最后点击发送按钮,可以看到回复200 ok。并刷新入口,可以看到生成了新的主键
如果您更喜欢使用 curl 或其他编程语言来执行此操作,只需按照上述步骤操作,并提供适当的 request headers / token / request body
.
补充一下@ivan-yang的解决方案,用curl实现的方法是:
RESP=`curl -X POST -d "grant_type=client_credentials&client_id=${servicePrincipalId}&client_secret=${servicePrincipalKey}&resource=https%3A%2F%2Fmanagement.azure.com%2F" https://login.microsoftonline.com/${TENANT_ID}/oauth2/token`
TOKEN=`echo ${RESP} | jq -r '.access_token'`
curl -X POST -H "x-ms-client-auth-token: Bearer ${TOKEN}" -H "Content-Type: application/json" \
-H "x-ms-client-workspace-name: ${LAW_NAME}" \
-H "x-ms-client-workspace-path: /subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.OperationalInsights/workspaces/${LAW_NAME}" \
-d "{\"workspacePath\":\"/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.OperationalInsights/workspaces/${LAW_NAME}\",\"data\":{}}" \
https://www.mms.microsoft.com/Embedded/Api/arm/management/CustomerManagement/AgentRegenerateSharedKey?keyType=secondarySharedKey
-- 编辑
使用 az rest 命令更容易:
az rest -m POST -u https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.OperationalInsights/workspaces/${LAW_NAME}/regenerateSharedKey?api-version=2015-03-20\&keyType=secondarySharedKey
以编程方式轮换 Azure Log Analytics Workspace 密钥的推荐方法是什么?
我找到的唯一描述方式是通过 REST API。但是它似乎不起作用:
curl -X POST -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" -d "" https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.OperationalInsights/workspaces/${LAW_NAME}/listKeys?api-version=2015-03-20
curl -X POST -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" -d "" https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.OperationalInsights/workspaces/${LAW_NAME}/regenerateSharedKey?api-version=2015-03-20
第一次调用列表键没有问题。第二个尝试轮换密钥失败并显示错误消息:
{
"message": "No HTTP resource was found that matches the request URI 'https://opinsightsweuams.trafficmanager.net/api/subscriptions/XXXXX/resourcegroups/XXXXX/providers/Microsoft.OperationalInsights/workspaces/XXXXX/regenerateSharedKey?api-version=2015-03-20&contextId=XXXXX'."
}
这个API还有效吗?还有其他方法可以轮换密钥吗?
01/23 更新:
我收到了支持团队的反馈。
Regenerate Shared Keys api 之前有一点改动,但是文档没有更新:(。
您需要添加值为primarySharedKey或secondarySharedKey的参数keyType。
变更原因:之前使用api重新生成key时,主副key会一起重新生成。所以有用户反馈我们应该更新api,让它每次只重新生成一个key。
我测试过,工作正常。测试截图如下:
原文:
Regenerate Shared Keys api 现在不起作用。
实际使用的api如下:
用于重新生成主键:
https://www.mms.microsoft.com/Embedded/Api/arm/management/CustomerManagement/AgentRegenerateSharedKey?keyType=primarySharedKey
.
用于重新生成辅助密钥:
https://www.mms.microsoft.com/Embedded/Api/arm/management/CustomerManagement/AgentRegenerateSharedKey?keyType=secondarySharedKey
以下是检查 api 以及如何重新生成新共享密钥的步骤。
步骤 1.Nav 到 Azure 门户 -> 您的 Log Analytics 工作区 -> 高级设置 -> 连接的源 -> Windows 服务器,然后按 F12 按钮检查实际请求(我是使用 Edge 浏览器)-> 然后单击主键的 Regenerate
按钮。截图如下(从截图可以看出,实际请求url是https://www.mms.microsoft.com/Embedded/Api/xxx
):
步骤2.Since我们知道了实际的url,那我们怎么才能拿到token呢?
简单的方法就是你可以从步骤1中获得令牌,当通过F12按钮查看任务详情时,你也可以找到令牌(它是临时的)。
另一种方法是,打开visual studio -> 使用你的Azure 帐户登录 -> 创建一个控制台项目 -> 然后安装包Microsoft.Azure.Services.AppAuthentication。然后在控制台项目中写入如下代码:
using Microsoft.Azure.Services.AppAuthentication;
using System;
namespace ConsoleApp17
{
class Program
{
static void Main(string[] args)
{
AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
string accessToken = azureServiceTokenProvider.GetAccessTokenAsync("https://management.core.windows.net/").Result;
Console.WriteLine(accessToken);
Console.WriteLine("**completed**");
Console.ReadLine();
}
}
}
步骤3:After获取token,可以使用token重新生成Shared key。
我做了重新生成主键的测试,并使用了postman工具。
打开 postman,对于 headers 和 url,请按照下面的屏幕截图操作:
for Body,按照下面的截图:
最后点击发送按钮,可以看到回复200 ok。并刷新入口,可以看到生成了新的主键
如果您更喜欢使用 curl 或其他编程语言来执行此操作,只需按照上述步骤操作,并提供适当的 request headers / token / request body
.
补充一下@ivan-yang的解决方案,用curl实现的方法是:
RESP=`curl -X POST -d "grant_type=client_credentials&client_id=${servicePrincipalId}&client_secret=${servicePrincipalKey}&resource=https%3A%2F%2Fmanagement.azure.com%2F" https://login.microsoftonline.com/${TENANT_ID}/oauth2/token`
TOKEN=`echo ${RESP} | jq -r '.access_token'`
curl -X POST -H "x-ms-client-auth-token: Bearer ${TOKEN}" -H "Content-Type: application/json" \
-H "x-ms-client-workspace-name: ${LAW_NAME}" \
-H "x-ms-client-workspace-path: /subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.OperationalInsights/workspaces/${LAW_NAME}" \
-d "{\"workspacePath\":\"/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.OperationalInsights/workspaces/${LAW_NAME}\",\"data\":{}}" \
https://www.mms.microsoft.com/Embedded/Api/arm/management/CustomerManagement/AgentRegenerateSharedKey?keyType=secondarySharedKey
-- 编辑
使用 az rest 命令更容易:
az rest -m POST -u https://management.azure.com/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RESOURCE_GROUP_NAME}/providers/Microsoft.OperationalInsights/workspaces/${LAW_NAME}/regenerateSharedKey?api-version=2015-03-20\&keyType=secondarySharedKey