서버 액세스 로깅 문제 해결
서버 액세스 로깅 문제 해결
S3 버킷에 서버 액세스 로깅을 설정할 때 만날 수 있는 문제를 하나씩 살펴보고, 어떻게 해결하는지 알려드릴게요. 로그가 생각처럼 안 쌓일 때 이 페이지에서 설명하는 순서대로 확인해 보시면 됩니다.
본문
로깅 설정 시 흔한 오류 메시지
AWS CLI나 AWS SDK로 로깅을 켤 때 자주 나타나는 오류 메시지를 정리했어요.
오류: Cross S3 location logging not allowed
대상 버킷(로그가 저장될 버킷)이 원본 버킷과 다른 리전에 있으면 이 오류가 발생해요. 액세스 로그를 받을 대상 버킷이 원본 버킷과 같은 AWS 리전, 같은 AWS 계정에 있어야 해요.
오류: The owner for the bucket to be logged and the target bucket must be the same
서버 액세스 로깅을 켤 때 대상 버킷이 다른 계정에 속해 있으면 이 오류가 나요. 대상 버킷이 원본 버킷과 같은 AWS 계정에 있어야 해요.
대상 버킷은 원본 버킷과 다른 버킷을 고르는 걸 권장해요. 원본 버킷과 대상 버킷이 같으면, 버킷에 기록되는 로그에 대한 로그가 또 생겨서 스토리지 요금이 늘어날 수 있고, 찾으려는 로그를 찾기도 어려워져요. 로그 관리를 단순하게 하려면 액세스 로그를 별도의 버킷에 저장하세요.
오류: The target bucket for logging does not exist
대상 버킷은 설정을 하기 전에 이미 존재해야 해요. 이 오류는 대상 버킷이 없거나 찾을 수 없다는 뜻이에요. 버킷 이름이 정확한지 확인한 뒤 다시 시도해 보세요.
오류: Target grants not allowed for bucket owner enforced buckets
대상 버킷이 S3 객체 소유권(Object Ownership)에서 버킷 소유자 강제(Bucket owner enforced) 설정을 사용하고 있을 때 나는 오류예요. 이 설정은 대상(타깃) 그랜트를 지원하지 않아요. 자세한 내용은 로그 전송 권한을 참고하세요.
전송 실패 문제 해결
서버 액세스 로깅 문제를 피하려면 다음 모범 사례를 따르세요.
-
S3 로그 전송 그룹이 대상 버킷에 쓰기 권한을 가져야 해요. S3 로그 전송(delivery) 그룹이 서버 액세스 로그를 대상 버킷에 전달해요. 대상 버킷에 쓰기 권한을 주려면 버킷 정책이나 버킷 ACL을 사용할 수 있는데, ACL보다는 버킷 정책을 권장해요. 쓰기 권한을 주는 방법은 로그 전송 권한에서 확인하세요.
대상 버킷이 객체 소유권에서 버킷 소유자 강제 설정을 사용한다면 다음을 기억하세요.
- ACL이 비활성화되어 더 이상 권한에 영향을 주지 않아요. 즉, 버킷 ACL을 업데이트해서 S3 로그 전송 그룹에 액세스를 줄 수 없어요. 로깅 서비스 프린시펄에 액세스를 주려면 대상 버킷의 버킷 정책을 업데이트해야 해요.
- PutBucketLogging 구성에 대상 그랜트를 포함할 수 없어요.
-
대상 버킷의 버킷 정책이 로그에 대한 액세스를 허용해야 해요. 대상 버킷의 버킷 정책을 확인하세요.
"Effect": "Deny"를 포함한 문장을 찾아보고, 그 Deny 문장이 액세스 로그가 버킷에 기록되는 걸 막고 있지 않은지 확인하세요. -
대상 버킷에 S3 객체 잠금(Object Lock)이 활성화되어 있지 않아야 해요. 대상 버킷에 객체 잠금이 활성화됐는지 확인하세요. 객체 잠금은 서버 액세스 로그 전달을 막아요. 객체 잠금이 없는 버킷을 대상으로 선택해야 해요.
-
대상 버킷은 Amazon S3 관리형 키(SSE-S3)를 사용해야 해요. 대상 버킷이 SSE-KMS 기본 암호화를 사용하면, 로그 객체가 만들어지긴 하지만 액세스할 수 없는 키로 암호화될 수 있어요.
-
대상 버킷에 Requester Pays가 활성화되어 있지 않아야 해요. Requester Pays 버킷을 서버 액세스 로깅 대상 버킷으로 쓰는 것은 지원되지 않아요. 서버 액세스 로그를 전달하려면 대상 버킷에서 Requester Pays 옵션을 비활성화하세요.
-
AWS Organizations 서비스 제어 정책(SCP)과 리소스 제어 정책(RCP)을 검토하세요. AWS Organizations를 사용 중이면 서비스 제어 정책과 리소스 제어 정책을 확인해서 Amazon S3 액세스가 허용되는지 확인하세요. 이 정책들은 관련 계정의 프린시펄과 리소스에 허용되는 최대 권한을 지정해요.
"Effect": "Deny"를 포함하는 문장을 찾아보고, Deny 문장이 어떤 액세스 로그도 버킷에 기록되는 것을 막고 있지 않은지 확인하세요. 자세한 내용은 AWS Organizations 사용 안내서의 AWS Organizations의 권한 부여 정책을 참고하세요. -
최근 로깅 구성 변경이 적용될 때까지 시간을 두세요. 서버 액세스 로깅을 처음 활성화하거나 로그 대상 버킷을 바꿀 때는 완전히 적용되기까지 시간이 필요해요. 모든 요청이 제대로 기록되고 전달되려면 한 시간 이상 걸릴 수 있어요.
로그 전달 실패를 확인하려면 Amazon CloudWatch에서 요청 지표(request metrics)를 활성화하세요. 몇 시간 안에 로그가 전달되지 않으면 4xxErrors 지표를 살펴보세요. 이 지표는 로그 전달 실패를 나타낼 수 있어요. 요청 지표를 활성화하는 방법은 버킷 안의 모든 객체에 대한 CloudWatch 지표 구성 만들기를 참고하세요.