연습 - 보안 관리

완료됨

네트워킹, 인증 및 데이터 보호 수준에서 Azure SQL Database 보호가 완료된 후 마지막 단계는 지속적으로 보안을 관리하는 방법을 이해하는 것입니다. 보안 관리에는 감사, 모니터링 및 데이터 분류가 포함됩니다.

감사

감사는 규정 준수를 유지 관리하고, 데이터베이스 활동을 이해하고, 잠재적 보안 침해로 의심되는 사안을 나타낼 수 있는 불일치 및 이상에 대한 인사이트를 얻는 데 도움이 될 수 있습니다. 데이터베이스 수준에서도 가능하지만 이 활동에서는 서버 수준에서 감사를 설정하겠습니다.

SQL Server 감사에 대한 대안으로, Azure SQL Database에는 ‘Azure SQL 감사’가 있습니다. 이는 SQL Server 감사를 통해 작동하며 SQL Server와 같이 감사 작업 그룹 및 작업을 지원합니다. 감사 기능은 데이터베이스 및 서버 이벤트를 추적하고 Azure 스토리지, 로그 분석 또는 Azure 이벤트 허브의 감사 로그에 이벤트를 기록합니다. Azure Blob Storage 계정을 가리키는 경우 XEvents 파일에 결과를 저장하고 분석할 수 있습니다. Log Analytics에서는 KQL(Kusto 쿼리 언어)로 로그를 쿼리하는 기능을 잠금 해제하고 Log Analytics 감사 대시보드를 활용할 수 있습니다.

감사 구성

SQL Database를 배포하는 이전 연습에서는 서버 수준에서 감사를 설정했지만 데이터베이스 수준에서도 사용할 수 있습니다. 이후 연습에서는 Azure Blob Storage, KQL 및 Log Analytics 대시보드로 전송되는 파일에 액세스하고 이를 활용하는 방법을 알아봅니다.

Log Analytics 작업 영역을 설정하려면 다음 단계를 완료합니다.

  1. Azure Portal 검색 창에서 로그 분석을 입력한 다음결과에서 Log Analytics 작업 영역을 선택합니다. Log Analytics 작업 영역 창이 나타납니다.

  2. 만들기를 선택합니다. Log Analytics 작업 영역 만들기 메뉴가 나타납니다.

  3. 기본 탭에서 각 설정에 다음 값을 입력합니다.

    설정
    프로젝트 세부 정보
    구독 컨시어지 구독
    리소스 그룹 드롭다운 목록에서 [샌드박스 리소스 그룹]을 선택합니다.
    인스턴스 세부 정보
    이름 azuresql-la를 입력합니다.
    지역 다음 목록에서 사용자와 가장 가까운 위치 선택

    무료 샌드박스를 사용하면 Azure 글로벌 지역의 일부 하위 지역에 리소스를 만들 수 있습니다. 리소스를 만들 때 다음 목록에서 지역을 선택합니다.

    • 미국 서부 2
    • 미국 중남부
    • 미국 중부
    • 미국 동부
    • 서유럽
    • 동남 아시아
    • 일본 동부
    • 브라질 남부
    • 오스트레일리아 남동부
    • 인도 중부
  4. 검토 + 만들기를 선택하고 입력의 유효성을 검사할 때까지 기다린 다음 만들기를 선택합니다. 리소스가 배포될 때까지 기다립니다.

  5. 리소스로 이동을 선택합니다. Log Analytics 작업 영역에 대한 개요 창이 나타납니다.

  6. Azure Portal에서 AdventureWorks 데이터베이스로 이동합니다.

  7. 메뉴에서 보안 아래의 감사를 선택합니다. 옵션을 검토합니다.

    서버 수준에서 감사를 적용할 수 있으며, 이는 Azure SQL Database 논리 서버 내의 모든 데이터베이스에 적용됩니다. 데이터베이스 수준에서도 감사를 적용하는 경우(이 단원에서 이 작업을 수행할 예정임) 두 감사가 병렬로 수행되며 어느 하나가 다른 하나를 재정의하지 않습니다.

  8. 슬라이드 토글을 밀어 Azure SQL 감사 사용을 선택합니다.

  9. 스토리지 확인란을 선택한 다음, 필수 필드 입력을 완료합니다.

    • 구독에는 드롭다운 목록에서 컨시어지 구독을 선택합니다.
    • 스토리지 계정에는 드롭다운 목록에서 sql로 시작하고 뒤에 문자와 숫자로 된 임의의 문자열이 오는 계정을 선택합니다.
    • 스토리지 인증 유형을 기본 스토리지 액세스 키 옵션으로 둡니다.

    sql 스토리지 계정은 sqldbauditlogs라는 컨테이너 내에 Blob 파일 컬렉션으로 저장되는 XEvent 로그 파일을 수집하는 데 사용됩니다. 작업 뒷부분에서 컨테이너를 검토하면서 로그 파일이 Log Analytics와 어떻게 다른지 알아볼 것입니다.

    스토리지 계정이 표시되지 않으면 새 계정을 만듭니다. 이 내용이 표시되려면 몇 분 후에 페이지를 새로 고쳐야 할 수 있습니다.

    프로덕션 환경을 감사하려는 경우 감사 로그를 위한 별도의 스토리지 계정을 보유하는 방안을 고려해 보세요.

  10. 고급 속성을 선택하여 섹션을 확장하고 다음 구성 항목을 설정합니다.

    • 보존(일수)에는 7을 입력합니다.
    • 스토리지 액세스 키에는 기본을 선택합니다.

    참고 항목

    고급 속성이 표시되지 않는 경우 명령 모음에서 저장을 선택한 다음 이 페이지의 구성 지침을 반복합니다.

  11. Log Analytics 확인란을 선택한 다음 필수 필드 입력을 완료합니다.

    • 구독에는 드롭다운 목록에서 컨시어지 구독을 선택합니다.
    • Log Analytics에는 이 연습 앞부분에서 만든 Log Analytics 작업 영역(asuresql-la)을 선택합니다.
  12. 저장을 선택합니다.

    구성을 처리하는 데 몇 분 정도 걸릴 수 있습니다.

이제 스토리지 계정 및 Azure Monitor 작업 영역에 감사를 사용하도록 설정했습니다. 나중에 Azure SQL의 감사 기능에 대해 자세히 살펴보겠습니다. 또한 감사 로그를 분석하여 모듈 전체에서 수행한 모든 변경 사항을 확인하는 방법과 몇 가지 흥미로운 사용 사례도 알아보겠습니다.

Azure SQL 데이터베이스용 원장

원장 기능은 데이터베이스에서 변조 증거, 데이터 무결성에 대한 암호화 증명 기능을 제공합니다. 이 증명은 감사 프로세스를 간소화하는 데 도움이 될 수 있습니다.

원장을 사용하면 DBA(데이터베이스 관리자), 시스템 관리자 및 클라우드 관리자를 비롯한 모든 공격자와 높은 권한의 사용자로부터 데이터를 보호할 수 있습니다. 기존 원장과 마찬가지로 이 기능은 기록 데이터를 유지합니다. 원장 테이블의 트랜잭션이 데이터를 수정하는 경우 이벤트는 트랜잭션의 모든 행을 나타내는 루트 해시를 만드는 Merkle 트리 데이터 구조를 사용하여 암호화된 SHA-256 해시됩니다. 그런 다음 데이터베이스에서 처리하는 트랜잭션도 Merkle 트리 데이터 구조를 바탕으로 SHA-256 해시됩니다. 결과는 블록을 형성하는 루트 해시입니다. 그런 다음, 블록의 루트 해시와 이전 블록의 루트 해시를 해시 함수에 대한 입력으로 사용하여 블록이 SHA-256 해시됩니다. 이 해시는 블록체인을 형성합니다. 데이터베이스에서 행을 업데이트하면 행의 이전 값이 기록 테이블에서 유지되고 보호됩니다. 원장에는 시간별로 데이터베이스에 적용된 모든 변경 내용이 기록됩니다.

원장 기능은 다음 두 가지 형식으로 테이블에 도입됩니다.

  • 테이블의 행을 업데이트하고 삭제할 수 있는 업데이트 가능한 원장 테이블
  • 테이블에 삽입만 허용하는 추가 전용 원장 테이블

업데이트 가능한 원장 테이블과 추가 전용 원장 테이블 모두 변조 증거 및 디지털 포렌식 기능을 제공합니다.

Azure SQL Database용 원장을 사용하여 연습

Azure SQL Database를 만드는 연습에서 myLedgerDatabase라는 데이터베이스를 추가하고 Account.Balance라는 테이블을 만들었습니다. 이 연습에서는 데이터를 삽입하고, 데이터를 업데이트하고, 기록 테이블과 원장 보기를 쿼리하여 발생하는 추적 및 테이블 간의 관계를 확인합니다.

  1. SSMS를 열어 Azure SQL Database 논리 서버에 연결합니다.

  2. myLedgerDatabase 데이터베이스를 마우스 오른쪽 단추로 클릭하고 새 쿼리를 선택합니다.

  3. 개시 잔액이 50달러인 신규 고객으로 이름 Nick Jones를 삽입합니다.

    INSERT INTO [Account].[Balance]
    VALUES (1, 'Jones', 'Nick', 50);
    
  4. 개시 잔액이 각각 500달러, 30달러 및 200달러인 신규 고객으로 John Smith, Joe SmithMary Michaels 이름을 삽입합니다.

    INSERT INTO [Account].[Balance]
    VALUES (2, 'Smith', 'John', 500),
    (3, 'Smith', 'Joe', 30),
    (4, 'Michaels', 'Mary', 200);
    
  5. [Account].[Balance]라는 업데이트 가능한 원장 테이블을 보고 테이블에 추가된 GENERATED ALWAYS 열을 지정합니다. 실행을 선택하여 쿼리를 실행합니다.

    SELECT [CustomerID]
       ,[LastName]
       ,[FirstName]
       ,[Balance]
       ,[ledger_start_transaction_id]
       ,[ledger_end_transaction_id]
       ,[ledger_start_sequence_number]
       ,[ledger_end_sequence_number]
     FROM [Account].[Balance];  
    

    결과 창에는 T-SQL 명령에 의해 삽입된 값과 데이터 계보 용도로 사용되는 시스템 메타데이터가 차례로 표시됩니다.

    • ledger_start_transaction_id 열은 데이터를 삽입한 트랜잭션과 연결된 고유한 트랜잭션 ID를 기록합니다. John, JoeMary는 동일한 트랜잭션을 사용하여 삽입되었으므로 동일한 트랜잭션 ID를 공유합니다.
    • ledger_start_sequence_number 열은 트랜잭션에 의해 값이 삽입된 순서를 기록합니다.
  6. Nick의 잔액을 50에서 100으로 업데이트합니다.

    UPDATE [Account].[Balance] SET [Balance] = 100
    WHERE [CustomerID] = 1;
    
  7. [Account].[Balance] 원장 보기를 트랜잭션 원장 시스템 뷰와 함께 확인하여 변경을 수행한 사용자를 식별합니다. 실행을 선택하여 쿼리를 실행합니다.

     SELECT
     t.[commit_time] AS [CommitTime] 
     , t.[principal_name] AS [UserName]
     , l.[CustomerID]
     , l.[LastName]
     , l.[FirstName]
     , l.[Balance]
     , l.[ledger_operation_type_desc] AS Operation
     FROM [Account].[Balance_Ledger] l
     JOIN sys.database_ledger_transactions t
     ON t.transaction_id = l.ledger_transaction_id
     ORDER BY t.commit_time DESC;
    

    업데이트 가능한 원장 테이블에서 Nick의 계좌 잔액이 100으로 업데이트되었습니다.
    원장 보기는 원장 테이블을 업데이트하는 것이 DELETE를 포함하는 원래 행의 50임을 보여줍니다. 100이 있는 새 행의 해당 INSERT가 있는 잔액은 Nick에 대한 새 잔액을 보여줍니다.

모니터링

보안 모니터링 및 관리에는 두 가지 측면이 있습니다.

  • Azure 수준
  • 데이터베이스 또는 서버 수준

Azure에서는 활동 로그 및 역할 기반 액세스 제어 감사와 같은 도구를 적용할 수 있습니다.

Azure SQL Database에서는 Azure SQL 감사를 구성하고 동적 관리 뷰, 메트릭 및 경고를 적용하여 보안 관련 이벤트를 모니터링할 수 있습니다. 예를 들어 sys.event_log를 사용하면 실패한 연결 수와 성공한 연결 수, 그리고 방화벽에서 차단된 연결 수를 추적할 수 있습니다.

Advanced Threat Protection에 대한 경고 설정을 포함하여 클라우드용 Microsoft Defender를 구성하는 것이 좋습니다. 다음 섹션에서는 이러한 보안 요소에 대해 설명하고 연습합니다. 마지막으로 클라우드용 Microsoft Defender를 사용하여 Azure 자산의 모든 리소스를 모니터링 및 관리하고 이에 관한 권장 사항을 받을 수 있습니다.

데이터 검색 및 분류

데이터 검색 및 분류 서비스는 Azure SQL Database에 대한 새로운 정보 보호 패러다임을 형성합니다. 이 서비스의 목적은 데이터베이스뿐만 아니라 데이터도 보호하는 것입니다. 이 패러다임에는 다음이 포함됩니다.

  • 분류해야 할 잠재적으로 중요한 데이터에 대한 검색 및 권장 사항
  • 메타데이터 특성을 사용하여 레이블을 열에 영구적으로 추가하는 기능
  • 중요한 데이터 액세스를 감사하고 쿼리하는 기능

Azure SQL은 데이터 분류에서 SQL Information Protection 정책과 Microsoft Information Protection 정책을 모두 제공하며 요구 사항에 따라 이러한 정책 중 하나를 선택할 수 있습니다.

포털 보기는 Azure SQL에만 사용할 수 있지만 SQL Server는 SQL Server Management Studio의 마법사를 통해 유사한 기능을 지원합니다.

자세한 내용은 데이터 검색 및 분류를 참조하세요.

Microsoft Defender for Cloud

클라우드용 Microsoft Defender는 고급 SQL 보안 기능의 통합 패키지입니다. 두 가지 주요 기능을 사용하도록 설정하고 관리하는 단일 준비 위치를 제공합니다.

  • 취약성 평가
  • Advanced Threat Protection

취약성 평가

SQL 취약성 평가는 최상위 수준에서 보안 상태를 명확하게 보여 주고 모든 잠재적 문제를 해결하기 위한 실행 가능한 단계를 제공하는 검사 서비스입니다. 정기적 반복 검사를 구성하는 경우 서비스에서 7일마다 데이터베이스를 검사하고 취약성이 있는지 확인하도록 설정합니다. 그런 다음, 해당 보고서를 관리자, 구독 소유자 또는 변경에 대한 알림이 필요할 수 있는 다른 사람에게 보내도록 선택할 수 있습니다. 이 서비스가 작동하려면 결과를 저장할 스토리지 계정을 지정해야 합니다.

Advanced Threat Protection

Advanced Threat Protection을 사용하면 비정상적인 활동에 대한 보안 경고를 수신함으로써 발생하는 잠재적 위협을 탐지하고 이에 대응할 수 있습니다. Advanced Threat Protection은 고급 모니터링 및 기계 학습 기술을 적용하여 다음과 같은 위협이 발생했는지 탐지합니다.

  • SQL 삽입
  • SQL 삽입 취약성
  • 데이터 반출
  • 안전하지 않은 작업
  • 무차별 암호 대입 시도
  • 비정상적인 클라이언트 로그인

다음 두 연습에서는 클라우드용 Microsoft Defender가 일반적으로 Azure SQL에서 사용하도록 설정하고 보호하는 기능 및 시나리오를 자세히 살펴보겠습니다.

행 수준 보안

행 수준 보안을 통해 그룹 멤버 자격 또는 실행 컨텍스트를 사용하여 데이터베이스 테이블의 행에 대한 액세스를 제어할 수 있습니다.

RLS(행 수준 보안)를 사용하면 데이터 행 액세스를 제한할 수 있습니다. 예를 들어 작업자가 자신의 부서와 관련된 데이터 행에만 액세스하도록 할 수 있습니다. 또는, 고객의 데이터 액세스를 회사와 관련된 데이터로만 제한할 수도 있습니다.

액세스 제한 논리는 다른 애플리케이션 계층의 데이터와 다소 떨어진 데이터베이스 계층에 위치합니다. 데이터베이스 시스템은 모든 계층에서 데이터 액세스를 시도할 때마다 액세스를 제한합니다. 이렇게 하면 보안 시스템의 노출 영역을 줄임으로써 보안 시스템을 보다 안정적이고 강력하게 만들 수 있습니다.

RLS는 두 가지 유형의 보안 조건자를 지원합니다.

  • 필터 조건자는 읽기 작업(SELECT, UPDATE 및 DELETE)에 사용 가능한 행을 자동으로 필터링합니다.
  • 차단 조건자는 조건자를 위반하는 쓰기 작업(AFTER INSERT, AFTER UPDATE, BEFORE UPDATE, BEFORE DELETE)을 명시적으로 차단합니다.

지식 점검

1.

다음 중 Azure SQL Database에 대한 보안 관련 이벤트를 모니터링할 수 있는 방법은 무엇입니까?