전송 중 암호화로 데이터 보호하기

전송 중 암호화로 데이터 보호하기 (Protecting data in transit with encryption)

Amazon S3는 데이터 전송에 HTTP와 HTTPS 프로토콜을 모두 지원해요. HTTPS와 TLS로 전송 중 암호화를 적용해 데이터를 보호할 수 있어요.

출처: 문서

본문

Amazon S3는 데이터 전송에 HTTP와 HTTPS 프로토콜을 모두 지원해요. HTTP는 데이터를 일반 텍스트로 전송하는 반면 HTTPS는 TLS(Transport Layer Security)를 사용해 데이터를 암호화해 보안 계층을 추가해요. TLS는 도청, 데이터 변조 및 중간자 공격을 방지해요. HTTP 트래픽은 허용되지만 대부분의 구현은 HTTPS와 TLS로 전송 중 암호화를 사용해 클라이언트와 Amazon S3 사이를 이동하는 데이터를 보호해요.

TLS 1.2 및 TLS 1.3 지원

Amazon S3는 모든 AWS 리전의 모든 API 엔드포인트에서 HTTPS 연결에 대해 TLS 1.2 및 TLS 1.3을 지원해요. S3는 클라이언트 소프트웨어와 접근하는 S3 엔드포인트가 지원하는 가장 강력한 TLS 보호를 자동으로 협상해요. AWS SDK 및 AWS CLI를 포함한 현재 AWS 도구(2014년 이후)는 어떤 조치도 없이 자동으로 TLS 1.3을 기본값으로 사용해요. TLS 1.2에 대한 하위 호환이 필요하다면 클라이언트 구성 설정을 통해 자동 협상을 재정의해 특정 TLS 버전을 지정할 수 있어요. TLS 1.3을 사용할 때는 하이브리드 양자 후 키 교환(ML-KEM)을 선택적으로 구성해 Amazon S3에 양자 내성 요청을 만들 수 있어요. 자세한 내용은 클라이언트에 대한 하이브리드 양자 후 TLS 구성하기를 참고하세요.

참고 TLS 1.3은 Amazon S3용 AWS PrivateLink와 Multi-Region Access Points를 제외한 모든 S3 엔드포인트에서 지원돼요.

TLS 사용 모니터링

Amazon S3 서버 액세스 로그 또는 AWS CloudTrail을 사용해 Amazon S3 버킷에 대한 요청을 모니터링할 수 있어요. 두 로깅 옵션 모두 각 요청에 사용된 TLS 버전과 암호 스위트를 기록해요.

  • Amazon S3 서버 액세스 로그 – 서버 액세스 로깅은 버킷에 대한 요청의 자세한 기록을 제공해요. 예를 들어 액세스 로그 정보는 보안 및 액세스 감사에 유용할 수 있어요. 자세한 내용은 Amazon S3 서버 액세스 로그 형식을 참고하세요.
  • AWS CloudTrail – AWS CloudTrail은 사용자, 역할 또는 AWS 서비스가 수행한 작업에 대한 기록을 제공하는 서비스예요. CloudTrail은 Amazon S3에 대한 모든 API 호출을 이벤트로 캡처해요. 자세한 내용은 Amazon S3 CloudTrail 이벤트를 참고하세요.

전송 중 암호화 강제

Amazon S3로 전송되는 데이터의 암호화를 강제하는 것은 보안 모범 사례예요. 다양한 정책 메커니즘을 통해 HTTPS 전용 통신이나 특정 TLS 버전 사용을 강제할 수 있어요. 여기에는 S3 버킷용 IAM 리소스 기반 정책(버킷 정책), Service Control Policy(SCP), Resource Control Policy(RCP), VPC 엔드포인트 정책이 포함돼요.

전송 중 암호화를 강제하는 버킷 정책 예시

S3 조건 키 s3:TlsVersion을 사용해 클라이언트가 사용하는 TLS 버전을 기준으로 Amazon S3 버킷에 대한 접근을 제한할 수 있어요. 자세한 내용은 예제 6: 최소 TLS 버전 요구하기를 참고하세요.

S3:TlsVersion 조건 키를 사용해 TLS 1.3을 강제하는 예시 버킷 정책

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyInsecureConnections",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::amzn-s3-demo-bucket1",
        "arn:aws:s3:::amzn-s3-demo-bucket1/*"
      ],
      "Condition": {
        "NumericLessThan": {
          "s3:TlsVersion": "1.3"
        }
      }
    }
  ]
}

S3 버킷 정책에서 aws:SecureTransport 전역 조건 키를 사용해 요청이 HTTPS(TLS)를 통해 전송되었는지 확인할 수 있어요. 앞선 예제와 달리 이 조건은 특정 TLS 버전을 확인하지 않아요. 자세한 내용은 HTTPS 요청으로만 접근 제한하기를 참고하세요.

aws:SecureTransport 전역 조건 키를 사용해 HTTPS를 강제하는 예시 버킷 정책

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RestrictToTLSRequestsOnly",
            "Action": "s3:*",
            "Effect": "Deny",
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket1",
                "arn:aws:s3:::amzn-s3-demo-bucket1/*"
            ],
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            },
            "Principal": "*"
        }
    ]
}

두 키를 모두 기반으로 하는 예시 정책 및 추가 예제

앞선 예제의 두 조건 키 유형을 하나의 정책으로 사용할 수 있어요. 자세한 내용과 추가 강제 접근 방식은 AWS Storage Blog 문서 Amazon S3에서 TLS 1.2 이상으로 전송 중 암호화 강제하기를 참고하세요.

더 알아보기 (Learn more)