是否可以从 Azure Python SDK 获取 ASC 位置?

如何解决是否可以从 Azure Python SDK 获取 ASC 位置?

我正在使用 Microsoft Azure Security Center (ASC) Management Client Library 获取订阅的安全分数。库中的所有操作都表明

您不应直接实例化此类,而应创建一个 Client 实例,该实例将为您创建它并将其附加为属性

因此,我正在创建一个具有以下规范的 SecurityCenter 客户端:

securitycenter(credentials,subscription_id,asc_location,base_url=None)

但是,在我看来,正确获取 asc_location 信息的唯一方法是使用 securitycenter 客户端来获取它... The spec 与上面的引用相同,{{ 1}}。所以我一直无法创建客户端,因为我需要 ASC 位置才能这样做,我需要创建客户端来获取 ASC 位置。

文档中提到

ASC 存储订阅数据的位置。可以从获取位置中检索

在 Python SDK 文档中搜索搜索此“获取位置”没有给我任何信息(除了 REST API)。我错过了什么吗?我们是否应该像 SDK 存储库中的 this SO postthis GitHub issue 那样对位置进行硬编码?

解决方法

如官方 API 参考 list locations 所示:

特定订阅的负责 ASC 的位置(主页 地区)。对于每个订阅,只有一个负责位置。

它不会改变,因此如果您已经知道您订阅的 ref_code 的值,您可以对该值进行硬编码。

但每个订阅可能有不同的 asc_location 值(我的 2 个 Azure 订阅有不同的 asc_location 值)。 所以如果你有很多 Azure 订阅,你可以通过 API 查询 class PaymentView(View): def get(self,*args,**kwargs): order = Order.objects.get(user=self.request.user,ordered=False) if order.billing_address: context = { 'order': order,'DISPLAY_COUPON_FORM': False,'STRIPE_PUBLIC_KEY': settings.STRIPE_PUBLIC_KEY } return render(self.request,'payment.html',context) else: messages.warning(self.request,"You've not added billing address.") return redirect('e_commerce:checkout') def post(self,ordered=False) token = self.request.POST.get('stripeToken') amount = int(order.get_total()*100) # cents try: charge = stripe.Charge.create( amount=amount,currency="usd",source=token ) # order.ordered = True # create the payment payment = Payment() payment.stripe_charge_id = charge['id'] payment.user = self.request.user payment.amount = order.get_total() payment.save() # assign the payment to the order order_items = order.items.all() order_items.update(ordered=True) for item in order_items: item.save() order.ordered = True order.payment = payment # TODO assign ref code order.ref_code = create_ref_code() order.save() # print("your order placed!") messages.success(self.request,"your order was successful.") return redirect("/e_commerce") except stripe.error.CardError as e: # Since it's a decline,stripe.error.CardError will be caught body = e.json_body err = body.get('error',{}) messages.warning(self.request,f"{err.get('messages')}") return redirect("/e_commerce") except stripe.error.RateLimitError as e: # Too many requests made to the API too quickly messages.warning(self.request,"Rate limit error") return redirect("/e_commerce") except stripe.error.InvalidRequestError as e: # Invalid parameters were supplied to Stripe's API messages.warning(self.request,"Invalid parameters,Please try again!") return redirect("/e_commerce") except stripe.error.AuthenticationError as e: # Authentication with Stripe's API failed # (maybe you changed API keys recently) messages.warning(self.request,"Authentication error ") return redirect("/e_commerce") except stripe.error.APIConnectionError as e: # Network communication with Stripe failed messages.warning(self.request,"Network error") return redirect("/e_commerce") except stripe.error.StripeError as e: # Display a very generic error to the user,and maybe send # yourself an email messages.warning( self.request,"Something went wrong.You were not charged.Please try again.") return redirect("/e_commerce") except Exception as e: # Something else happened,completely unrelated to Stripe messages.warning(self.request,"A serious error occured.We have been notified.") return redirect("/e_commerce") messages.warning(self.request,"Invalid data received.") return redirect("payment/stripe") 据我所知,这是我能找到的唯一方法)然后使用SDK 获取安全分数,请尝试以下代码:

asc_location

结果: enter image description here enter image description here

,

我最近遇到了这个问题。

根据我的观察,我可以使用订阅下的任何位置来启动 SecurityCenter 客户端。然后 client.locations.list() 正好给了我一个 ASC 位置。

# Any of SubscriptionClient.subscriptions.list_locations will do
location = 'eastasia'

client = SecurityCenter(
            credential,my_subscription_id,asc_location=location
        )

data = client.locations.list().next().as_dict()
pprint(f"Asc location: {data}")

就我而言,无论我的输入是 westcentralus,它始终是 eastasia

请注意,如果使用 get 而不是 list 会出现异常

data = client.locations.get().as_dict()
pprint(f"Asc location: {data}")
# azure.core.exceptions.ResourceNotFoundError: (ResourceNotFound) Could not find location 'eastasia'

所以我做的有点尴尬,

  1. 使用我订阅的位置创建一个 SecurityCenter 客户端
  2. client.locations.list() 获取 ASC 位置
  3. 使用检索到的 ASC 位置再次创建 SecurityCenter 客户端。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?