데이터베이스 감사 로깅 - Amazon Redshift

데이터베이스 감사 로깅

Amazon Redshift는 연결 및 사용자 작업에 대한 정보를 데이터베이스에 기록합니다. 이렇게 기록되는 로그는 보안 및 문제 해결을 목적으로 데이터베이스를 모니터링하는 데 효과적입니다. 이러한 프로세스를 데이터베이스 감사라고 합니다. 로그는 다음 위치에 저장할 수 있습니다.

  • Amazon S3 버킷 - 데이터베이스의 모니터링 작업을 담당하는 사용자를 위해 데이터 보안 기능으로 편리하게 액세스할 수 있습니다.

  • Amazon CloudWatch - 시각화 기능 및 설정 작업과 같은 CloudWatch에 내장된 기능을 사용하여 감사 로깅 데이터를 볼 수 있습니다.

참고

SYS_CONNECTION_LOG는 Amazon Redshift Serverless에 대한 연결 로그 데이터를 수집합니다.  Amazon Redshift Serverless에 대한 감사 로깅 데이터를 수집할 때는 로그 파일로 전송할 수 없으며 CloudWatch로만 전송할 수 있다는 점에 유의하세요.

Amazon Redshift 로그

Amazon Redshift는 다음 로그 파일에 정보를 로그합니다.

  • 연결 로그(Connection log) - 인증 시도 횟수와 연결 및 연결 해제 정보를 로그합니다.

  • 사용자 로그(User log) - 데이터베이스 사용자 정의 변경 사항에 대한 정보를 로그합니다.

  • 사용자 작업 로그(User activity log) - 데이터베이스에서 실행하기 전에 각 쿼리를 로그합니다.

연결 및 사용자 로그는 주로 보안 목적으로 사용하기 좋습니다. 연결 로그를 사용하여 데이터베이스에 연결 중인 사용자에 대한 정보와 관련 연결 정보를 모니터링할 수 있습니다. 이 정보는 IP 주소, 요청한 시기, 사용한 인증 유형 등이 될 수 있습니다. 그리고 사용자 로그는 데이터베이스 사용자의 정의 변경 여부를 모니터링하는 데 사용됩니다.

사용자 작업 로그는 주로 문제 해결 목적으로 사용하기 좋습니다. 이 로그는 사용자와 시스템 모두 데이터베이스에서 실행하는 쿼리 유형에 대한 정보를 추적합니다.

연결 로그와 사용자 로그는 모두 데이터베이스의 시스템 테이블에 저장되는 정보와 일치합니다. 따라서 시스템 테이블을 사용해 동일한 정보를 얻을 수도 있지만 로그 파일이 가져오거나 살펴보는 데 더욱 간단한 메커니즘을 가지고 있습니다. 로그 파일은 데이터베이스 권한이 아닌 Amazon S3 권한을 이용하여 테이블에 대한 쿼리를 실행합니다. 또한 시스템 테이블에 대해 쿼리를 실행하기보다는 로그 파일의 정보를 확인하여 데이터베이스에 미치는 영향을 최소화합니다.

참고

로그 파일은 시스템 로그 테이블인 STL_USERLOG 및 STL_CONNECTION_LOG만큼 최신 상태가 아닙니다. 최신 레코드를 제외하고 이보다 오래된 레코드를 로그 파일에 복사하였습니다.

참고

Amazon Redshift Serverless의 경우 SYS_CONNECTION_LOG는 연결 로그 데이터를 수집합니다. Amazon Redshift Serverless에 대한 감사 로깅 데이터를 수집할 때는 로그 파일로 전송할 수 없으며 CloudWatch로만 전송할 수 있다는 점에 유의하세요.

연결 로그

인증 시도 횟수와 연결 및 차단 정보를 기록합니다. 다음 표는 연결 로그에 기록되는 정보를 설명한 것입니다. 이러한 필드에 대한 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서STL_CONNECTION_LOG를 참조하세요. 수집된 Amazon Redshift Serverless의 연결 로그 데이터에 대한 자세한 내용은 SYS_CONNECTION_LOG를 참조하세요.

열 이름 설명
event 연결 또는 인증 이벤트
recordtime 이벤트 발생 시간
remotehost 원격 호스트의 이름 또는 IP 주소
remoteport 원격 호스트의 포트 번호
pid 쿼리 문과 연결된 프로세스 ID
dbname 데이터베이스 이름.
username 사용자 이름.
authmethod 인증 방법
지속 시간 연결 지속 시간(마이크로초)
sslversion SSL(Secure Sockets Layer) 버전
sslcipher SSL 암호
mtu integer
sslcompression SSL 압축 유형
sslexpansion SSL 확장 유형
iamauthguid AWS CloudTrail 요청에 대한 AWS Identity and Access Management(IAM) 인증 ID입니다. 지정된 연결에 사용되는 보안 인증 정보를 생성하기 위한 GetClusterCredentials API 호출의 식별자입니다.
application_name 세션에서 애플리케이션의 초기 이름 또는 업데이트된 이름입니다.
os_version Amazon Redshift 클러스터에 연결하는 클라이언트 시스템에 있는 운영 체제의 버전입니다.
driver_version 서드 파티 SQL 클라이언트 도구에서 Amazon Redshift 클러스터에 연결하는 ODBC 또는 JDBC 드라이버 버전입니다.
plugin_name Amazon Redshift 클러스터에 연결하는 데 사용되는 플러그인의 이름입니다.
protocol_version Amazon Redshift 드라이버가 서버와의 연결을 설정할 때 사용하는 내부 프로토콜 버전입니다.
sessionid 현재 세션에 대한 전역적으로 고유한 식별자입니다.
압축 연결에 사용 중인 압축 알고리즘입니다.

사용자 로그

다음과 같이 데이터베이스 사용자의 변경 사항에 대한 세부 정보를 기록합니다.

  • 사용자 생성

  • 사용자 삭제

  • 사용자 변경(이름 변경)

  • 사용자 변경(속성 변경)

열 이름 설명
userid 변경 사항이 적용되는 사용자 ID
username 변경 사항이 적용되는 사용자의 이름
oldusername 이름 변경 작업의 경우 변경 전 사용자 이름. 그 외 다른 작업의 경우 이 필드는 비어 있습니다.
action 실행 작업. 유효 값:
  • Alter

  • 생성

  • Drop

  • 이름 바꾸기

usecreatedb true(1)인 경우 사용자에게 데이터베이스 생성 권한이 있다는 것을 의미합니다.
usesuper true(1)인 경우 사용자가 수퍼유저임을 의미합니다.
usecatupd true(1)인 경우 사용자가 시스템 카탈로그를 업데이트할 수 있다는 것을 의미합니다.
valuntil 암호 만료 날짜
pid 프로세스 ID
xid 트랜잭션 ID
recordtime 쿼리 시작 시간(UTC)

사용자 변경 사항에 대한 추가 정보를 찾으려면 SYS_USERLOG 시스템 뷰를 쿼리합니다. 이 뷰에는 Amazon Redshift Serverless의 로그 데이터가 포함되어 있습니다.

사용자 작업 로그

데이터베이스에서 실행하기 전에 각 쿼리를 기록합니다.

열 이름 설명
recordtime 이벤트 발생 시간
db 데이터베이스 이름.
사용자 사용자 이름.
pid 쿼리 문과 연결된 프로세스 ID
userid 사용자 ID입니다.
xid 트랜잭션 ID
query LOG 접두사이며, 이어서 줄 바꿈을 포함한 쿼리 텍스트가 나옵니다.

로깅 활성화

Amazon Redshift에서는 감사 로깅이 기본적으로 설정되어 있지 않습니다. 클러스터에서 로깅을 설정하면 Amazon Redshift가 로그를 생성한 후 Amazon S3으로 업로드합니다. 이 로그는 감사 로깅이 사용된 시점부터 현재까지 데이터를 로그에 수집합니다. 각 로깅 업데이트는 이전 로그의 연속입니다.

CloudWatch 또는 Amazon S3에 업로드되는 감사 로깅은 수동 프로세스(옵션)입니다. 시스템 테이블로 업로드되는 로깅은 옵션이 아니며 자동으로 실행됩니다. 시스템 테이블에 로깅에 대한 자세한 내용은 Amazon Redshift 데이터베이스 개발자 안내서의 시스템 테이블 참조를 참조하세요.

연결 로그, 사용자 로그 및 사용자 작업 로그는 모두 AWS Management Console, Amazon Redshift API Reference 또는 AWS Command Line Interface(AWS CLI)에서 사용됩니다. 사용자 작업 로그의 경우에는 enable_user_activity_logging 데이터베이스 파라미터도 활성화해야 합니다. 연결된 파라미터를 제외하고 감사 로깅 기능만 활성화하면 데이터베이스 감사 로그가 사용자 작업 로그를 제외한 연결 로그와 사용자 로그 정보만 기록합니다. enable_user_activity_logging 파라미터는 기본적으로 활성화되어 있지 않습니다(false). true로 설정하여 사용자 활동 로그를 활성화하도록 할 수 있습니다. 자세한 내용은 Amazon Redshift 파라미터 그룹 섹션을 참조하세요.

Amazon CloudWatch로 감사 로그 전송

CloudWatch에 대한 로깅을 활성화하면 Amazon Redshift가 클러스터 연결, 사용자 및 사용자 활동 로그 데이터를 Amazon CloudWatch Logs 로그 그룹으로 내보냅니다. 스키마 측면에서 로그 데이터는 변경되지 않습니다. CloudWatch는 애플리케이션 모니터링을 위해 구축되었으며, 이를 사용하여 실시간 분석을 수행하거나 조치를 취하도록 설정할 수 있습니다. Amazon CloudWatch Logs를 사용하여 내구성이 우수한 스토리지에 로그 레코드를 저장할 수 있습니다.

Amazon S3 로그 파일을 저장하는 대신 CloudWatch를 사용하여 로그를 보는 것이 좋습니다. 구성이 많이 필요하지 않으며 모니터링 요구 사항에 맞을 수 있습니다. 특히 이미 다른 서비스 및 애플리케이션을 모니터링하는 데 사용하는 경우 더욱 그렇습니다.

Amazon CloudWatch Logs의 로그 그룹 및 로그 이벤트

내보낼 Amazon Redshift 로그를 선택한 후 Amazon CloudWatch Logs에서 로그 이벤트를 모니터링할 수 있습니다. 다음 접두사 아래에 Amazon Redshift Serverless에 대한 새 로그 그룹이 자동으로 생성됩니다. 여기서 log_type은 로그 유형을 나타냅니다.

/aws/redshift/cluster/<cluster_name>/<log_type>

예를 들어 연결 로그 내보내기를 선택하면 로그 데이터는 다음 로그 그룹에 저장됩니다.

/aws/redshift/cluster/cluster1/connectionlog

로그 이벤트는 로그 스트림을 사용하여 로그 그룹으로 내보내집니다. 서버리스 엔드포인트에 대한 로그 이벤트 내에서 정보를 검색하려면 CloudWatch Logs 콘솔, AWS CLI 또는 Amazon CloudWatch Logs API를 사용합니다. 로그 데이터 검색 및 필터링에 대한 자세한 내용은 필터를 사용하여 로그 이벤트에서 지표 생성을 참조하세요.

CloudWatch에서는 세분성과 유연성을 제공하는 쿼리 구문을 사용하여 로그 데이터를 검색할 수 있습니다. 자세한 내용은 CloudWatch Logs Insights 쿼리 구문을 참조하세요.

Amazon CloudWatch 감사 로깅으로 마이그레이션

Amazon S3으로 로그를 전송하고 구성을 변경하는 경우(예: 로그를 CloudWatch로 전송하도록 변경) Amazon S3에 남아 있는 로그는 영향을 받지 않습니다. 로그 데이터가 있는 Amazon S3 버킷에서 계속 쿼리할 수 있습니다.

Amazon S3 로그 파일 관리

Amazon S3에서 Amazon Redshift 로그 파일의 수와 크기는 클러스터의 작업에 커다란 영향을 미칩니다. 다수의 로그를 생성하는 활성 클러스터가 하나 있다고 가정할 때 Amazon Redshift가 더욱 빈번하게 로그 파일을 생성할 수 있습니다. 같은 시간에 다수의 연결 로그가 만들어지는 등 동일한 유형의 작업에 대한 로그 파일이 연이어 생성되기도 합니다.

Amazon Redshift가 Amazon S3을 사용하여 로그를 저장하면 Amazon S3에서 사용하는 스토리지에 대한 요금이 발생합니다. Amazon S3에 대한 로깅을 구성하기 전에 로그 파일을 저장하는 데 걸리는 시간을 계획해야 합니다. 이 과정에서 감사 요구에 따라 로그 파일을 삭제하거나 보관할 수 있는 시기를 결정합니다. 저장 기간에 대한 계획은 규정 준수 또는 규제 요건에 관한 데이터처럼 저장하는 데이터 유형에 따라 크게 달라집니다. Amazon S3 요금에 대한 자세한 내용은 Amazon Simple Storage Service(S3) 요금을 참조하세요.

Amazon S3에 로깅을 활성화할 때의 제한

감사 로깅은 다음과 같은 제약이 있습니다.

  • Amazon S3 관리형 키(SSE-S3) 암호화(AES-256)만 사용할 수 있습니다.

  • Amazon S3 버킷에 S3 객체 잠금 기능이 해제되어 있어야 합니다.

Amazon Redshift 감사 로깅을 위한 버킷 권한

Amazon S3에 대한 로깅을 설정하면 Amazon Redshift가 로깅 정보를 수집한 후 Amazon S3에 저장된 로그 파일로 업로드합니다. 기존 버킷이나 새 버킷을 사용할 수 있습니다. Amazon Redshift에는 버킷에 대한 다음 IAM 권한이 필요합니다.

  • s3:GetBucketAcl 이 서비스는 버킷 소유자 식별을 위해 Amazon S3 버킷에 대한 읽기 권한이 필요합니다.

  • s3:PutObject 이 서비스는 로그 업로드를 위해 객체 업로드 권한이 필요합니다. 또한 로깅을 사용하는 사용자 또는 IAM 역할에 Amazon S3 버킷에 대한 s3:PutObject 권한이 있어야 합니다. 로그가 업로드될 때마다 서비스는 현재 버킷 소유자가 로깅 활성화 시점의 버킷 소유자와 일치하는지 확인합니다. 이러한 소유자가 일치하지 않으면 오류가 발생합니다.

감사 로깅을 사용하도록 설정할 때 새 버킷을 생성하는 옵션을 선택하면 버킷에 올바른 권한이 적용됩니다. 하지만 Amazon S3에서 고유한 버킷을 생성하거나 기존 버킷을 사용하는 경우에는 버킷 이름을 포함하는 버킷 정책을 추가해야 합니다. 로그는 서비스 보안 주체 자격 증명을 사용하여 전달됩니다. 대부분의 AWS 리전의 경우 Redshift 서비스 보안 주체 이름인 redshift.amazonaws.com을 추가합니다.

버킷 정책은 다음 형식을 사용합니다. ServiceNameBucketName은 값의 자리 표시자입니다. 또한 버킷 정책에서 연결된 작업 및 리소스를 지정합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Put bucket policy needed for audit logging", "Effect": "Allow", "Principal": { "Service": "ServiceName" }, "Action": [ "s3:PutObject", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::BucketName", "arn:aws:s3:::BucketName/*" ] } ] }

다음 예는 미국 동부(버지니아 북부) 리전과 AuditLogs라는 버킷에 대한 버킷 정책입니다.

{ "Version": "2008-10-17", "Statement": [ { "Sid": "Put bucket policy needed for audit logging", "Effect": "Allow", "Principal": { "Service": "redshift.amazonaws.com" }, "Action": [ "s3:PutObject", "s3:GetBucketAcl" ], "Resource": [ "arn:aws:s3:::AuditLogs", "arn:aws:s3:::AuditLogs/*" ] } ] }

기본적으로 사용되지 않는 리전('옵트인' 리전이라고도 함)에는 리전별 서비스 보안 주체 이름이 필요합니다. 이러한 경우 서비스 보안 주체 이름에는 redshift.region.amazonaws.com 형식으로 리전이 포함됩니다. 아시아 태평양(홍콩) 리전의 redshift.ap-east-1.amazonaws.com을 예로 들 수 있습니다. 기본적으로 활성화되어 있지 않은 리전의 목록은 AWS 일반 참조AWS 리전 관리를 참조하세요.

참고

리전별 서비스 보안 주체 이름은 클러스터가 위치한 리전과 일치합니다.

로그 파일에 대한 모범 사례

Redshift가 Amazon S3에 로그 파일을 업로드할 때 대용량 파일을 부분적으로 업로드할 수 있습니다. 멀티파트 업로드에 실패하면 파일의 일부가 Amazon S3 버킷에 남아 있을 수 있습니다. 이로 인해 추가 스토리지 비용이 발생할 수 있으므로 멀티파트 업로드가 실패할 때 어떤 일이 발생하는지 이해하는 것이 중요합니다. 감사 로그의 멀티파트 업로드에 대한 자세한 설명은 멀티파트 업로드를 사용하여 객체 업로드 및 복사멀티파트 업로드 중단을 참조하세요.

S3 버킷 생성 및 버킷 정책 추가에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서버킷 생성버킷 권한 편집을 참조하세요.

Amazon Redshift 감사 로깅을 위한 버킷 구조

기본적으로 Amazon Redshift는 다음 버킷 및 객체 구조를 사용하여 Amazon S3 버킷의 로그 파일을 구성합니다.

AWSLogs/AccountID/ServiceName/Region/Year/Month/Day/AccountID_ServiceName_Region_ClusterName_LogType_Timestamp.gz

AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz를 예로 들 수 있습니다.

Amazon S3 키 접두사를 제공하는 경우 접두사를 키 시작 부분에 넣습니다.

예를 들어 접두사로 myprefix를 지정한다면 다음과 같습니다. myprefix/AWSLogs/123456789012/redshift/us-east-1/2013/10/29/123456789012_redshift_us-east-1_mycluster_userlog_2013-10-29T18:01.gz

Amazon S3 키 접두사는 512자를 초과할 수 없습니다. 또한 공백( ), 큰 따옴표("), 작은 따옴표('), 백슬래시(\)가 포함되어서도 안 됩니다. 허용되지 않는 특수 문자와 제어 문자도 다수 있습니다. 이러한 문자의 16진수 코드는 다음과 같습니다.

  • x00~x20

  • x22

  • x27

  • x5c

  • x7f 이상

Amazon S3에서 Amazon Redshift 감사 로깅 문제 해결

Amazon Redshift 감사 로깅은 다음과 같은 이유로 중단될 수 있습니다.

  • Amazon Redshift에는 Amazon S3 버킷에 로그를 업로드할 권한이 없습니다. 버킷이 올바른 IAM 정책으로 구성되었는지 확인합니다. 자세한 내용은 Amazon Redshift 감사 로깅을 위한 버킷 권한 섹션을 참조하세요.

  • 버킷 소유자가 변경된 경우. Amazon Redshift가 로그를 업로드할 때는 버킷 소유자가 로깅 사용 시점의 소유자와 동일한지 확인합니다. 버킷 소유자가 바뀐 경우에는 감사 로깅에 사용할 버킷이 다른 것으로 구성될 때까지 Amazon Redshift가 로그를 업로드하지 못합니다.

  • 버킷을 찾을 수 없는 경우. Amazon S3에서 버킷이 삭제되면 Amazon Redshift가 로그를 업로드할 수 없습니다. 이때 버킷을 다시 생성하거나, Amazon Redshift를 구성하여 로그를 다른 버킷으로 업로드해야 합니다.

AWS CloudTrail을 사용하여 Amazon Redshift API 호출 로깅

Amazon Redshift는 Amazon Redshift에서 사용자, 역할 또는 AWS 서비스가 수행한 작업에 대한 레코드를 제공하는 서비스인 AWS CloudTrail과 통합됩니다. CloudTrail은 Amazon Redshift에 대한 모든 API 호출을 이벤트로 캡처합니다. Amazon Redshift와 AWS CloudTrail 통합에 대한 자세한 내용은 CloudTrail을 사용한 로깅을 참조하십시오.

CloudTrail은 Amazon Redshift 데이터베이스 감사 로깅과 별도로 또는 추가로 사용할 수 있습니다.

CloudTrail에 대한 자세한 내용은 AWS CloudTrail 사용 설명서를 참조하세요.