从Azure数据湖存储(第2代)审核日志检索

时间:2019-06-11 12:12:21

标签: azure

我正在尝试从Azure Data Lake Storage(第二代)中检索审核日志

到目前为止,我已经尝试使用Gen 2中的 AZCOPY,REST API (目前不支持)来检索(连接)审核日志,并寻找用于检索日志的替代解决方案

使用 AZCOPY 进行连接时,它仅使用基于API的调用,而当我尝试检索日志时,我得到一个错误,即分层名称空间帐户不支持API调用。图片已添加以供参考。 Snapshot of AZCOPY error

此用例是否有任何解决方法,或者我可以尝试检索日志的任何其他方法?

3 个答案:

答案 0 :(得分:0)

更新

我可以使用读取的api从ADLS GEN2获取文件内容。我可以为您提供一个由python代码编写的示例(您可以根据我的代码更改为任何其他语言)。从下面的代码中,您可以直接获取文件内容,或获取可以在邮递员中使用的Authorization

Python 3.7代码如下:

import requests
import datetime
import hmac
import hashlib
import base64

storage_account_name = 'xxx'
storage_account_key = 'xxx'
api_version = '2018-11-09'
request_time = datetime.datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT')
#the file path on adls gen2
FILE_SYSTEM_NAME='dd1/myfile.txt'

string_params = {
    'verb': 'GET',
    'Content-Encoding': '',
    'Content-Language': '',
    'Content-Length': '',
    'Content-MD5': '',
    'Content-Type': '',
    'Date': '',
    'If-Modified-Since': '',
    'If-Match': '',
    'If-None-Match': '',
    'If-Unmodified-Since': '',
    'Range': '',
    'CanonicalizedHeaders': 'x-ms-date:' + request_time + '\nx-ms-version:' + api_version,
    'CanonicalizedResource': '/' + storage_account_name+'/'+FILE_SYSTEM_NAME
    }

string_to_sign = (string_params['verb'] + '\n' 
                  + string_params['Content-Encoding'] + '\n'
                  + string_params['Content-Language'] + '\n'
                  + string_params['Content-Length'] + '\n'
                  + string_params['Content-MD5'] + '\n' 
                  + string_params['Content-Type'] + '\n' 
                  + string_params['Date'] + '\n' 
                  + string_params['If-Modified-Since'] + '\n'
                  + string_params['If-Match'] + '\n'
                  + string_params['If-None-Match'] + '\n'
                  + string_params['If-Unmodified-Since'] + '\n'
                  + string_params['Range'] + '\n'
                  + string_params['CanonicalizedHeaders']+'\n'
                  + string_params['CanonicalizedResource'])

signed_string = base64.b64encode(hmac.new(base64.b64decode(storage_account_key), msg=string_to_sign.encode('utf-8'), digestmod=hashlib.sha256).digest()).decode()

#print out the datetime
print(request_time)
#print out the Authorization
print('SharedKey ' + storage_account_name + ':' + signed_string)

headers = {
    'x-ms-date' : request_time,
    'x-ms-version' : api_version,
    'Authorization' : ('SharedKey ' + storage_account_name + ':' + signed_string)
}
url = ('https://' + storage_account_name + '.dfs.core.windows.net/'+FILE_SYSTEM_NAME)
#print out the url
print(url)
r = requests.get(url, headers = headers)

#print out the file content
print(r.text)

运行代码后,将提取文件内容:

enter image description here

您还可以在邮递员中使用以上代码中的生成的值,例如授权/日期:

enter image description here


您可能已经知道SDK尚未为第二代的Azure数据湖做好准备,所以到目前为止,该解决方案正在使用ADLS Gen2 Read api

检索文件内容后,可以保存它。

您可以自行进行身份验证。如果您对使用ADLS Gen 2 API进行阅读有任何疑问,请随时告诉我。

答案 1 :(得分:0)

当您在ADLS Gen2中注册多协议访问时,

ADLS Gen2 $logs现在可用。可以在http://aka.ms/mpaadls上找到描述多协议访问的博客。您可以在此处注册访问权限。

当前不支持在Azure门户中启用日志。这是有关如何使用PowerShell启用日志的示例。

$storageAccount = Get-AzStorageAccount -ResourceGroupName <resourceGroup> -Name <storageAccountName>

Set-AzStorageServiceLoggingProperty -Context $storageAccount.Context -ServiceType Blob -LoggingOperations read,write,delete -RetentionDays <days>. 

要使用日志,今天就可以使用AzCopy和SDK。您暂时无法在Azure Storage Explorer中查看$logs

答案 2 :(得分:0)

在2019年11月版(1.11.1版)的Azure Storage Explorer中,现在可以查看$ logs之类的隐藏容器