我正在尝试自动化配置Azure App Service以将诊断日志导出到Azure存储的过程,但是遇到了我不太了解的问题。我可以按照以下步骤操作。
使用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
}
},
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);
}
}
函数是否生成了可以代替其工作的令牌?甚至有一种方法可以自动执行此配置?
答案 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