다음을 통해 공유


관리형 HSM에 대한 보안 액세스

이 자습서에서는 Azure Key Vault 관리되는 HSM에 대한 액세스 제어의 실제 구현 사례를 제공합니다. 현실적인 시나리오를 통해 Azure RBAC와 관리되는 HSM 로컬 RBAC를 사용하여 업무 분리를 구현하는 방법을 알아봅니다.

중요합니다

이 자습서를 진행하기 전에 관리되는 HSM 액세스 제어 모델을 이해하고 관리 평면과 데이터 평면 액세스의 차이점을 이해했는지 확인합니다. 이 개념적 기초에 대해서는 관리되는 HSM 액세스 제어를 참조하세요.

필수 조건

Azure Cloud Shell

Azure는 브라우저를 통해 사용할 수 있는 대화형 셸 환경인 Azure Cloud Shell을 호스트합니다. Cloud Shell에서 Bash 또는 PowerShell을 사용하여 Azure 서비스를 사용할 수 있습니다. Cloud Shell 미리 설치된 명령을 사용하여 로컬 환경에 아무것도 설치하지 않고도 이 문서의 코드를 실행할 수 있습니다.

Azure Cloud Shell을 시작하려면 다음을 수행합니다.

옵션 예제/링크
코드 또는 명령 블록의 오른쪽 상단에서 시도를 선택합니다. 시도를 선택해도 코드 또는 명령이 Cloud Shell에 자동으로 복사되지 않습니다. Azure Cloud Shell의
https://shell.azure.com으로 이동하거나 Cloud Shell 시작 단추를 선택하여 브라우저에서 Cloud Shell을 엽니다. 단추를 사용하여 Azure Cloud Shell을 시작합니다.
Azure Portal의 오른쪽 위에 있는 메뉴 모음에서 Cloud Shell 단추를 선택합니다. Azure Portal의 Cloud Shell 단추를 보여 주는 스크린샷

Azure Cloud Shell을 사용하려면:

  1. Cloud Shell을 시작합니다.

  2. 코드 블록(또는 명령 블록)에서 복사 단추를 선택하여 코드 또는 명령을 복사합니다.

  3. Windows 및 Linux에서 Ctrl+Shift+V 선택하거나 macOS에서 Cmd+Shift+V 선택하여 코드 또는 명령을 Cloud Shell 세션에 붙여넣습니다.

  4. Enter를 선택하여 코드 또는 명령을 실행합니다.

Azure에 로그인

CLI를 사용하여 Azure에 로그인하려면 다음을 입력합니다.

az login

CLI를 통한 로그인 옵션에 대한 자세한 내용은 Azure CLI로 로그인을 참조하세요.

시나리오 예 이해

이 예제에서는 2,048비트 RSA 키를 서명 작업에 사용하는 애플리케이션을 개발합니다. 애플리케이션은 관리 ID를 사용하여 Azure VM(가상 머신)에서 실행됩니다. 서명에 사용되는 RSA 키는 모두 관리형 HSM에 저장됩니다.

역할과 책임 정의

애플리케이션을 관리, 배포 및 감사하는 다음과 같은 역할이 확인되었습니다.

  • 보안 팀: CSO(최고 보안 책임자) 사무실 IT 직원 또는 비슷한 참가자입니다. 이 보안 팀은 키를 적절하게 보호해야 합니다. 키에는 서명을 위한 RSA 또는 EC 키와 데이터 암호화를 위한 RSA 또는 AES 키가 포함됩니다.
  • 개발자 및 운영자: 애플리케이션을 개발하고 Azure에 배포하는 직원입니다. 이 팀의 멤버는 보안 담당자에 속하지 않습니다. RSA 키와 같은 중요한 데이터에는 액세스할 수 없습니다. 이 중요한 데이터는 배포하는 애플리케이션에서만 액세스할 수 있어야 합니다.
  • 감사자: 이 역할은 개발 팀의 멤버 또는 일반 IT 직원이 아닌 참가자입니다. 이들은 인증서, 키 및 비밀의 사용 및 유지 관리를 검토하여 보안 표준을 준수하도록 합니다.

애플리케이션의 범위 외부에 있는 다른 역할, 즉 구독(또는 리소스 그룹) 관리자 역할이 있습니다. 구독 관리자는 보안 팀의 초기 액세스 권한을 설정합니다. 이들은 애플리케이션에 필요한 리소스가 있는 리소스 그룹을 사용하여 보안 팀에 액세스 권한을 부여합니다.

역할별로 필요한 작업 정의

역할에 대해 다음과 같은 작업 권한을 부여해야 합니다.

보안 팀

  • 관리형 HSM 만들기
  • 재해 복구를 위해 관리형 HSM 보안 도메인을 다운로드합니다.
  • 로깅 켜기
  • 키를 생성하거나 가져옵니다.
  • 재해 복구를 위해 관리형 HSM 백업 만들기
  • 특정 작업에 대한 권한을 사용자와 애플리케이션에 부여하도록 관리형 HSM 로컬 RBAC 설정
  • 주기적으로 키 롤링

개발자 및 운영자

  • 보안 팀에서 서명에 사용되는 RSA 키에 대한 참조(키 URI)를 가져옵니다.
  • 키에 프로그래밍 방식으로 액세스하는 애플리케이션 개발 및 배포

감사자

  • 키 만료 날짜를 검토하여 키가 최신 상태인지 확인합니다.
  • 역할 할당을 모니터링하여 권한 있는 사용자/애플리케이션만 키에 액세스할 수 있도록 합니다.
  • 관리형 HSM 로그를 검토하여 데이터 보안 표준에 따라 키를 적절하게 사용하는지 확인

적절한 역할 할당

다음 표에는 관리형 HSM에 액세스할 수 있도록 팀 및 리소스에 할당되는 역할이 요약되어 있습니다.

역할 관리 평면 역할 데이터 평면 역할
보안 팀 관리형 HSM 기여자 관리형 HSM 관리자
개발자 및 운영자 없음 없음
감사자 없음 관리형 HSM 암호화 감사자
애플리케이션에서 사용하는 VM의 관리 ID 없음 관리형 HSM 암호화 사용자
애플리케이션에서 사용하는 스토리지 계정의 관리 ID 없음 관리형 HSM Crypto Service 암호화

이러한 세 가지 팀 역할에는 관리형 HSM 권한과 함께 다른 리소스에 대한 액세스 권한도 필요합니다. VM(또는 Azure App Service의 Web Apps 기능)을 배포하려면 개발자와 운영자는 해당 리소스 형식에 대한 Contributor 액세스 권한이 필요합니다. 감사자에게는 관리형 HSM 로그가 저장되는 스토리지 계정에 대한 읽기 액세스 권한이 필요합니다.

Azure CLI로 구현

관리 평면 역할(Azure RBAC)을 할당하려면 Azure Portal 또는 다른 관리 인터페이스(예: Azure CLI 또는 Azure PowerShell)를 사용할 수 있습니다. 관리되는 HSM 데이터 평면 역할을 할당하려면 Azure CLI 또는 Azure REST API를 사용해야 합니다.

관리 평면 역할에 대한 자세한 내용은 Azure 기본 제공 역할을 참조하세요. 관리형 HSM 데이터 평면 역할에 대한 자세한 내용은 관리형 HSM에 대한 로컬 RBAC 기본 제공 역할을 참조하세요.

아래의 Azure CLI 코드 조각은 위에서 설명한 역할 할당을 구현하는 방법을 보여 줍니다.

가정 (전제)

  • Microsoft Entra 관리자가 세 가지 역할 Contoso Security Team, Contoso App DevOps 및 Contoso App Auditors를 나타내는 보안 그룹을 만들었습니다. 관리자가 해당 그룹에 사용자를 추가했습니다.
  • 모든 리소스는 ContosoAppRG 리소스 그룹에 있습니다.
  • 관리형 HSM 로그는 contosologstorage 스토리지 계정에 저장됩니다.
  • ContosoMHSM 관리형 HSM 및 contosologstorage 스토리지 계정은 동일한 Azure 위치에 있습니다.

관리 평면 역할 할당

구독 관리자는 보안 팀에 Managed HSM Contributor 역할을 할당합니다. 이 역할을 통해 보안 팀은 기존 관리형 HSM을 관리하고 새 HSM을 만들 수 있습니다.

# This role assignment allows Contoso Security Team to create new Managed HSMs
az role assignment create --assignee-object-id $(az ad group show -g 'Contoso Security Team' --query 'id' -o tsv) --assignee-principal-type Group --role "Managed HSM Contributor"

데이터 평면 역할 할당

기존 관리되는 HSM의 경우 보안 팀에 "관리되는 HSM 관리자" 역할을 할당하여 관리해야 합니다.

# This role assignment allows Contoso Security Team to become administrator of existing managed HSM
az keyvault role assignment create --hsm-name ContosoMHSM --assignee $(az ad group show -g 'Contoso Security Team' --query 'id' -o tsv) --scope / --role "Managed HSM Administrator"

로깅 구성 및 추가 역할 할당

보안 팀은 로깅을 설정하고, 역할을 감사자 및 VM 애플리케이션에 할당합니다.

# Enable logging
hsmresource=$(az keyvault show --hsm-name ContosoMHSM --query id -o tsv)
storageresource=$(az storage account show --name contosologstorage --query id -o tsv)
az monitor diagnostic-settings create --name MHSM-Diagnostics --resource $hsmresource --logs '[{"category": "AuditEvent","enabled": true}]' --storage-account $storageresource

# Assign the "Crypto Auditor" role to Contoso App Auditors group. It only allows them to read.
az keyvault role assignment create --hsm-name ContosoMHSM --assignee $(az ad group show -g 'Contoso App Auditors' --query 'id' -o tsv) --scope / --role "Managed HSM Crypto Auditor"

# Grant the "Crypto User" role to the VM's managed identity. It allows to use keys.
az keyvault role assignment create --hsm-name ContosoMHSM --assignee $(az vm identity show --name "vmname" --resource-group "ContosoAppRG" --query principalId -o tsv) --scope / --role "Managed HSM Crypto User"

# Assign "Managed HSM Crypto Service Encryption User" role to the Storage account identity
storage_account_principal=$(az storage account show --id $storageresource --query identity.principalId -o tsv)
# (if no identity exists), then assign a new one
[ "$storage_account_principal" ] || storage_account_principal=$(az storage account update --assign-identity --id $storageresource --query identity.principalId -o tsv)

az keyvault role assignment create --hsm-name ContosoMHSM --role "Managed HSM Crypto Service Encryption User" --assignee $storage_account_principal

프로덕션 환경에 대한 고려 사항

이 자습서에서는 액세스 제어 구현을 설명하기 위해 간소화된 시나리오를 보여 줍니다.

특정 요구 사항에 따라 관리되는 HSM에 대한 권한을 조정합니다. 이 예에서 우리는 보안 팀이 DevOps 담당자에게 애플리케이션에서 사용할 키와 비밀 참조(URI 및 지문)를 제공한다고 가정했습니다. 개발자와 운영자는 직접적인 데이터 평면 액세스가 필요하지 않습니다. 이 자습서에서는 관리되는 HSM 보안에 중점을 두고 있지만 가상 머신, 스토리지 계정 등 다른 Azure 리소스에도 유사한 보안 조치를 적용합니다.

다음 단계