S3 버킷 액세스를 HTTPS로 제한해 보기

S3 버킷 액세스를 HTTPS로 제한해 보는 방법을 정리해 봤습니다.
2023.02.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 S3 버킷 액세스를 HTTPS로 제한해 보는 방법을 정리해 봤습니다.

S3 버킷 액세스 테스트

S3 버킷으로 액세스를 하기 위해 AWS CLI를 사용할 생각입니다.

AWS CLI의 경우 일반적으로 HTTPS를 사용하여 AWS 서비스에 요청을 보냅니다.

또 한, S3 버킷의 경우 일반적으로 HTTP, HTTPS의 액세스를 모두 허용하고 있습니다.

먼저 테스트를 위해「s3-https-test-bucket」라는 버킷을 생성하고「test.png」파일을 업로드한 상태입니다.

AWS CLI로「test.png」로 액세스 해 보도록 하겠습니다.

aws s3 ls s3://s3-https-test-bucket/test.png
2023-02-25 22:09:44 131058 test.png

HTTPS로 문제 없이 액세스할 수 있는 것을 확인할 수 있습니다.

이어서 HTTP로 액세스 해 보도록 하겠습니다.

aws s3 ls s3://s3-https-test-bucket/test.png --endpoint-url http://s3.ap-northeast-1.amazonaws.com
2023-02-25 22:09:44 131058 test.png

HTTP도 문제 없이 액세스 되는 것을 확인할 수 있습니다.

이제 HTTPS만 액세스 가능하도록 S3 버킷 정책을 수정해 보겠습니다.

HTTPS만 액세스 가능하도록 정책 수정

HTTPS 액세스만 가능하도록 버킷 정책을 다음과 같이 수정합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSSLRequestsOnly",
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::s3-https-test-bucket",
                "arn:aws:s3:::s3-https-test-bucket/*"
            ],
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            }
        }
    ]
}

CloudFormation으로 S3 버킷을 생성할 경우 버킷 정책은 아래와 같습니다.

ServerLogsBucketPolicy:
    Type: 'AWS::S3::BucketPolicy'
    Properties:
      Bucket: !Ref testHttpsBucket
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Action:
            - 's3:*'
            Effect: Deny
            Sid: AllowSSLRequestsOnly
            Resource: 
              - !Sub 'arn:aws:s3:::${testHttpsBucket}'
              - !Sub 'arn:aws:s3:::${testHttpsBucket}/*'
            Principal: '*'
            Condition:
              Bool:
                "aws:SecureTransport": false

정책 설정이 끝났으면, 이제 AWS CLI로 다시 액세스해 보겠습니다.

aws s3 ls s3://s3-https-test-bucket/test.png
2023-02-25 22:09:44 131058 test.png

HTTPS로는 문제 없이 액세스 가능 한 것을 확인할 수 있습니다.

aws s3 ls s3://s3-https-test-bucket/test.png --endpoint-url http://s3.ap-northeast-1.amazonaws.com

An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied

이어서 HTTP로 액세스를 시도해 보면「AccessDenied」에러가 발생하는 것을 확인할 수 있습니다.

S3 버킷은 기본적으로 HTTPS, HTTP 액세스가 허용된 상태이기 때문에 보안적인 측면을 고려해 HTTPS 액세스만을 허용하도록 정책을 수정할 필요가 있다고 생각합니다.

본 블로그 게시글을 보시고 문의 사항이 있으신 분들은 클래스메소드코리아 (info@classmethod.kr)로 연락 주시면 빠른 시일 내 담당자가 회신 드릴 수 있도록 하겠습니다 !