SQL Server Audit - Amazon Relational Database Service

SQL Server Audit

Amazon RDS에서는 기본 제공 SQL Server Audit 메커니즘을 사용하여 Microsoft SQL Server 데이터베이스를 감사할 수 있습니다. 온프레미스 데이터베이스 서버용으로 생성하는 경우와 같은 방식으로 감사 및 감사 사양을 생성할 수 있습니다.

RDS는 사용자가 제공한 IAM 역할을 사용하여 완료된 감사 로그를 S3 버킷에 업로드합니다. 보존을 활성화하면 RDS는 구성된 기간 동안 DB 인스턴스에 대한 감사 로그를 유지합니다.

자세한 내용은 Microsoft SQL Server 설명서의 SQL Server Audit(데이터베이스 엔진)를 참조하십시오.

SQL Server Audit와 데이터베이스 활동 스트림 함께 사용

RDS용 데이터베이스 활동 스트림을 사용하여 SQL Server Audit 이벤트를 Imperva, McAfee 및 IBM의 데이터베이스 활동 모니터링 도구와 통합할 수 있습니다. RDS SQL Server에 대해 데이터베이스 활동 스트림을 사용하여 감사를 수행하는 방법에 대한 자세한 내용은 Microsoft SQL Server에서의 감사 섹션을 참조하세요.

SQL Server Audit 지원

SQL Server 2016부터는 Amazon RDS에서 모든 버전의 SQL Server가 서버 수준 감사를 지원하고 Enterprise Edition은 데이터베이스 수준 감사도 지원합니다. SQL Server 2016(13.x) SP1부터는 모든 버전이 서버 및 데이터베이스 수준 감사를 모두 지원합니다. 자세한 내용은 SQL Server 설명서의 SQL Server Audit(데이터베이스 엔진)를 참조하십시오.

RDS는 SQL Server Audit에 대한 다음 옵션 설정 구성을 지원합니다.

옵션 설정 유효한 값 설명
IAM_ROLE_ARN arn:aws:iam::account-id:role/role-name 형식의 유효한 ARN(Amazon 리소스 이름). 감사 로그를 저장할 S3 버킷에 액세스 권한을 부여하는 IAM 역할의 ARN입니다. 자세한 내용은 AWS 일반 참조Amazon 리소스 이름(ARN)을 참조하세요.
S3_BUCKET_ARN arn:aws:s3:::amzn-s3-demo-bucket 또는 arn:aws:s3:::amzn-s3-demo-bucket/key-prefix 형식의 유효한 ARN 감사 로그를 저장할 S3 버킷의 ARN입니다.
ENABLE_COMPRESSION true 또는 false 감사 로그 압축을 제어합니다. 기본적으로 압축은 활성화됩니다(true로 설정).
RETENTION_TIME 0~840 SQL Server Audit 레코드가 RDS 인스턴스에 유지되는 보존 기간(시간 단위)입니다. 기본적으로 보존은 비활성화됩니다.

DB 인스턴스 옵션에 SQL Server Audit 추가

SQL Server Audit를 활성화하려면 DB 인스턴스에 옵션을 활성화하고 SQL Server 내에서 이 기능을 활성화하는 두 단계가 필요합니다. SQL Server Audit 옵션을 DB 인스턴스에 추가하는 프로세스는 다음과 같습니다.

  1. 새 옵션 그룹을 생성하거나 기존 옵션 그룹을 복사 또는 수정합니다.

  2. 필요한 모든 옵션을 추가하고 구성하십시오.

  3. 옵션 그룹을 DB 인스턴스에 연동시킵니다.

SQL Server Audit 옵션을 추가한 후 DB 인스턴스를 다시 시작할 필요가 없습니다. 옵션 그룹이 활성화되면 S3 버킷에 감사를 생성하고 감사 로그를 저장할 수 있습니다.

DB 인스턴스의 옵션 그룹에 SQL Server Audit을 추가하고 구성하려면
  1. 다음 중 하나를 선택합니다.

    • 기존 옵션 그룹을 사용합니다.

    • 사용자 지정 DB 옵션 그룹을 생성하고 해당 옵션 그룹을 사용합니다. 자세한 내용은 옵션 그룹 생성 섹션을 참조하세요.

  2. 옵션 그룹에 SQLSERVER_AUDIT 옵션을 추가하고 옵션 설정을 구성합니다. 옵션 추가에 대한 자세한 내용은 옵션 그룹에 옵션 추가 섹션을 참조하세요.

    • IAM 역할에 필요한 정책의 IAM 역할이 이미 있는 경우 해당 역할을 선택할 수 있습니다. 새 IAM 역할을 만들려면 새 역할 생성을 선택하십시오. 필요한 정책에 대한 자세한 내용은 수동으로 SQL Server Audit에 대한 IAM 역할 생성 단원을 참조하십시오.

    • S3 대상 선택의 경우 사용할 S3 버킷이 이미 있는 경우 선택합니다. S3 버킷을 생성하려면 S3 버킷 새로 만들기를 선택하십시오.

    • 압축 활성화의 경우 감사 파일을 압축하려면 이 옵션을 선택한 상태로 둡니다. 압축은 기본적으로 활성화되어 있습니다. 압축을 비활성화하려면 Enable Compression(압축 활성화) 선택을 취소하십시오.

    • 감사 로그 보존의 경우 DB 인스턴스에 감사 레코드를 보존하려면 이 옵션을 선택합니다. 보존 시간을 시간 단위로 지정하십시오. 최대 보존 기간은 35일입니다.

  3. 옵션 그룹을 새 DB 인스턴스 또는 기존 DB 인스턴스에 적용합니다. 다음 중 하나를 선택합니다.

    • 새 DB 인스턴스를 생성하는 경우, 인스턴스를 시작할 때 옵션 그룹을 적용하십시오.

    • 기존 DB 인스턴스의 경우, 해당 인스턴스를 수정한 후 새 옵션 그룹을 연결하여 옵션 그룹을 적용하십시오. 자세한 내용은 Amazon RDS DB 인스턴스 수정 섹션을 참조하세요.

SQL Server Audit 옵션 수정

SQL Server Audit 옵션을 활성화하면 설정을 수정할 수 있습니다. 옵션 설정을 변경하는 방법에 대한 자세한 내용은 옵션 설정 수정 단원을 참조하십시오.

DB 인스턴스 옵션에서 SQL Server Audit 제거

감사를 비활성화한 다음 옵션을 삭제하여 SQL Server Audit 기능을 해제할 수 있습니다.

감사를 제거하려면
  1. SQL Server 내부의 모든 감사 설정을 비활성화합니다. 감사가 실행되는 위치를 확인하려면 SQL Server 보안 카탈로그 보기를 쿼리하십시오. 자세한 내용은 Microsoft SQL Server 설명서의 보안 카탈로그 보기를 참조하십시오.

  2. DB 인스턴스에서 SQL Server Audit 옵션을 삭제하십시오. 다음 중 하나를 선택합니다.

    • DB 인스턴스가 사용하는 옵션 그룹에서 SQL Server Audit 옵션을 삭제하십시오. 이 변경은 동일한 옵션 그룹을 사용하는 모든 DB 인스턴스에 영향을 미칩니다. 자세한 내용은 옵션 그룹에서 옵션 제거 섹션을 참조하세요.

    • DB 인스턴스를 수정한 다음 SQL Server Audit 옵션이 없는 옵션 그룹을 선택합니다. 이 변경은 수정하는 DB 인스턴스에만 영향을 줍니다. 기본(빈) 옵션 그룹을 지정하거나 다른 사용자 지정 옵션 그룹을 지정할 수 있습니다. 자세한 내용은 Amazon RDS DB 인스턴스 수정 섹션을 참조하세요.

  3. DB 인스턴스에서 SQL Server Audit 옵션을 삭제한 후 인스턴스를 다시 시작할 필요가 없습니다. S3 버킷에서 불필요한 감사 파일을 제거하십시오.

SQL Server Audit의 사용

온프레미스 데이터베이스 서버에서 제어하는 것과 동일한 방식으로 서버 감사, 서버 감사 사양 및 데이터베이스 감사 사양을 제어할 수 있습니다.

감사 생성

온프레미스 데이터베이스 서버에 대해 생성하는 것과 같은 방법으로 서버 감사를 생성합니다. 서버 감사를 생성하는 방법에 대한 자세한 내용은 Microsoft SQL Server 설명서에서 서버 감사 생성을 참조하십시오.

오류를 방지하려면 다음 제한 사항을 준수하십시오.

  • 인스턴스당 지원되는 최대 50개의 서버 감사를 초과하지 마십시오.

  • 이진 파일에 데이터를 쓰도록 SQL Server에 지시하십시오.

  • 서버 감사 이름의 접두사로 RDS_를 사용하지 마십시오.

  • FILEPATHD:\rdsdbdata\SQLAudit을 지정합니다.

  • MAXSIZE에 2MB ~ 50MB 사이의 크기를 지정하십시오.

  • MAX_ROLLOVER_FILES 또는 MAX_FILES를 구성하지 마십시오.

  • SQL Server가 감사 레코드를 쓰지 못할 경우 DB 인스턴스를 종료하도록 구성하지 마십시오.

감사 사양 생성

온프레미스 데이터베이스 서버에서 생성하는 것과 동일한 방식으로 서버 감사 사양 및 데이터베이스 감사 사양을 생성합니다. 감사 사양 생성에 대한 자세한 내용은 Microsoft SQL Server 설명서에서 서버 감사 사양 생성데이터베이스 감사 사양 생성을 참조하십시오.

오류를 피하려면 데이터베이스 감사 사양 또는 서버 감사 사양의 접두사로 RDS_를 사용하지 마십시오.

감사 로그 보기

감사 로그는 D:\rdsdbdata\SQLAudit에 저장됩니다.

SQL Server가 감사 로그 파일에 파일 쓰기를 완료하면—파일이 크기 제한에 도달하면—Amazon RDS가 S3 버킷에 파일을 업로드합니다. 보존을 활성화하면 Amazon RDS가 파일을 보존 폴더 D:\rdsdbdata\SQLAudit\transmitted로 옮깁니다.

보존 구성에 대한 자세한 내용은 DB 인스턴스 옵션에 SQL Server Audit 추가 단원을 참조하십시오.

감사 레코드는 감사 로그 파일이 업로드될 때까지 DB 인스턴스에 보관됩니다. 다음 명령을 실행하여 감사 레코드를 볼 수 있습니다.

SELECT * FROM msdb.dbo.rds_fn_get_audit_file ('D:\rdsdbdata\SQLAudit\*.sqlaudit' , default , default )

같은 명령을 사용하여 필터를 D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit로 변경하여 보존 폴더의 감사 레코드를 볼 수 있습니다.

SELECT * FROM msdb.dbo.rds_fn_get_audit_file ('D:\rdsdbdata\SQLAudit\transmitted\*.sqlaudit' , default , default )

다중 AZ 인스턴스에서 SQL Server Audit 사용

다중 AZ 인스턴스의 경우 감사 로그 파일을 Amazon S3으로 보내는 프로세스는 단일 AZ 인스턴스의 프로세스와 유사합니다. 그러나 몇 가지 중요한 차이점이 있습니다.

  • 데이터베이스 감사 사양 객체는 모든 노드에 복제됩니다.

  • 서버 감사 및 서버 감사 사양은 보조 노드에 복제되지 않습니다. 대신, 수동으로 생성하거나 수정해야 합니다.

두 노드에서 서버 감사 사양 또는 서버 감사를 캡처하려면

  1. 기본 노드에서 서버 감사 또는 서버 감사 사양을 생성하십시오.

  2. 보조 노드로 장애 조치하고 보조 노드에서 동일한 이름과 GUID로 서버 감사 또는 서버 감사 사양을 생성합니다. AUDIT_GUID 파라미터를 사용하여 GUID를 지정합니다.

S3 버킷 구성

감사 로그 파일은 DB 인스턴스에서 S3 버킷으로 자동 업로드됩니다. 감사 파일의 대상으로 사용하는 S3 버킷에는 다음 제한이 적용됩니다.

  • DB 인스턴스와 동일한 AWS 리전에 있어야 합니다.

  • 대중에게 공개되어서는 안 됩니다.

  • 버킷 소유자는 IAM 역할 소유자여야 합니다.

  • IAM 역할에는 S3 버킷 서버 측 암호화와 관련된 고객 관리형 KMS 키에 대한 권한이 있어야 합니다.

데이터를 저장하는 데 사용되는 대상 키는 amzn-s3-demo-bucket/key-prefix/instance-name/audit-name/node_file-name.ext 명명 스키마를 따릅니다.

참고

버킷 이름과 키 접두사 값을 모두 S3_BUCKET_ARN 옵션 설정을 사용하여 설정합니다.

스키마는 다음 요소로 구성됩니다.

  • amzn-s3-demo-bucket – S3 버킷의 이름입니다.

  • key-prefix – 감사 로그에 사용할 사용자 지정 키 접두사.

  • instance-name – Amazon RDS 인스턴스의 이름.

  • audit-name – 감사의 이름.

  • node – 감사 로그의 소스인 노드의 식별자(node1 또는 node2). 단일 AZ 인스턴스에는 하나의 노드가 있고 다중 AZ 인스턴스에는 두 개의 복제 노드가 있습니다. 기본 노드와 보조 노드의 역할은 시간이 지남에 따라 변하기 때문에 이들은 기본 노드와 보조 노드가 아닙니다. 대신, 노드 식별자는 단순한 레이블입니다.

    • node1 – 첫 번째 복제 노드(단일 AZ에는 하나의 노드만 있음).

    • node2 – 두 번째 복제 노드(다중 AZ에는 두 개의 노드가 있음).

  • file-name – 대상 파일 이름. 파일 이름은 SQL Server에서 그대로 가져옵니다.

  • ext – 파일 확장자(zip 또는 sqlaudit):

    • zip – 압축이 활성화된 경우(기본값).

    • sqlaudit – 압축이 비활성화된 경우.

수동으로 SQL Server Audit에 대한 IAM 역할 생성

일반적으로 새 옵션을 만들면 AWS Management Console은 IAM 역할 및 IAM 신뢰 정책을 생성합니다. 그러나 SQL Server Audit에서 사용할 새로운 IAM 역할을 수동으로 생성할 수 있으므로 추가 요구 사항에 맞게 사용자 지정할 수 있습니다. 그러려면 IAM 역할을 생성하고 Amazon RDS 서비스가 Amazon S3 버킷을 사용할 수 있도록 권한을 위임합니다. IAM 역할을 만들 때 신뢰 및 권한 정책을 연결합니다. 신뢰 정책은 Amazon RDS가 이 역할을 맡도록 허용합니다. 권한 정책은 이 역할이 수행할 수 있는 작업을 정의합니다. 자세한 내용은 AWS Identity and Access Management 사용 설명서에서 AWS 서비스에 대한 권한을 위임할 역할 생성을 참조하세요.

이 섹션의 예를 사용하여 필요한 신뢰 관계와 사용 권한 정책을 생성할 수 있습니다.

다음 예는 SQL Server Audit에 대한 신뢰 관계를 보여줍니다. 이 관계는 서비스 원칙 rds.amazonaws.com을 사용하여 RDS가 S3 버킷에 쓸 수 있도록 허용합니다. 서비스 보안 주체는 서비스에 권한을 부여하는 데 사용되는 식별자입니다. 이러한 방식으로 rds.amazonaws.com에 대한 액세스를 허용할 때마다 RDS가 사용자를 대신하여 작업을 수행하도록 허용합니다. 서비스 보안 주체에 대한 자세한 내용은 AWS JSON 정책 요소: 보안 주체를 참조하세요.

예 SQL Server Audit에 대한 신뢰 관계
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

서비스 권한을 특정 리소스로 제한하는 리소스 기반 신뢰 관계의 aws:SourceArnaws:SourceAccount 전역 조건 컨텍스트 키를 사용하는 것이 좋습니다. 이는 혼동된 대리자 문제를 방지하는 가장 효과적인 방법입니다.

전역 조건 컨텍스트 키를 모두 사용하고 aws:SourceArn 값에 계정 ID가 포함되도록 할 수 있습니다. 이 경우 aws:SourceAccount 값과 aws:SourceArn 값의 계정이 동일한 문에서 사용될 때 동일한 계정 ID를 사용해야 합니다.

  • 단일 리소스에 대한 교차 서비스 액세스를 원하는 경우 aws:SourceArn을 사용하세요.

  • 해당 계정의 모든 리소스가 교차 서비스 사용과 연결되도록 허용하려는 경우 aws:SourceAccount를 사용하세요.

신뢰 정책에서는 역할에 액세스하는 리소스의 전체 Amazon 리소스 이름(ARN)이 포함된 aws:SourceArn 전역 조건 컨텍스트 키를 사용해야 합니다. SQL Server Audit의 경우 다음 예와 같이 DB 옵션 그룹과 DB 인스턴스를 모두 포함해야 합니다.

예 SQL Server Audit에 대한 전역 조건 컨텍스트 키와의 신뢰 관계
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn": [ "arn:aws:rds:Region:my_account_ID:db:db_instance_identifier", "arn:aws:rds:Region:my_account_ID:og:option_group_name" ] } } } ] }

SQL Server Audit에 대한 권한 정책의 다음 예에서는 Amazon S3 버킷에 대한 ARN을 지정합니다. ARN을 사용하여 액세스 권한을 부여할 특정 계정, 사용자 또는 역할을 식별할 수 있습니다. ARN 사용에 대한 자세한 내용은 Amazon 리소스 이름(ARN)을 참조하세요.

예 SQL Server Audit에 대한 권한 정책
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketACL", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket" }, { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*" } ] }
참고

s3:ListAllMyBuckets 작업은 동일한 AWS 계정이 S3 버킷과 SQL Server DB 인스턴스를 모두 소유하고 있는지 확인하는 데 필요합니다. 이 작업은 계정에 있는 버킷의 이름을 나열합니다.

S3 버킷 네임스페이스는 글로벌입니다. 실수로 버킷을 삭제한 경우 다른 사용자가 동일한 이름의 버킷을 다른 계정에서 만들 수 있습니다. 그런 다음 SQL Server 감사 데이터가 새 버킷에 기록됩니다.