AWS. EKS 애플리케이션 로그 수집하기 (2)

created Sep 11, 2022 | updated Oct 15, 2022

AWS EKS의 애플리케이션 로그를 AWS OpenSearch로 수집하고 관리하기 위한 내용을 정리한다. 로그 전송은 Fluent Bit을 사용했다.

내용은 간단하지만 한 개의 포스팅에 포함하려니 내용이 길어지고 가독성을 해쳐서 몇 개의 파트로 나눴다.

본 포스팅은 K8S의 로그 수집 권한 및 인가 설정을 다룬다.

파트 목차


AWS IRSA (IAM Role for Service Accounts) & RBAC 설정


Fluent Bit DaemonSet이 파드의 로그에 접근할 수 있도록 RBAC 방식의 인가 설정을 한다.

IAM Identity Provider 생성

  • EKS의 OIDC identity provider 생성
  • 콘솔 메뉴 : IAM > Access Management > Identity Providers > Add Provider

IAM Policy 생성

  • 콘솔 메뉴 : IAM > Access Management > Policies > Create policy
  • JSON Editor로 내용을 작성
    • ${OPENSEARCH_ARN} : 생성한 OpenSearch의 ARN 정보로 교체
      • 예: arn:aws:es:ap-southeast-1:111122223333:domain/logging-test
    policy-json
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "es:ESHttp*"
                ],
                "Resource": "${OPENSEARCH_ARN}",            "Effect": "Allow"
            }
        ]
    }

IAM Role 생성

  • 콘솔 메뉴 : IAM > Access Management > Roles > Create role
  • AWS Service : EC2
  • Permissions : 위에 생성한 IAM Policy를 선택
  • Trust Relationship 내용 작성
    • ${IDENTITY_PROVIDER_ARN} : 위에서 생성한 EKS OIDC Provider ARN 값을 사용
      • 예 : arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
    • ${IDENTITY_PROVIDER} : 위에서 생성한 EKS OIDC Provider 값을 사용
      • 예 : oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
    • ${SERVICE_ACCOUNT_NAME} : 생성할 Service Account 정보를 기입
      • 예 : system:serviceaccount:logging:fluent-bit
    trust-relationship
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Federated": "${IDENTITY_PROVIDER_ARN}"            },
                "Action": "sts:AssumeRoleWithWebIdentity",
                "Condition": {
                    "StringEquals": {
                        "${IDENTITY_PROVIDER}:aud": "sts.amazonaws.com",                    "${IDENTITY_PROVIDER}:sub": "${SERVICE_ACCOUNT_NAME}",                }
                }
            }
        ]
    }

Service Account 생성

  • ${IAM_ROLE_ARN} : 위에서 생성한 Role ARN (예 : arn:aws:iam::111122223333:role/logging-role)
  • Service Account 이름은 데몬셋 파드에서 이를 할당할 때 사용한다.
service-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: fluent-bit  annotations:
    eks.amazonaws.com/role-arn: ${IAM_ROLE_ARN}  namespace: logging

Cluster Role 생성

cluster-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: fluent-bit-read
rules:
- apiGroups:
  - ""
  resources:
  - namespaces
  - pods
  verbs:
  - get
  - list
  - watch

Cluster Role Binding 생성

cluster-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: fluent-bit-read
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: fluent-bit-read
subjects:
- kind: ServiceAccount
  name: fluent-bit
  namespace: logging

참고


※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

유리아쥬 제모스 스틱 레브르 립밤 4g x 10개, 12개, 무향솔가 어드밴스드 칼슘 컴플렉스 타블렛, 120개입, 1개커세어 코리아 정품 DARK CORE PRO 무선 충전 RGB 게이밍 마우스 / 다용도 에코백 사은품 증정, 혼합색상, RGP0076