我正在使用 Azure JAVA SDK 将资源部署到 Azure。我已经让它与我的所有资源(网络、子网、安全组、vms、vss、负载平衡器等)一起使用。但是,我遇到的问题是我无法使用我认为是动态的任何语法来部署具有已定义网络安全规则的网络安全组。我看到存在对象(例如 SecurityRuleInner),我可以在其中定义我的规则 例如,此方法使用必要的成员集构建 SecurityRuleInner:
private SecurityRuleInner getSecurityRuleInner(MySecurityRuleData rule) {
return new SecurityRuleInner()
.withAccess(rule.getAccesType().get())
.withDirection(rule.getAccessDirection().get())
.withDestinationAddressPrefix(rule.getDestinationAddress())
.withDestinationPortRange(rule.getDestinationPort())
.withSourceAddressPrefix(rule.getSourceAddress())
.withSourcePortRange(rule.getSourcePort())
.withName(rule.getName())
.withProtocol(rule.getProtocol().get())
.withPriority(rule.getPriority());
}
(注意:这里的“MySecurityRuleData”对象是一个 POJO,存储了我制定这条规则所需的信息。)
但是,我找不到将这个 SecurityRuleInner 附加到我正在创建的实际安全组的方法,并且除了以下内容之外,我找不到定义安全规则的方法:
private NetworkSecurityGroup addRuleAllowIn(NetworkSecurityGroup NSG, MySecurityRuleData rule) {
return NSG.update()
.defineRule(rule.getName())
.allowInbound()
.fromAddress(rule.getSourceAddress())
.fromPort(Integer.parseInt(rule.getSourcePort()))
.toAnyAddress()
.toAnyPort()
.withAnyProtocol()
.withPriority(100)
.attach()
.apply();
}
(注意:这里的“MySecurityRuleData”对象是一个 POJO,存储了我制定这条规则所需的信息。)
显然,这是不可接受的,因为我需要为每种可能性提供一种方法(formAnyAddress,具有特定的目标端口,具有特定的目标地址,具有特定的源端口将需要 1 种方法,那么这 4 种可能性的任何组合都是它自己的方法,然后我必须有控制逻辑来确定调用哪个方法)这显然不好。我可以在 SDK 的 beta 版本中看到您可以定义并附加到网络安全组的对象。我在这里遗漏了什么,或者,这种语法消失了吗?
编辑:为了更清楚,请参阅NetworkSecurityRule 界面。一些 getter 的例子:
NetworkSecurityRule s;
s.access() //this is the TYPE of access - ALLOW or DENY
s.direction() //this is the DIRECTION of the rule - INBOUD or OUTBOUND
s.protocol() //this is the PROTOCOL (UDP, TCP or ANY)
s.destinationAddressPrefix() //destination add
您可以看到使用 .defineRule() 方法的语法在内部设置了这些,但是需要调用不同的方法来设置它们。例如,要定义入站规则,请调用 .allowInbound() 或 .denyInbound()。然后,SecurityRule 本身会将 Direction 设置为 INBOUND 或 OUTBOUND,由您调用其中的哪一个决定,并且还将 Access 设置为 ALLOW 或 DENY,再次由您调用的特定方法决定。
我找不到接受 ACCESS 和 DIRECTION 的构造函数,也找不到发送这些值的设置器,这将创建一个可以传递给 Azure 的对象。