참고 사이트
https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/enable-access-logging.html
https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/network/load-balancer-access-logs.html
여러 Account 및 VPC에서 S3 공유(로그 중앙화)
여러 Account 및 VPC에서
각 AWS Config 및 CloudTrail, VPC FlowLog, ELB Log가 수집한 로그를
중앙 계정의 S3에 쌓도록 로그 중앙화 하는 과정이다.
S3는 같은 리전 내 고유한 버킷명을 가지고 있어서
환경별 계정의 IAM Role을 주지 않아도 식별이 가능한 것 같다.
(그전까지 IAM Role까지 수정했던 나 ㅠ.ㅠ)
중앙 계정에서 위치한 S3 버킷 Policy를 수정해서
환경별 계정의 각 AWS Config 및 CloudTrail, VPC FlowLog, ELB Log가 S3 버킷에 접근 권한을 부여하도록 한다.
서브 계정에서 로그 생성 시, 로그 쌓는 S3 버킷란에 중앙 계정에서 생성한 S3 버킷명을 기입한다.
Principal(주체)가 AWS Config 일 경우, Policy
{
"Sid": "AWSConfigBucketExistenceCheck",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::BucketName",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": [
"AWS-Account-ID-1",
"AWS-Account-ID-2",
"AWS-Account-ID-3",
"AWS-Account-ID-4"
]
}
}
},
{
"Sid": "AWSConfigBucketDelivery",
"Effect": "Allow",
"Principal": {
"Service": "config.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::BucketName/prefix/*",
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control",
"AWS:SourceAccount": [
"AWS-Account-ID-1",
"AWS-Account-ID-2",
"AWS-Account-ID-3",
"AWS-Account-ID-4"
]
}
}
}
]
}
Principal(주체)가 AWS VPC Flowlog 일 경우, Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AWSLogDeliveryWrite",
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::BucketName/prefix/AWS-Account-ID-1/*",
"arn:aws:s3:::BucketName/prefix/AWS-Account-ID-2/*",
"arn:aws:s3:::BucketName/prefix/AWS-Account-ID-3/*",
"arn:aws:s3:::BucketName/prefix/AWS-Account-ID-4/*"
]
},
{
"Sid": "AWSLogDeliveryAclCheck",
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com"
},
"Action": [
"s3:GetBucketAcl",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::BucketName"
}
]
}
Principal(주체)가 AWS CloudTrail 일 경우, Policy
"Principal": {
"Service": "cloudtrail.amazonaws.com"
}
이 이후에도 주체만 바뀌고 접근 권한 부여하는 내용은 동일하다.
Principal(주체)가 AWS ELB Log일 경우, Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com",
"AWS": "arn:aws:iam::600734575887:root"
},
"Action": "s3:PutObject",
"Resource": [
"arn:aws:s3:::BucketName/prefix/AWS-Account-ID-1/*",
"arn:aws:s3:::BucketName/prefix/AWS-Account-ID-2/*",
"arn:aws:s3:::BucketName/prefix/AWS-Account-ID-3/*",
"arn:aws:s3:::BucketName/prefix/AWS-Account-ID-4/*"
],
"Condition": {
"StringEquals": {
"s3:x-amz-acl": "bucket-owner-full-control",
"aws:SourceAccount": "AWS-Account-ID-1"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:logs:ap-northeast-2:AWS-Account-ID-1:*"
}
}
},
{
"Effect": "Allow",
"Principal": {
"Service": "delivery.logs.amazonaws.com",
"AWS": "arn:aws:iam::600734575887:root"
},
"Action": [
"s3:GetBucketAcl",
"s3:ListBucket"
],
"Resource": "arn:aws:s3::BucketName",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "AWS-Account-ID-1"
},
"ArnLike": {
"aws:SourceArn": "arn:aws:logs:ap-northeast-2:AWS-Account-ID-1:*"
}
}
}
]
}
"Principal": {
"Service": "delivery.logs.amazonaws.com",
"AWS": "arn:aws:iam::600734575887:root"
}
ELB 액세스 로그 수집
ELB 액세스 로그 수집은 살짝 특별하다.
S3 Policy 수정
Principal(주체)가 리전의 Elastic Load Balancing에 대한 AWS 계정의 ID가 되어야 한다.
서울 리전(ap-northeast-2)의 elb-account-id는 600734575887이다.
TLS 리스너 존재
TLS 리스너가 있는 로드밸런서 액세스 로그만 생성 및 수집이 된다.
그래서 ALB는 액세스 로그가 수집이 되지만 NLB는 TLS 리스너인 경우만 수집이 가능하다. (TCP, UDP 수집 불가 !! )
'AWS > Project' 카테고리의 다른 글
DocumentDB mongo셸로 DB 접근 및 Fail-over(장애 조치) (1) | 2024.02.09 |
---|---|
온프레미스에서 VPC Endpoint를 사용하여 S3로 프라이빗 접근 (0) | 2024.01.13 |
여러 Account 및 VPC에서 온프레미스 간 연결(VGW ↔ DX) (0) | 2024.01.05 |
EBS 인스턴스 종료시 비활성화 해제 (0) | 2023.12.10 |
여러 Account 및 VPC 간 LB 통신 (0) | 2023.12.10 |