개발/Azure

[Azure] Azure내 스토리지 구현 및 관리 - 보안 구성

웅이의 개발이야기 2025. 5. 13. 22:57
728x90
반응형

Azure Storage 보안 전략

  1. 휴지 상태의 암호화 : 256비트 AES(Advanced Encryption Standard) 암호를 사용하는 SSE(스토리지 서비스 암호화)는 Azure Storage에 기록된 모든 데이터를 암호화합니다. -> Azure Storage가 암호를 해독한 후에 데이터 반환 (비활성화 불가)
  2. 인증 : Microsoft Entra ID 및 RBAC(역할 기반 액세스 제어)는 리소스 관리 작업 및 데이터 작업 모두에 대한 Azure Storage에 지원됩니다.
  3. 전송 중 암호화 : Azure와 클라이언트 간에 전송 수준 보안을 사용하도록 설정하여 데이터를 안전하게 유지 -> 항상 HTTPS 사용
  4. 디스크 암호화(DB외 케이스인 듯) : VM(가상 머신)의 경우 Azure를 사용하면 Azure Disk Encryption을 사용하여 VHD(가상 하드 디스크)를 암호화할 수 있습니다.
  5. 공유 액세스 서명(?) : SAS(공유 액세스 서명)를 사용하여 Azure Storage의 데이터 개체에 대해 액세스 권한(?)을 부여
  6. 권한 부여 : Blob Storage, Azure Files, Queue Storage 또는 Azure Cosmos DB(Azure Table Storage)의 보안 리소스에 대해 수행한 모든 요청에는 권한이 부여되어야 합니다.


  • 권한부여 전략
  1. Microsoft Entra ID : 역할 기반 액세스 제어
  2. 공유 키 : Azure Storage 계정 액세스 키와 기타 매개 변수를 사용 (요청 시 헤더에 실음)
  3. 공유 액세스 서명(SAS)(?) : SAS는 지정된 사용 권한을 사용하고 지정된 시간 간격으로 Azure Storage 계정의 특정 리소스에 대한 액세스 권한을 위임
  4. 컨테이너 및 Blob에 대한 익명 액세스 : 필요에 따라 컨테이너 또는 Blob 수준에서 Blob 리소스를 public으로 설정


공유 액세스 서명 (SAS)

  • SAS(공유 액세스 서명) : Azure Storage 리소스에 대한 제한된 액세스 권한을 부여하는 URI(Uniform Resource Identifier)
  • 스토리지 계정 키에 대한 액세스 권한이 없는 클라이언트에 SAS를 제공 -> 클라이언트에 SAS URI를 배포하여 지정된 기간 동안 리소스에 액세스하도록 할 수 있음

  • 클라이언트 인증 -> SAS 생성 -> 클라이언트에 부여 -> 스토리지 계정 리소스에 접근 (SAS는 클라이언트 권한과 액세스 간격을 정의)


  • SAS 특성

  1. 클라이언트에 부여한 액세스 유형을 세부적으로 제어 가능
  2. SAS는 Blob, 파일, 큐 및 테이블과 같은 여러 Azure Storage 서비스에 대한 액세스를 위임 가능
  3. SAS가 유효한 시간 간격을 지정 가능
  4. SAS에 의해 부여되는 권한을 지정
  5. SAS는 계정 수준 및 서비스 수준 컨트롤을 제공
    • 계정 수준 : 서비스 수준보다 큰 범위, 서비스 수준 + 기타 리소스 및 능력에 대한 액세스 허용
    • 서비스 수준 : 스토리지 계정의 특정 리소스에 대한 액세스를 허용
  6. SAS를 수락하는 선택적 IP 주소 또는 IP 주소 범위를 식별 가능
  7. SAS를 수락하는 프로토콜을 지정 가능


  • URI(Uniform Resource Identifier) : SAS(공유 액세스 서명)를 만들 때 매개 변수 및 토큰을 사용하여 URI를 만듭니다. (Azure Storage 리소스 URI + SAS 토큰)


  • URI 구성




Azure Storage 암호화

  • 암호화 및 암호 해독 프로세스는 자동 수행 -> 데이터는 기본적으로 보호되므로 코드 또는 애플리케이션을 수정할 필요가 없음.

  • 256비트 AES(고급 암호화 표준) 암호화를 통해 암호화

  • 직접 키를 관리하거나 Microsoft에서 관리하는 키를 사용 가능


  • 암호 key 활용
    : Storage 계정 생성 -> 생성 계정에 대해 2개의 512비트 스토리지 계정 액세스 키 생성 -> 공유 키 권한 부여 or 공유 키로 서명된 SAS 토큰을 통해 데이터에 접근


  • 암호화 유형

  1. 인프라 암호화 : 데이터는 두 가지 암호화 알고리즘과 두 가지 키를 사용하여 서비스 수준에서 한 번, 인프라 수준에서 한 번씩 두 번 암호화
  2. 플랫폼 관리형 키 : Azure에서 완전히 생성, 저장 및 관리되는 암호화 키
  3. 고객 관리형 키 : 한 명 이상의 고객이 읽고, 만들고, 삭제하고, 업데이트하고, 관리하는 키


  • Azure Key Vault
  1. 애플리케이션을 중단하지 않고 쉽게 키를 회전(갱신?)시켜 다시 생성 -> 키 관리 자동화
  2. Azure Key Vault API를 사용하여 암호화 키를 생성 (고객 관리형 키) -> 다시 생성하거나 기존 키 자격증명에서 선택하여 활용 가능


Best Practice

  1. encrypt data at rest and in-flight
    • Always encrypt data at rest
    • Always encrypt in-flight data
  2. Restrict access to database
    • Enable database firewalls
    • Use Azure Private Link
  3. Restrict access to VMS
    • Disable VM RDP/SSH ports
    • Connect to VMs with Azure Bastion
  4. Protect application secrets
    • Store secrets in Azure Key Vault
    • Use managed service identities
  5. Use a separate Azure Subscription for production
    • Implement RBAC
    • Use a separate subscription
  6. Implement a Web Application Firewall
    • Implement Application Gateway or Front Door
    • Enable Web Application Firewall
  7. Use Azure Security Center


  • 보안 권장사항

반응형