AWS. EKS 애플리케이션 로그 수집하기 (2)
created Sep 11, 2022 | updated Oct 15, 2022
AWS EKS의 애플리케이션 로그를 AWS OpenSearch로 수집하고 관리하기 위한 내용을 정리한다. 로그 전송은 Fluent Bit을 사용했다.
내용은 간단하지만 한 개의 포스팅에 포함하려니 내용이 길어지고 가독성을 해쳐서 몇 개의 파트로 나눴다.
본 포스팅은 K8S의 로그 수집 권한 및 인가 설정을 다룬다.
파트 목차
- 로그 수집 구성 개요
- AWS IRSA, K8S RBAC 설정 : 현재 포스트
- DaemonSet 설정
- 로그 로테이트 설정
- 로그 멀티라인 파싱 설정
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
- Provider Type : OpenID Connect
- Provider URL : EKS 클러스터 Overview 에서 확인
- 콘솔 메뉴 : EKS > Clusters > 클러스터 선택 > Overview > OpenID Connect provider URL
- 예 : https://oidc.eks.ap-southeast-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
- Audience : sts.amazonaws.com
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" } ] }
- ${OPENSEARCH_ARN} : 생성한 OpenSearch의 ARN 정보로 교체
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}", } } } ] }
- ${IDENTITY_PROVIDER_ARN} : 위에서 생성한 EKS OIDC Provider ARN 값을 사용
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