AWS

ALB access Log 활성화 → S3 권한 설정 및 로그 저장

Somaz 2024. 11. 21. 10:45
728x90
반응형

Overview

이 글에서는 AWS Application Load Balancer(ALB)Access Log 기능 활성화부터 S3 권한 설정, 그리고 로그 저장 방식까지 실무 중심으로 자세히 정리했다.


ALB의 접근 로그는 보안 및 트래픽 분석을 위한 중요한 데이터로, 로그를 안정적으로 수집하고 저장하기 위한 S3 버킷 구성이 필수이다.

 

특히 Kubernetes 환경에서는 `alb.ingress.kubernetes.io/load-balancer-attributes` 어노테이션을 통해 손쉽게 로그 설정이 가능하며, 서비스 주체(logdelivery.elasticloadbalancing.amazonaws.com)를 활용한 정확한 S3 권한 정책 구성이 핵심이다.

 

 

출처 : https://medium.com/panther-labs/aws-security-logging-fundamentals-s3-bucket-access-logging-93099ab80e38

 

 

 

 

 

📅 관련 글

2022.02.13 - [AWS] - AWS IAM (Identity and Access Management) 개요 및 설정 방법

2022.02.07 - [AWS] - AWS EC2 인스턴스 생성

2022.02.13 - [AWS] - AWS S3 (Simple Storage Service) 개요 및 활용 방법

2023.03.30 - [AWS] - AWS Secrets Manager란?(OAuth, SSO)

2023.03.29 - [AWS] - AWS CLI 정리

2023.03.28 - [AWS] - AWS IAM이란?

2023.03.28 - [AWS] - AWS S3 권한이란?

2023.03.28 - [AWS] - AWS S3란?(개념, 속성)

2023.03.30 - [AWS] - AWS Cloudfront란? / Canary 및 Blue-Green 배포

2023.04.03 - [AWS] - AWS VPC란?

2023.05.26 - [AWS] - AWS IRSA(IAM Roles for Service Accounts)란?

2024.11.07 - [AWS] - AWS Ingress Annotations 정리

2024.11.04 - [AWS] - AWS Assume Role이란?

2024.11.16 - [AWS] - AWS Network ACL vs Security Group

2024.11.21 - [AWS] - ALB access Log 활성화 → S3 권한 설정 및 로그 저장

2024.11.24 - [AWS] - EKS Pod Identity Addon

2024.11.27 - [AWS] - AWS DynamoDB란?

2025.01.03 - [AWS] - AWS DynamoDB Local 설치

 

 

 

 

 

 

 

 


 

 

 

ALB access Log 활성화

 

 

 

1. Console로 설정하는 방법

LoadBalancer 선택 → Load Balancer 속성 편집 → 액세스 로그 활성화 → S3 URI 등록

 

 

 

2. Ingress Annotations 사용

# 설정 방법
alb.ingress.kubernetes.io/load-balancer-attributes: |
  access_logs.s3.enabled=true,
  access_logs.s3.bucket=<s3_bucket_name>,
  access_logs.s3.prefix=<prefix_name>

# 인라인 설정 방법
alb.ingress.kubernetes.io/load-balancer-attributes: access_logs.s3.enabled=true,access_logs.s3.bucket=<s3_bucket_name>,access_logs.s3.prefix=<prefix_name>

# 예시
alb.ingress.kubernetes.io/load-balancer-attributes: |
  access_logs.s3.enabled=true,
  access_logs.s3.bucket=test-somaz-alb-log,
  access_logs.s3.prefix={{ .Values.loadBalancerGroup }}

# 인라인 예시
alb.ingress.kubernetes.io/load-balancer-attributes: access_logs.s3.enabled=true,access_logs.s3.bucket=somaz-alb-log,access_logs.s3.prefix={ .Values.loadBalancerGroup }}

 

 

 

 

 


 

 

 

 

 

 

S3 Bucket 권한 설정

 

S3 Bucket 파일 구조

주의 할점은 internal ALB는 internal prefix가 자동으로 생긴다.

# alb.ingress.kubernetes.io/scheme: internet-facing
custom-prefix/AWSLogs/{account_id}/elasticloadbalancing/{region}/{year}/{month}/{day}/        

# alb.ingress.kubernetes.io/scheme: internal
custom-prefix/internal/AWSLogs/{account_id}/elasticloadbalancing/{region}/{year}/{month}/{day}/        

 

S3 Bucket 권한

AWS는 권한을 단순화하고 모든 지역에서 구성을 통합하기 위해 서비스 주체(`logdelivery.elasticloadbalancing.amazonaws.com`)를 도입 했다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::<버킷명>/<경로>/AWSLogs/<your-aws-account-id>/*"
    },
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::<버킷명>"
    }
  ]
}

 

 

 

예시

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::somaz-alb-log/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::somaz-alb-log"
        }
    ]
}

  • 간단하게 예시 권한에 대해서 설명해본다.

 

첫 번째 Statement

{
    "Effect": "Allow",
    "Principal": {
        "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
    },
    "Action": "s3:PutObject",
    "Resource": "arn:aws:s3:::somaz-alb-log/*",
    "Condition": {
        "StringEquals": {
            "s3:x-amz-acl": "bucket-owner-full-control"
        }
    }
}

 

 

 

Principal

  • 주체(Service): `logdelivery.elasticloadbalancing.amazonaws.com`
    • ELB 서비스가 로그 데이터를 업로드하는 역할을 수행

 

Action

  • `s3:PutObject`: S3 버킷에 객체를 업로드할 수 있는 권한을 제공
    • 이 권한이 없으면 ELB가 로그 파일을 버킷에 저장할 수 없다.

 

Resource

  • `arn:aws:s3:::somaz-alb-log/*`
    • somaz-alb-log라는 이름의 버킷에 대해 모든 하위 객체(/*)에 접근할 권한을 설정

 

Condition

  • `s3:x-amz-acl: "bucket-owner-full-control"`
    • 업로드된 객체에 대해 버킷 소유자에게 전체 제어 권한을 부여하도록 강제
    • 이 설정은 객체를 업로드한 주체와 버킷 소유자 간의 권한 충돌을 방지

 

 

 

 

두 번째 Statement

{
    "Effect": "Allow",
    "Principal": {
        "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
    },
    "Action": "s3:GetBucketAcl",
    "Resource": "arn:aws:s3:::somaz-alb-log"
}

 

 

Principal

  • `logdelivery.elasticloadbalancing.amazonaws.com`: ELB 서비스가 액세스

 

Action

  • `s3:GetBucketAcl`:
    • S3 버킷의 Access Control List(ACL) 정보를 읽을 수 있는 권한을 부여
    • ELB는 업로드 전에 버킷의 ACL을 확인하여 적절한 권한이 있는지 확인

 

Resource

  • `arn:aws:s3:::somaz-alb-log`:
    • S3 버킷 자체에 대한 ACL 정보를 가져올 권한을 제공
    • 특정 객체가 아닌 버킷 레벨에서만 동작

 

 

 

 

 


 

 

 

 

 

 

마무리

ALB의 접근 로그를 효율적으로 수집하고 저장하는 것은 보안 감사, 트래픽 분석, 이상 탐지를 위한 중요한 기반이다.

 

이번 포스팅을 통해 ALB Access Log를 콘솔 또는 Ingress Annotation으로 설정하는 방법부터, S3 권한 정책 구성, 그리고 저장되는 로그 경로 구조까지 폭넓게 이해할 수 있었을 것이다.

 

 

앞으로 실무에서 ALB 로그가 필요한 상황에 직면했을 때, 본 글을 참고하여 빠르고 안정적으로 구성하시길 바란다.
또한, AWS는 로그 포맷이나 정책 권한 구성에 지속적인 업데이트가 있으니, 공식 문서 참고를 병행하는 습관도 중요하다.

 

 

 

 

 

 

 


Reference

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/enable-access-logging.html

https://smilesharkhelp.zendesk.com/hc/ko/articles/10072234151055--ELB-ALB-Access-Log-활성화-하는-방법-및-S3-권한-설정-방법

https://inpa.tistory.com/entry/AWS-📚-ELBALB-로그-활성화-S3에-로그-저장하기

https://medium.com/panther-labs/aws-security-logging-fundamentals-s3-bucket-access-logging-93099ab80e38

728x90
반응형

'AWS' 카테고리의 다른 글

AWS DynamoDB란?  (0) 2024.11.27
EKS Pod Identity Addon  (0) 2024.11.24
AWS Network ACL vs Security Group  (0) 2024.11.16
AWS Ingress Annotations 정리  (0) 2024.11.07
AWS Assume Role이란?  (0) 2024.11.04