自动将App Service诊断日志记录到存储

时间:2018-10-18 21:07:05

标签: azure azure-storage azure-web-app-service

我正在尝试自动化配置Azure App Service以将诊断日志导出到Azure存储的过程,但是遇到了我不太了解的问题。我可以按照以下步骤操作。

  1. 我根据documentation在Azure门户中配置诊断日志记录。一切看起来都很好。我可以看到存储容器中正在填充日志。
  2. 使用Azure Resource Explorer,我导航到config/logs资源并观察JSON:

    "applicationLogs": {
      ...
      "azureBlobStorage": {
        "level": "Information",
        "sasUrl": "https://<storagename>.blob.core.windows.net/<container>?sv=YYYY-MM-DD&sr=c&sig=<sig>&st=YYYY-MM-DDTHH:MM:SSZ&se=YYYY-MM-DDTHH:MM:SSZ&sp=rwdl",
        "retentionInDays": null
      }
    },
    "httpLogs": {
      ...
      "azureBlobStorage": {
        "sasUrl": "https://<storagename>.blob.core.windows.net/<container>?sv=YYYY-MM-DD&sr=c&sig=<sig>&st=YYYY-MM-DDTHH:MM:SSZ&se=YYYY-MM-DDTHH:MM:SSZ&sp=rwdl",
        "retentionInDays": null,
        "enabled": true
      }
    },
    
  3. 然后,我可以使用sasUrl资源在config/logs资源中将listAccountSas值硬编码,然后一切仍然有效。我可以先删除存储容器并禁用诊断日志,然后重新部署ARM模板来验证这一点。

在工作之后,我尝试使用ARM模板功能sv=YYYY-MM-DD&ss=b&srt=s&sp=rwdl&st=YYYY-MM-DDTHH%3AMM%3ASS.0000000Z&se=YYYY-MM-DDTHH%3AMM%3ASS.0000000Z&spr=https&sig=<sig>为存储资源生成一个新的SAS。但是,生成的SAS格式与我从Azure资源浏览器中获得的格式略有不同:listAccountSas

那么这是怎么回事。门户如何生成SAS? public class main { public static void main(String[] args) throws SemanticFailureException { int x = 800; int y = 600; JFrame frame = new JFrame(); frame.setLayout(new GridLayout()); frame.setTitle("Function plotter"); frame.setSize(2*x, 2*y); Surface test = new Surface(x, y, 10); CommandDraw test1 = new CommandDraw(x/2,y,test); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.add(test); frame.add(test1); frame.setVisible(true); } } 函数是否生成了可以代替其工作的令牌?甚至有一种方法可以自动执行此配置?

1 个答案:

答案 0 :(得分:1)

据我所知,ARM模板函数listAccountSas仅可以列出值,不能创建新值,也不能在模板内创建sasToken。我建议您使用Powershell创建一个sasToken,将其存储在Azure KeyVault中,然后在模板中引用该KeyVault机密。 关于如何在模板中使用证书,请参阅document

$name = "your account"
$password = "your password"
$RGname = "your resource group name"
$accountNmae  ="your Storage Account name"
$containerNmae ="your container name"
$keyvaultNmae ="your Key Vault name"
$certName = "your cert name"
$location = ""

# login Azure 
$secpasswd = ConvertTo-SecureString $password -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($name, $secpasswd)
Add-AzureRmAccount -Credential $mycreds

#create Azure storage SAS URL
$account = Get-AzureRmStorageAccount -ResourceGroupName $RGname  -Name $accountNmae
$SASURL = New-AzureStorageContainerSASToken -Container $containerNmae -Context $account.Context -Permission rwdl -ExpiryTime (Get-Date).AddYears(1) -FullUri

#create key vault
New-AzureRmKeyVault -VaultName $keyVaultName -resourceGroupName $RGname -Location $location -EnabledForTemplateDeployment
Set-AzureRmKeyVaultAccessPolicy -VaultName $keyVaultName -UserPrincipalName $name -PermissionsToSecrets set,delete,get,list

#create cert
$secretvalue = ConvertTo-SecureString $SASURL -AsPlainText -Force
Set-AzureKeyVaultSecret -VaultName $keyvaultNmae -Name "test" -SecretValue $secretvalue