키 라이브러리를 사용하여 Azure 함수의 기밀 보호

Azure 함수란?


Azure Functions은 어플리케이션을 실행하는 데 필요한 모든 업데이트된 인프라 및 리소스를 제공하는 클라우드 서비스입니다.너는 너에게 가장 중요한 코드 세션에 집중하고, 함수는 나머지 부분을 처리한다.함수는 Azure에 대해 서버 없는 계산을 제공합니다.함수를 사용하여 웹 API를 구축하고 데이터베이스 변경에 응답하며 사물인터넷 흐름을 처리하고 메시지 대기열을 관리할 수 있습니다.

Azure 키 금고란?


Azure Key Vault은 클라우드의 암호화 키, 인증서(그리고 인증서와 관련된 개인 키)와 기밀(예를 들어 연결 문자열과 비밀번호)을 보호하는 클라우드 서비스입니다.

Azure 기능과 키 라이브러리 통합 방법


Azure 함수는 서버가 없는 코드이기 때문에 암호나 연결 문자열 같은 어떠한 기밀도 명문 형식으로 함수 코드에 넣고 싶지 않습니다.보안상의 이유로 우리는 민감한 정보가 노출되지 않도록 함수 코드에서 사용하는 기밀을 보호해야 한다.따라서 PowerShell Core를 코드 라이브러리로 사용하여 함수 응용 프로그램을 만들고 Azure Key Vault를 사용하여 함수 코드에 사용되는 모든 기밀을 보호하는 방법에 대해 살펴보겠습니다.
모든 것을 준비하기 위해 Powershell 콘솔에서 Azure CLI를 사용합니다.먼저 다음 명령을 실행하여 Azure에 로그인합니다.
az login
다음 명령을 실행하여 resource group, storage account, key vault, app service planfunction app을 생성합니다.
# Variables - Function app and storage account names must be unique.
$randomInt = Get-Random -Maximum 9999
$resourceGroupName = "KeyVaultFunction"
$functionAppName = "func$randomInt"
$storageName = "sa$functionAppName"
$kvName = "kv$functionAppName"
$region = "uksouth"

# Create a resource resourceGroupName
az group create --name "$resourceGroupName" --location "$region"

# Create an azure storage account
az storage account create `
    --name "$storageName" `
    --location "$region" `
    --resource-group "$resourceGroupName" `
    --sku "Standard_LRS" `
    --kind "StorageV2"

# Create an azure key vault (RBAC model)
az keyvault create `
    --name "$kvName" `
    --resource-group "$resourceGroupName" `
    --location "$region" `
    --enable-rbac-authorization

# Create a Function App
az functionapp create `
    --name "$functionAppName" `
    --storage-account "$storageName" `
    --consumption-plan-location "$region" `
    --resource-group "$resourceGroupName" `
    --os-type "Windows" `
    --runtime "powershell" `
    --runtime-version "7.0" `
    --functions-version "3"
다음은 기능 프로그램이 키 라이브러리에 접근할 수 있도록 managed identity에 분배된 시스템 활성화 프로그램을 사용할 것입니다.
기능 애플리케이션 설정 창에서 ID를 선택하고 시스템 할당 설정을 ON으로 설정한 다음 설정을 저장합니다.

이제 관리형 ID를 만들면 키 라이브러리에 역할 할당 및 권한(IAM)을 추가할 수 있습니다.우리는 함수 표지 역할 Key Vault Secrets User을 줄 것이다. 왜냐하면 우리는 함수가 기밀을 검색할 수 있기만을 바라기 때문이다.
ID를 설정하는 동일한 설정 창에서 사용 권한이라는 새 설정이 표시됩니다.Azure 역할 할당을 클릭하고 키 라이브러리에 관련 권한을 추가합니다.
참고: 키 라이브러리로 이동하여 키 라이브러리에서 IAM을 직접 선택하여 키 라이브러리에 역할 할당 권한을 추가할 수도 있습니다.


또한 IAM 권한은 기능 애플리케이션의 키 저장소에서 확인할 수 있습니다.

키 라이브러리에서 테스트를 위한 비밀 정보를 만들려면 다음과 같이 하십시오.
성함
가치관
SecUser01
PWD9000 관리자
SecPass01
S8p3r$3cR3t2021!

현재, 우리는 우리의 관건적인vault 기밀을 인용하고 해결 방안을 테스트하기 위해 우리의 기능 응용 프로그램을 설정할 것입니다.
다음 Reference syntax을 사용하겠습니다.
@Microsoft.KeyVault(VaultName=<myVault>;SecretName=<mySecret>;SecretVersion=<secretVersion>)
또한 vault의 URI 참조를 사용하여 다음을 수행할 수 있습니다.
@Microsoft.KeyVault(SecretUri=https://<key-vault-name>.vault.azure.net/secrets/<secret-name>/<secret-version>)
주의: 키 라이브러리에서 항상 최신 버전의 기밀을 가져오려면, 기밀 식별자 URL을 시크릿 URL에 넣으십시오. 아래와 같이 기밀 버전을 생략하십시오.URI가 꼬리 슬래시(/)로 끝나야 합니다.
@Microsoft.KeyVault(SecretUri=https://<key-vault-name>.vault.azure.net/secrets/<secret-name>/)
기능 설정 창에서 구성을 선택하고 두 개의 새 애플리케이션 설정을 추가합니다.



기능 창에서 다음을 클릭하여 설정 추가
성함
가치관
개발 환경
포털에서 개발
템플릿 선택
HTTP 트리거
새로운 기능
KeyVault 데모
인증 수준
기능
다음은 Code + Test에서 다음 powershell 코드를 복사합니다.
using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
    $name = $Request.Body.Name
}

$body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."

$User = $ENV:kv_SecUser01
$Pass = $ENV:kv_SecPass01

Write-Host "Username retrieved from key vault: $User"
Write-Host "Password retrieved from key vault: $Pass"

if ($name) {
    $body = "Hello, $name. This HTTP triggered function executed successfully."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $body
})
여기에 Link의 기능 코드가 하나 더 있다.
참고: 위 함수 코드에서 보듯이 함수 응용 프로그램 설정에 구성된 비밀 참조가 환경 변수에 로드됩니다.
$User = $ENV:kv_SecUser01
$Pass = $ENV:kv_SecPass01

Write-Host "Username retrieved from key vault: $User"
Write-Host "Password retrieved from key vault: $Pass"

기능 어플리케이션 테스트


테스트/Run 수동 터치 코드를 사용하여 함수 프로그램을 테스트하고 함수가 우리가 지정한 비밀을 검색할 수 있는지 확인합니다.

나는 네가 이 게시물을 좋아하고 새로운 것을 배웠으면 한다.너도 나의 Github 페이지에서 이 블로그에서 사용한 코드 예시를 찾을 수 있다.❤️

작자


예를 들어 공유하고 나와 함께 가자.🐙 GitHub | 🐧 | 👾
.ltag__user__id__620034.작업 따르기 버튼
배경색: #0cb58!중요
색상: #000000!중요
테두리 색상: #0cb58!중요
}

마르셀.따르다


Cloud Solutions & DevOps Architect.

좋은 웹페이지 즐겨찾기