Azure Learn AZ-204 The Hard Way | 實作 AZ-204 Lab 07 Key Vault
2022-03-24
實作 AZ-204 證照測驗準備的實驗課程,從實驗課程中精熟 AZ-204 的測驗重點以及工具操作。本次要實驗的是如何使用 Azure Key Vault。
Lab07 - Key Vault
詳細的實驗流程可以參考微軟在 GitHub上的專案
Pre Setting
首先建立 Resource Group ConfidentialStack
,並建立 Storage Account securestorcs
,
Storage Account 使用 Standard Performance 以及 LRS Redundancy SKU 即可。
先去 Storage Account 確認 Connection Strings,待會需要使用。
Create Key Vault
建立 Key Vault securevaultcs
使用 Standard Pricing Tier。
Function App
建立 Function App securefunccs
,使用 .NET 3.1 Runtime Stack,Publish 選擇 Code。
到 Hosting 選擇使用 securestorcs
作為 Storage Account,作業系統選擇 Linux 並選擇 Plan 為 Consumption (Serverless)。
在建立好的 securefunccs
選擇 identity 並在 System assigned 啟用 Status (On)。
Create Key Vault Secret
在建立好的 Key Vault securevaultcs
在 Secrets 進行新增,上傳選項選擇 Manual,並在 Name 輸入 storagecredentials,值則將先前保存的 Storage Account Connection Strings 寫入。
將 Enabled 設定為 Yes 後保存。
從 Versions 確認 Secret Identifier,待會需要使用。
設定 Key Vault access policy
在 Key Vault securevaultcs
由 Access policies 進行新增,將 Secret permissions 選擇 GET,並將 Select principal 設定為 securefunccs
。
設定 Function App Permission
securefunccs
從 Configuration 選擇 New application setting,加入 StorageConnectionString,並將值設定為 @Microsoft.KeyVault(SecretUri=*Secret Identifier*) 。
其中 *Secret Identifier* 用 Key Vault Secret 所保存的 Secret Identifier 取代。
Function App Coding
func init --worker-runtime dotnet --force
func new --template "HTTP trigger" --name "FileParser"
local.settings.json
故意在 StorageConnectionString 保持為 [TEST VALUE],讓 local 端無法正常取得 Storage 資訊。
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"StorageConnectionString": "[TEST VALUE]"
}
}
FileParser.cs
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.AspNetCore.Http;
using System;
using System.Threading.Tasks;
public static class FileParser
{
[FunctionName("FileParser")]
public static async Task<IActionResult> Run(
[HttpTrigger("GET")] HttpRequest request)
{
string connectionString = Environment.GetEnvironmentVariable("StorageConnectionString");
return new OkObjectResult(connectionString);
}
}
func start --build
瀏覽結果會發現目前 connectionString 為 [TEST VALUE]
func azure functionapp publish securefunccs
到 Function App 進行測試,連線字串可以正確顯示。
Azure Blob Storage data
到 securestorcs
新增 Container drop
,並且選擇為 Blob (anonymous read access for blobs only)
上傳 records.json 從 URL 測試可以讀取。
接著調整 Container 的 Access Level 為 Private (no anonymous access)
這時 URL 已經無法讀取了,這是為了驗證限定授權給 Function App 的目的。
Function App Access Blog Storage Data
dotnet add package Azure.Storage.Blobs --version 12.6.0
FileParser.cs
using Azure.Storage.Blobs;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.AspNetCore.Http;
using System;
using System.Threading.Tasks;
public static class FileParser
{
[FunctionName("FileParser")]
public static async Task<IActionResult> Run(
[HttpTrigger("GET")] HttpRequest request)
{
string connectionString =
Environment.GetEnvironmentVariable("StorageConnectionString");
BlobClient blob =
new BlobClient(connectionString, "drop", "records.json");
var response = await blob.DownloadAsync();
return new FileStreamResult(response?.Value?.Content, response?.Value?.ContentType);
}
}
將 Function 進行上傳
az login
func azure functionapp publish securefunccs
在 Function 再次進行 Test,發現可以正確取得 records.json 的資料 😊
Azure Key Vault 相關知識
...
實戰 Azure Key Vault 心得
...