OPS

[AWS] ALB/NLB 액세스 로그 저장을 위한 S3 버킷 권한 설정 방법

찻잔속청개구리 2025. 4. 21. 22:07
반응형

AWS ALB(Application Load Balancer) 또는 NLB(Network Load Balancer)의 액세스 로그를 Amazon S3 버킷에 저장하려면, 로그가 정상적으로 기록될 수 있도록 정확한 권한 설정이 필요하다.

이 문서에서는 실무에서 자주 사용되는 S3 버킷 정책 예시를 기반으로, 어떻게 설정해야 하는지 상세히 설명한다. 

 

주요 내용 (ALB/NLB)

ALB 로그는 ELB 계정 ID의 root 사용자가 직접 S3에 PutObject 요청을 보낸다. 이 때 ELB 계정 ID는 AWS에서 로드밸런서별로 지역에 따라 고정된 계정 ID이다. ap-northeast-2 기준 600734575887.

ALB는 ELB 서비스의 root principal이 로그를 직접 업로드하는 반면에, NLB 로그는 delivery.logs.amazonaws.com가 업로드한다. 이를 위해서 PutObject 시, s3:x-amz-acl: bucket-owner-full-control 헤더를 포함해야 한다.
 

✅ 전제 조건

 

✅ S3 버킷 정책 예시

{
  "Version": "2012-10-17",
  "Id": "AWSConsole-AccessLogs-Policy",
  "Statement": [
    {
      "Sid": "AllowPutFromELBAccount",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<ELB-ACCOUNT-ID>:root"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::test-s3-an2-stg-elb-log/test-alb-an2-stg-admin/AWSLogs/<AWS_ACCOUNT_ID>/*"
    },
    {
      "Sid": "AllowPutFromLogDeliveryService",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::test-s3-an2-stg-elb-log/test-alb-an2-stg-admin/AWSLogs/<AWS_ACCOUNT_ID>/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control"
        }
      }
    },
    {
      "Sid": "AllowGetAclFromLogDeliveryService",
      "Effect": "Allow",
      "Principal": {
        "Service": "delivery.logs.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::test-s3-an2-stg-elb-log"
    }
  ]
}

 

✅ 각 정책 설명

AllowPutFromELBAccount ALB를 소유한 계정이 S3에 로그 업로드 가능하게 허용
AllowPutFromLogDeliveryService NLB의 경우 AWS 로그 전송 서비스가 PutObject 가능하도록 허용. 이때 bucket-owner-full-control ACL 필요
AllowGetAclFromLogDeliveryService 로그 전송 서비스가 버킷의 ACL을 확인할 수 있게 허용

 

✅ 실무 체크리스트

  • S3 버킷이 ALB/NLB와 같은 리전에 있는가?
  • S3 버킷 정책이 정확하게 적용되었는가?
  • s3:x-amz-acl: bucket-owner-full-control 조건이 빠지지 않았는가?
  • ALB 또는 NLB 설정 시 S3 경로, Prefix, AWS Account ID를 정확히 입력했는가?
반응형