java - 如何启用和配置网络安全组的流日志
问题描述
我无法使用 NetworkWatcherRG 或其他现有资源组中的存储帐户为网络安全组启用和配置流日志。我想知道我在 sdk 上做错了什么,因为我可以从 azure gui 轻松做到这一点。
重现
- 为正确区域中的网络观察者检索网络观察者
- 检索区域中现有网络安全组的流设置
- 更新流设置以启用日志记录并将存储设置为现有存储帐户
final PagedList<NetworkWatcher> nws = adapter.getItsAzure().networkWatchers().list();
NetworkWatcher retval = null;
for(final NetworkWatcher nw : nws ) {
if(nw.region().equals(Region.GOV_US_VIRGINIA)) {
retval = nw;
}
}
final ResourceGroup rg = adapter.getItsAzure().resourceGroups().getByName(retval.resourceGroupName());
final StorageAccount sa = adapter.getItsAzure().storageAccounts().define(ResourceNameType.STORAGE_ACCOUNT.randomName("networkwatchersa"))
.withRegion(Region.GOV_US_VIRGINIA)
.withExistingResourceGroup(rg)
.withAccessFromAllNetworks()
.create();
final String rgName = "resource-group-38f6628eccb84ec9aa1cd9b3c8f5f815";
final NetworkSecurityGroup nsg = adapter.getItsAzure().networkSecurityGroups().getByResourceGroup(rgName, "add-network1-nat-securitygroup");
final FlowLogSettings fls = retval.getFlowLogSettings(nsg.id());
LOGGER.info("Found fls with enabled {} and storage id {}", fls.enabled(), fls.storageId());
fls.update()
.withLogging()
.withStorageAccount(sa.id())
.apply();
The client has permission to perform action 'Microsoft.OperationalInsights/workspaces/sharedKeys/action' on scope '/subscriptions/{subscription_id}/resourceGroups/NetworkWatcherRG/providers/Microsoft.Network/networkWatchers/NetworkWatcher_usgovvirginia', however the linked subscription 'resourcegroups' was not found
注意:订阅 id 出现在上述错误中,它刚刚被编辑以发布
预期行为 预期能够在存储帐户中为 nsg 启用流日志,或者更详细的错误消息,我目前无法确定问题所在
设置:
操作系统:macOS IDE:Eclipse 版本:2019-06 (4.12.0) 使用的库版本:1.23
已尝试将服务主体作为订阅中的参与者和所有者进行附加上下文调用。我试图理解错误消息,因为 sdk 调用似乎很简单。我怀疑这是权限或所有权问题。
解决方案
我已经从我这边复制了这个问题。最后我已经解决了。只需忽略您收到的误导性错误消息。
您需要向 FlowLogSettings 提供 TrafficAnalyticsConfigurationProperties,即使您不想打开它。因此,您需要先创建一个日志分析工作区。您可以参考以下代码为 NSG 启用和配置流日志。
NetworkWatcher nw = azure.networkWatchers().listByResourceGroup("NetworkWatcherRG").get(1);
NetworkSecurityGroup nsg = azure.networkSecurityGroups().getByResourceGroup("", "");
StorageAccount sa = azure.storageAccounts().getByResourceGroup("", "");
FlowLogSettings settings = nw.getFlowLogSettings(nsg.id());
TrafficAnalyticsConfigurationProperties networkWatcherFlowAnalyticsConfiguration = new TrafficAnalyticsConfigurationProperties();
networkWatcherFlowAnalyticsConfiguration.withWorkspaceId("").withWorkspaceRegion(Region.ASIA_SOUTHEAST.toString()).withWorkspaceResourceId("").withEnabled(false);
settings.inner().flowAnalyticsConfiguration()
.withNetworkWatcherFlowAnalyticsConfiguration(networkWatcherFlowAnalyticsConfiguration);
settings.update().withLogging().withRetentionPolicyEnabled().withRetentionPolicyDays(30).withStorageAccount(sa.id()).apply();
推荐阅读
- spring-security - 将“nonce”值添加到 Spring 授权服务器的令牌响应中
- json - Python 2.7,Pycryptodome:由于编码问题,无法在服务器端验证私钥签名
- c# - 在 C# 中从字典创建一个随机列表,包括一个特定的选定项
- javascript - 我正在尝试根据使用 forEach 的另一个 API 请求的结果发出 API 请求。我如何在不使用 forEach 的情况下存档相同的结果
- matlab - 使用 fmincon() 求解矩阵形式的非线性程序
- html - 浏览器如何解释非标准/自定义 html 标签
- javascript - 按字母顺序搜索在 DataTable 中不起作用
- python - 将 Pandas 数据框传递给 python 中的函数
- angular - 如何从路由器插座中的另一个组件更改角度组件的不透明度?
- python - 计算shell脚本中矩阵中沿行和列但不是对角线的连接非零的数量