본문 바로가기

AWS/CloudTrail

CloudTrail의 전송 중 암호화

안녕하세요! 오늘은 CloudTrail의 추적 생성을 했을 때, 해당 로그들이 전송 중 암호화가 되는지에 대해서

같이 알아보고자 합니다.

 

사실 이전 CloudTrail 콘솔 UI에서는 '전송 중 암호화' 라는 옵션이 존재했었는데요.

이 전송 중 암호화 라는 옵션이 'SSE-KMS 암호화' 로 바뀌면서 헷갈리기 시작했습니다..

 

우선.. Docs부터 살펴보면.. CloudTrail은 기본적으로 SSE-S3키를 사용하는 서버측 암호화를 통해 암호화된다고 나와있는데요.

 

 

CloudTrail의 Docs(사진 클릭시 링크)

 

또한, SSE-S3 키는 Server Side Encryption으로 S3에서 데이터 센터의 디스크에 데이터를 쓰면서 객체 수준에서 데이터를 암호화하고, 사용자가 해당 데이터에 액세스할 때 자동으로 암호를 해독한다고 나와있습니다.

 

Server Side Encryption Docs(사진 클릭시 링크)

 

 

하지만, 제가 궁금한 것은 위에서 말한 데이터 센터의 디스크에 데이터를 쓰기 전의 암호화 여부 즉, '전송 중 암호화 여부'가 궁금했습니다. 데이터의 암호화는 아니더라도 HTTP 프로토콜을 쓰는지 HTTPS 프로토콜을 쓰는지 여부조차 나오지 않아서 조직 내부정책을 준수했다는 증적을 제출하기가 난해했습니다..

 

(혹시 제가 못찾은거라면, 제 눈을 고쳐주실 의사님이나 URL을 첨부해주실 분을 찾습니다..)

 

그래서.. 직접 테스트 하기로 했습니다!! ㅡ 3ㅡ!!


우선 CloudTrail의 관리 이벤트를 로깅하는 추적을 생성했고, SSE-KMS 암호화는 비활성화 했습니다.

그리고, 해당 테스트에서 로그 파일 무결성을 체크할 필요는 없기에 로그 파일 검증 옵션도 비활성화 했습니다.

 

CloudTrail 추적 생성 중...


이 후, CloudTrail이 로그를 저장하는 Bucket에 아래와 같이 Bucket policy 정책문을 추가해주었습니다.

 

    {
      "Sid": "AllowSSLRequestsOnly",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::jhjang-cloudtrail-bucket",
        "arn:aws:s3:::jhjang-cloudtrail-bucket/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      },
      "Principal": "*"
    }

 

편집 한 정책문은 아래와 같습니다.

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AWSCloudTrailAclCheck20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:GetBucketAcl",
            "Resource": "arn:aws:s3:::jhjang-cloudtrail-bucket"
        },
        {
            "Sid": "AWSCloudTrailWrite20150319",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudtrail.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::jhjang-cloudtrail-bucket/AWSLogs/116599891045/*",
            "Condition": {
                "StringEquals": {
                    "s3:x-amz-acl": "bucket-owner-full-control"
                }
            }
        },
        {
            "Sid": "AllowSSLRequestsOnly",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::jhjang-cloudtrail-bucket",
                "arn:aws:s3:::jhjang-cloudtrail-bucket/*"
            ],
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            }
        }
    ]
}

 

정책문에서 보실 수 있는 것 처럼, SecureTransport를 사용하지 않는 모든 작업은 Deny 하는 정책입니다.

즉, HTTPS를 통해 이루어지는 작업이 아니라면, 모두 Deny 합니다.

 

참고 URL: https://aws.amazon.com/ko/premiumsupport/knowledge-center/s3-bucket-policy-for-config-rule/

 

s3-bucket-ssl-requests-only에 대한 S3 버킷 정책 생성

반면에 다음 버킷 정책은 규칙을 준수하지 않습니다. 이 정책은 명시적 거부문을 사용하는 대신 "aws: SecureTransport": "true" 조건을 충족하는 요청에 대한 액세스를 허용합니다. 이 문은 요청에 HTTPS

aws.amazon.com


이렇게 한 후, 기존에 전송 된 로그들을 모두 지운 후에도 S3에 로그들이 전송 되는지 확인 해보았습니다.

 

기존 로그 삭제

 

 

이 후, 로그를 발생시키기 위해 이것저것 API를 발생시켰습니다.

S3를 보니, Bucket policy 적용 후에도 로그가 전송된 것을 보니.. HTTPS 를 사용하여 전송된 것 같긴 합니다.

 

Bucket Policy 적용 후에도 로그가 쌓임.

 

### 참!! 사진에서는 캡쳐하지 못하였지만, 로그들은 모두 SSE-S3 키로 암호화 되어 있었습니다!! ###


다만.. 해당 내용만 가지고, '전송 중 암호화'를 충족시켰다고 말하기에는 뭔가 찝찝했습니다.

명확한 증적을 제출하고 싶었습니다. 해서.. '어떤 방법이 있을까' 고민하다가 문득 떠오른 생각이

'CloudTrail 로그를 저장하는 Bucket에 Server Access Log를 활성해보자!!' 였습니다.

 

AWS Docs에서 안내된 Server Access Log의 예제 형식은 아래와 같습니다.

 

79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 3E57427F3EXAMPLE REST.GET.VERSIONING - "GET /awsexamplebucket1?versioning HTTP/1.1" 200 - 113 - 7 - "-" "S3Console/0.4" - s9lzHYrFp76ZVxRcpX9+5cjAnEH2ROuNkd2BHfIa6UkFVdtjf5mKR3/eTPFvsiP/XV/VLi31234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 891CE47D2EXAMPLE REST.GET.LOGGING_STATUS - "GET /awsexamplebucket1?logging HTTP/1.1" 200 - 242 - 11 - "-" "S3Console/0.4" - 9vKBE6vMhrNiWHZmb2L0mXOcqPGzQOI5XLnCtZNPxev+Hf+7tpT6sxDwDty4LHBUOZJG96N1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket1 [06/Feb/2019:00:00:38 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be A1206F460EXAMPLE REST.GET.BUCKETPOLICY - "GET /awsexamplebucket1?policy HTTP/1.1" 404 NoSuchBucketPolicy 297 - 38 - "-" "S3Console/0.4" - BNaBsXZQQDbssi6xMBdBU2sLt+Yf5kZDmeBUP35sFoKa3sLLeMC78iwEIWxs99CRUrbS4n11234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket1 [06/Feb/2019:00:01:00 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be 7B4A0FABBEXAMPLE REST.GET.VERSIONING - "GET /awsexamplebucket1?versioning HTTP/1.1" 200 - 113 - 33 - "-" "S3Console/0.4" - Ke1bUcazaN1jWuUlPJaxF64cQVpUEhoZKEG/hmy/gijN/I1DeWqDfFvnpybfEseEME/u7ME1234= SigV2 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1
79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be awsexamplebucket1 [06/Feb/2019:00:01:57 +0000] 192.0.2.3 79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be DD6CC733AEXAMPLE REST.PUT.OBJECT s3-dg.pdf "PUT /awsexamplebucket1/s3-dg.pdf HTTP/1.1" 200 - - 4406583 41754 28 "-" "S3Console/0.4" - 10S62Zv81kBW7BB6SX4XJ48o6kpcl6LPwEoizZQQxJd5qDSCTLX0TgS37kYUBKQW3+bPdrg1234= SigV4 ECDHE-RSA-AES128-SHA AuthHeader awsexamplebucket1.s3.us-west-1.amazonaws.com TLSV1.1

 

보시는 것 처럼 TLS 버젼에 대한 레코드도 확인할 수 있기에, 테스트와 증적자료용으로 적합하다고 판단했습니다.

참고 URL: https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/LogFormat.html

 

Amazon S3 서버 액세스 로그 형식 - Amazon Simple Storage Service

Amazon S3 서버 액세스 로그 형식 서버 액세스 로깅은 Amazon S3 버킷에 수행된 요청에 대한 상세 레코드를 제공합니다. 보안 및 액세스 감사에 서버 액세스 로그를 사용하거나, 고객 기반에 대해 알

docs.aws.amazon.com

 

그럼 CloudTrail의 로그가 저장되는 Bucket에서 Access Log를 활성화 해보겠습니다.


먼저 jhjang-cloudtrail-target-bucket 이라는 신규 Bucket을 생성 해주겠습니다.

해당 Bucket의 용도는 CloudTrail의 로그가 쌓이는 Bucket에서 발생되는 Access Log를 저장하는 용도입니다.

 

Access Log 용도 Bucket 생성


그리고, CloudTrail의 로그가 쌓이는 Bucket(jhjang-cloudtrail-bucket)에서 Server Access Log를 활성화 해주겠습니다.

 

Access Log 활성


이 후, 기존에 쌓인 로그들을 모두 삭제해주겠습니다.

 

기존 로그 삭제


역시 로그가 쌓이도록 이것저것 API들을 영차영차 발생시켜 본 후..

 

 

 

Target Bucket의 Access Log를 살펴보았습니다.

 

Access Log 정보

 

bc7c1e92a2c02e79e576ffead263c9371a7cc224cc43266ef94083fb5f204004 jhjang-cloudtrail-bucket [12/Jul/2021:06:46:24 +0000] - svc:cloudtrail.amazonaws.com 64SBQPH29Y3CZJJJ REST.PUT.OBJECT AWSLogs/116599891045/CloudTrail/ap-northeast-2/2021/07/12/116599891045_CloudTrail_ap-northeast-2_20210712T0645Z_VUTqOvsMlYITr1OA.json.gz "PUT /AWSLogs/116599891045/CloudTrail/ap-northeast-2/2021/07/12/116599891045_CloudTrail_ap-northeast-2_20210712T0645Z_VUTqOvsMlYITr1OA.json.gz HTTP/1.1" 200 - - 5831 24 14 "-" "-" - k8K/V76EDGKVqTnz9b036goCHoDSYiz/vsakkeqmQnUBnEpJsuunYW2668ayM1IAH+HvrfL124k= SigV4 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader jhjang-cloudtrail-bucket.s3.ap-northeast-2.amazonaws.com TLSv1.2 -
bc7c1e92a2c02e79e576ffead263c9371a7cc224cc43266ef94083fb5f204004 jhjang-cloudtrail-bucket [12/Jul/2021:06:46:24 +0000] - svc:cloudtrail.amazonaws.com 64SC2WQKM09C14NM REST.GET.ACL - "GET /?acl HTTP/1.1" 200 - 480 - 28 - "-" "-" - QMwnEm+FuUveRi779pe5+czShftutfhYohkn9IX4uHUhr4FXkRt/y5Q2Yw9QHGv8yrj8Ur1YzpE= SigV4 ECDHE-RSA-AES128-GCM-SHA256 AuthHeader jhjang-cloudtrail-bucket.s3.ap-northeast-2.amazonaws.com TLSv1.2 -

 

로그에서 확인하실 수 있듯이, CloudTrail이라는 Service가 PUT 작업을 실시했고, 암호 그룹과 함께 TLS 1.2 가 찍혀서 나오네요.


조직 내부에서는 조직 내부규정이나, 보안감사 혹은 각종 심사때문에 암호화 여부가 항상 이슈인 것으로 알고있습니다.

AWS Docs에 친절하게 나와있다면 더 없이 좋겠지만.. 그렇지 않은 경우는 이렇게 테스트를 해봐야하다보니 시간소요가 꽤나 걸릴 것 같습니다.

 

사실 저도 암호화나 프로토콜에 대한 지식이 굉장히 얕은 신입늅늅이라 열심히 공부중입니다만..

혹시라도 필요하실 분들을 위해서 짧은 지식 짜내어서 포스팅 해봤습니다!!

 

벌써 초복이 지났네요. 매년 뉴스에 나오는 얘기지만 올 여름은 최강 더위가 찾아온다고 하는데요..!!

아무리 더워서 입맛을 잃더라도 식사를 제때 챙기셔야 더위를 예방할 수 있다고 하네요!!

 

앉아있는게 직업인 저희들이다보니, 항상 건강챙기시고 모쪼록 코로나 시대에도 무탈하시기를 바라겠습니다!

 

그럼 다음 포스팅에서 인사드리겠습니다!!

 

감사합니다! (_ _)

'AWS > CloudTrail' 카테고리의 다른 글

CloudTrail의 로그파일 무결성 확인하기  (4) 2021.07.05