Scripts/billable_assets.py (43 lines of code) (raw):

#imports from azure.defender.easm import EasmClient from azure.mgmt.defendereasm import EasmMgmtClient from azure.identity import ClientSecretCredential import xlsxwriter import sys # Script parameters client_id = '' # App Client secret client_secret = '' # Tenant ID tenant_id = '' # Subscription ID subcription_id = '' # Resource Group Name Where EASM resides resource_group = '' # EASM Region region = '' # Name of EASM resource workspace_name = '' # Get credentials and create client completeCredential = ClientSecretCredential(tenant_id, client_id, client_secret) dataEndpoint = f'{region}.easm.defender.microsoft.com' dataClient = EasmClient(dataEndpoint, resource_group, subcription_id, workspace_name, completeCredential) controlClient = EasmMgmtClient(completeCredential, subcription_id) workbook = xlsxwriter.Workbook('AssetBreakdown.xlsx', {'strings_to_urls': False}) worksheet = workbook.add_worksheet('Assets') assetType_list = ["billable_ip_addresses", "billable_domains", "billable_hosts"] def get_billable_list(assetType, count): page = 0 last_page = False while last_page is False: billable = dataClient.reports.snapshot(body={"metric": assetType, "page": page, "size": 100}) last_page = billable['assets']['last'] page += 1 for each_biilable_asset in billable['assets']['content']: print(each_biilable_asset['name']) worksheet.write(count, 0, assetType) worksheet.write(count, 1, each_biilable_asset['name']) count += 1 return count def create_headers(): # Headers worksheet.write(0, 0, "Asset Type") worksheet.write(0, 1, "Asset Name") def main(): create_headers() AssetPageCount = 1 for each_assetType in assetType_list: AssetPageCount = get_billable_list(each_assetType, AssetPageCount) workbook.close() if __name__ == '__main__': sys.exit(main())