다음을 통해 공유


두 개의 인증 자격 증명 집합이 있는 리소스에 대한 비밀 회전 자동화

Azure 서비스에 인증하는 가장 좋은 방법은 관리 ID를 사용하는 것이지만 옵션이 아닌 몇 가지 시나리오가 있습니다. 이러한 경우 액세스 키 또는 암호가 사용됩니다. 액세스 키와 암호를 자주 회전해야 합니다.

이 자습서에서는 두 가지 인증 자격 증명 집합을 사용하는 데이터베이스 및 서비스에 대한 비밀의 주기적 회전을 자동화하는 방법을 보여 줍니다. 다양한 자산 유형에서 자동 이동 개념 및 이점에 대한 포괄적인 개요는 Azure Key Vault의 자동 이동 이해를 참조하세요.

특히 이 자습서에서는 Azure Key Vault에 저장된 Azure Storage 계정 키를 비밀로 회전하는 방법을 보여 줍니다. Azure Event Grid 알림에 의해 트리거되는 함수를 사용합니다.

비고

Storage 계정 서비스의 경우 Microsoft Entra ID를 사용하여 요청에 권한을 부여하는 것이 좋습니다. 자세한 내용은 Azure Active Directory를 사용하여 Blob에 대한 액세스 권한 부여를 참조하세요. 액세스 키가 있는 스토리지 계정 연결 문자열이 필요한 서비스가 있습니다. 이 시나리오에서는 이 솔루션을 사용하는 것이 좋습니다.

이 자습서에서 설명하는 회전 솔루션은 다음과 같습니다.

회전 솔루션을 보여 주는 다이어그램.

이 솔루션에서 Azure Key Vault는 스토리지 계정 개별 액세스 키를 동일한 비밀의 버전으로 저장하여 후속 버전의 기본 키와 보조 키 간에 교대로 저장합니다. 하나의 액세스 키가 최신 버전의 비밀에 저장되면 대체 키가 다시 생성되고 Key Vault에 새 최신 버전의 비밀로 추가됩니다. 이 솔루션은 애플리케이션의 전체 회전 주기를 제공하여 새로 고쳐진 최신 키를 제공합니다.

  1. 비밀의 만료 날짜 30일 전에 Key Vault는 거의 만료된 이벤트를 Event Grid에 게시합니다.
  2. Event Grid는 이벤트 구독을 확인하고 HTTP POST를 사용하여 이벤트를 구독하는 함수 앱 엔드포인트를 호출합니다.
  3. 함수 앱은 대체 키(최신 키가 아님)를 식별하고 스토리지 계정을 호출하여 다시 생성합니다.
  4. 함수 앱은 Azure Key Vault에 새로 생성된 키를 비밀의 새 버전으로 추가합니다.

필수 조건

  • Azure 구독. 체험 계정 만들기
  • Azure Cloud Shell. 이 자습서에서는 PowerShell env와 함께 포털 Cloud Shell을 사용합니다.
  • Azure Key Vault.
  • 두 개의 Azure Storage 계정.

비고

공유 스토리지 계정 키를 순환하면 해당 키를 기반으로 생성된 계정 수준 SAS(공유 액세스 서명)가 해지됩니다. 스토리지 계정 키 회전 후에는 애플리케이션 중단을 방지하기 위해 계정 수준 SAS 토큰을 다시 생성해야 합니다.

기존 키 자격 증명 모음 및 기존 스토리지 계정이 없는 경우 이 배포 링크를 사용할 수 있습니다.

Azure에 배포라는 레이블이 지정된 링크입니다.

  1. 리소스 그룹에서 새로 만들기를 선택합니다. 그룹 볼트 회전 이름을 지정한 다음 확인을 선택합니다.

  2. Review + create를 선택합니다.

  3. 선택하고생성합니다.

    리소스 그룹을 만드는 방법을 보여 주는 스크린샷

이제 키 자격 증명 모음과 두 개의 스토리지 계정이 있습니다. 다음 명령을 실행하여 Azure CLI 또는 Azure PowerShell에서 이 설정을 확인할 수 있습니다.

az resource list -o table -g vaultrotation

결과는 다음과 같이 표시됩니다.

Name                     ResourceGroup         Location    Type                               Status
-----------------------  --------------------  ----------  ---------------------------------  --------
vaultrotation-kv         vaultrotation      westus      Microsoft.KeyVault/vaults
vaultrotationstorage     vaultrotation      westus      Microsoft.Storage/storageAccounts
vaultrotationstorage2    vaultrotation      westus      Microsoft.Storage/storageAccounts

키 회전 함수 만들기 및 배포

다음으로 시스템 관리 ID를 사용하여 다른 필수 구성 요소와 함께 함수 앱을 만듭니다. 스토리지 계정 키에 대한 회전 함수도 배포합니다.

함수 앱 회전 함수에는 다음 구성 요소와 구성이 필요합니다.

  • Azure App Service 계획
  • 함수 앱 트리거를 관리하는 스토리지 계정
  • Key Vault의 비밀에 액세스하는 액세스 정책
  • 스토리지 계정 액세스 키에 액세스할 수 있도록 함수 앱에 할당된 스토리지 계정 키 운영자 서비스 역할
  • 이벤트 트리거 및 HTTP 트리거가 있는 키 회전 함수(주문형 회전)
  • SecretNearExpiry 이벤트에 대한 Event Grid 이벤트 구독
  1. Azure 템플릿 배포 링크를 선택합니다.

    Azure 템플릿 배포 링크.

  2. 리소스 그룹 목록에서 vaultrotation을 선택합니다.

  3. 스토리지 계정 RG 상자에 스토리지 계정이 있는 리소스 그룹의 이름을 입력합니다. 스토리지 계정이 키 회전 함수를 배포할 동일한 리소스 그룹에 이미 있는 경우 기본값 [resourceGroup().name] 을 유지합니다.

  4. 스토리지 계정 이름 상자에 회전할 액세스 키가 포함된 스토리지 계정의 이름을 입력합니다. 필수 구성 요소에서 만든 스토리지 계정을 사용하는 경우 기본값 [concat(resourceGroup().name, 'storage')]을 유지합니다.

  5. Key Vault RG 상자에 키 자격 증명 모음이 있는 리소스 그룹의 이름을 입력합니다. 키 순환 함수를 배포할 동일한 리소스 그룹에 키 자격 증명 모음이 이미 있는 경우 기본값 [resourceGroup().name] 을 유지합니다.

  6. Key Vault 이름 입력란에 키 저장소의 이름을 입력합니다. 필수 구성 요소에서 만든 키 볼트를 사용하는 경우 기본값 [concat(resourceGroup().name, '-kv')]을 유지합니다.

  7. App Service 계획 유형 상자에서 호스팅 계획을 선택합니다. 프리미엄 플랜 은 키 자격 증명 모음이 방화벽 뒤에 있는 경우에만 필요합니다.

  8. 함수 앱 이름 상자에 함수 앱의 이름을 입력합니다.

  9. 비밀 이름 상자에 액세스 키를 저장할 비밀의 이름을 입력합니다.

  10. 리포지토리 URL 상자에 함수 코드의 GitHub 위치를 입력합니다. 이 자습서에서는 .를 사용할 https://github.com/Azure-Samples/KeyVault-Rotation-StorageAccountKey-PowerShell.git 수 있습니다.

  11. Review + create를 선택합니다.

  12. 선택하고생성합니다.

    함수를 만들고 배포하는 방법을 보여 주는 스크린샷

이전 단계를 완료하면 스토리지 계정, 서버 팜, 함수 앱 및 Application Insights가 생성됩니다. 배포가 완료되면 다음 페이지가 표시됩니다.

배포가 완료된 페이지를 보여 주는 스크린샷

비고

오류가 발생하면 재배포 를 선택하여 구성 요소 배포를 완료할 수 있습니다.

Azure 샘플에서 회전 함수에 대한 배포 템플릿 및 코드를 찾을 수 있습니다.

Key Vault 비밀에 스토리지 계정 액세스 키 추가

먼저 사용자 보안 주체에게 비밀 관리 권한을 부여하도록 액세스 정책을 설정합니다.

az keyvault set-policy --upn <email-address-of-user> --name vaultrotation-kv --secret-permissions set delete get list

이제 스토리지 계정 액세스 키를 해당 값으로 사용하여 새 비밀을 만들 수 있습니다. 또한 회전 함수가 스토리지 계정의 키를 다시 생성할 수 있도록 비밀에 추가하려면 스토리지 계정 리소스 ID, 비밀 유효 기간 및 키 ID가 필요합니다.

스토리지 계정 리소스 ID를 확인합니다. 속성에서 id 이 값을 찾을 수 있습니다.

az storage account show -n vaultrotationstorage

키 값을 가져올 수 있도록 스토리지 계정 액세스 키를 나열합니다.

az storage account keys list -n vaultrotationstorage

유효 기간을 60일로 설정하고 스토리지 계정 리소스 ID를 사용하여 키 자격 증명 모음에 비밀을 추가합니다. 회전을 즉시 트리거하기 위해 데모 목적으로 만료 날짜를 내일로 설정합니다. 검색된 값을 사용하여 다음 명령을 실행합니다.key1ValuestorageAccountResourceId

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey --vault-name vaultrotation-kv --value <key1Value> --tags "CredentialId=key1" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

이 비밀은 몇 분 내에 이벤트를 트리거 SecretNearExpiry 합니다. 이 이벤트는 차례로 만료가 60일로 설정된 비밀을 회전하는 함수를 트리거합니다. 이 구성에서 'SecretNearExpiry' 이벤트는 만료 30일(만료 30일 전)마다 트리거되고 회전 함수는 key1과 key2 간에 교대로 회전합니다.

스토리지 계정 키와 Key Vault 비밀을 검색하여 액세스 키가 다시 생성되었는지 확인하고 비교할 수 있습니다.

다음 명령을 사용하여 비밀 정보를 가져옵니다.

az keyvault secret show --vault-name vaultrotation-kv --name storageKey

CredentialId 대체 keyName 로 업데이트되고 value 다시 생성됩니다.

첫 번째 스토리지 계정에 대한 A Z keyvault 비밀 표시 명령의 출력을 보여 주는 스크린샷.

액세스 키를 검색하여 값을 비교합니다.

az storage account keys list -n vaultrotationstorage 

value 키가 키 자격 증명 모음의 비밀과 동일하다는 것을 주의하세요.

첫 번째 스토리지 계정에 대한 A Z 스토리지 계정 키 목록 명령의 출력을 보여 주는 스크린샷

여러 스토리지 계정에 기존 회전 함수 사용

동일한 함수 앱을 다시 사용하여 여러 스토리지 계정에 대한 키를 회전할 수 있습니다.

회전을 위해 기존 함수에 스토리지 계정 키를 추가하려면 다음이 필요합니다.

  • 함수 앱이 스토리지 계정 액세스 키에 액세스할 수 있도록 지정된 스토리지 계정 키 운영자 서비스 역할입니다.
  • SecretNearExpiry 이벤트에 대한 Event Grid 이벤트 구독입니다.
  1. Azure 템플릿 배포 링크를 선택합니다.

    Azure 템플릿 배포 링크.

  2. 리소스 그룹 목록에서 vaultrotation을 선택합니다.

  3. 스토리지 계정 RG 상자에 스토리지 계정이 있는 리소스 그룹의 이름을 입력합니다. 스토리지 계정이 키 회전 함수를 배포할 동일한 리소스 그룹에 이미 있는 경우 기본값 [resourceGroup().name] 을 유지합니다.

  4. 스토리지 계정 이름 상자에 회전할 액세스 키가 포함된 스토리지 계정의 이름을 입력합니다.

  5. Key Vault RG 상자에 키 자격 증명 모음이 있는 리소스 그룹의 이름을 입력합니다. 키 순환 함수를 배포할 동일한 리소스 그룹에 키 자격 증명 모음이 이미 있는 경우 기본값 [resourceGroup().name] 을 유지합니다.

  6. Key Vault 이름 입력란에 키 저장소의 이름을 입력합니다.

  7. 함수 앱 이름 상자에 함수 앱의 이름을 입력합니다.

  8. 비밀 이름 상자에 액세스 키를 저장할 비밀의 이름을 입력합니다.

  9. Review + create를 선택합니다.

  10. 선택하고생성합니다.

    추가 스토리지 계정을 만드는 방법을 보여 주는 스크린샷

Key Vault 비밀에 스토리지 계정 액세스 키 추가

스토리지 계정 리소스 ID를 확인합니다. 속성에서 id 이 값을 찾을 수 있습니다.

az storage account show -n vaultrotationstorage2

key2 값을 가져올 수 있도록 스토리지 계정 액세스 키를 나열합니다.

az storage account keys list -n vaultrotationstorage2

유효 기간을 60일로 설정하고 스토리지 계정 리소스 ID를 사용하여 키 자격 증명 모음에 비밀을 추가합니다. 회전을 즉시 트리거하기 위해 데모 목적으로 만료 날짜를 내일로 설정합니다. 검색된 값을 사용하여 다음 명령을 실행합니다.key2ValuestorageAccountResourceId

tomorrowDate=$(date -u -d "+1 day" +"%Y-%m-%dT%H:%M:%SZ")
az keyvault secret set --name storageKey2 --vault-name vaultrotation-kv --value <key2Value> --tags "CredentialId=key2" "ProviderAddress=<storageAccountResourceId>" "ValidityPeriodDays=60" --expires $tomorrowDate

다음 명령을 사용하여 비밀 정보를 가져옵니다.

az keyvault secret show --vault-name vaultrotation-kv --name storageKey2

CredentialId 대체 keyName 로 업데이트되고 value 다시 생성됩니다.

두 번째 스토리지 계정에 대한 A Z keyvault secret show 명령의 출력을 보여 주는 스크린샷.

액세스 키를 검색하여 값을 비교합니다.

az storage account keys list -n vaultrotationstorage 

value 키가 키 자격 증명 모음의 비밀과 동일하다는 것을 주의하세요.

두 번째 스토리지 계정에 대한 A Z 스토리지 계정 키 목록 명령의 출력을 보여 주는 스크린샷

비밀을 위한 회전 비활성화

해당 비밀에 대한 Event Grid 구독을 삭제하기만 하면 비밀 회전을 사용하지 않도록 설정할 수 있습니다. Azure PowerShell Remove-AzEventGridSubscription cmdlet 또는 Azure CLI az event grid event--subscription delete 명령을 사용합니다.

두 자격 증명 집합에 대한 Key Vault 회전 함수

두 가지 자격 증명 집합과 여러 사용 가능한 함수에 대한 회전 함수 템플릿:

비고

이러한 회전 함수는 Microsoft가 아닌 커뮤니티 구성원에 의해 생성됩니다. 커뮤니티 기능은 Microsoft 지원 프로그램 또는 서비스에서 지원되지 않으며 어떤 종류의 보증도 없이 AS IS에서 사용할 수 있습니다.

다음 단계