암호화

암호화 (Encryption)

S3 Files는 저장 데이터(at rest)와 전송 중 데이터(in transit)를 모두 보호하는 포괄적인 암호화 기능을 제공해요.

출처: 문서

본문

저장 데이터 암호화 (Encryption at rest)

S3 버킷은 Amazon S3의 암호화 메커니즘을 사용해 암호화돼요. S3의 데이터 암호화에 대한 정보는 암호화로 데이터 보호를 참고하세요.

S3 Files는 서버 측 암호화를 사용해 S3 파일 시스템의 저장 데이터를 암호화해요. 서버 측 암호화는 데이터를 수신하는 애플리케이션 또는 서비스가 데이터를 목적지에서 암호화하는 것이에요. S3 파일 시스템에서 데이터와 메타데이터는 스토리지에 쓰이기 전에 기본적으로 암호화되며 읽을 때 자동으로 복호화돼요. 이러한 프로세스는 S3 Files가 투명하게 처리하므로 애플리케이션을 수정할 필요가 없어요. 파일 시스템의 모든 저장 데이터는 다음 방법 중 하나로 암호화돼요.

  • (기본값) Amazon S3 관리형 암호화 키를 사용한 서버 측 암호화(SSE-S3)
  • AWS Key Management Service를 사용한 서버 측 암호화(SSE-KMS)

AWS KMS 키 사용에는 추가 요금이 부과돼요. 자세한 내용은 AWS Key Management Service 개발자 가이드의 AWS KMS 키 개념과 AWS KMS 요금을 참고하세요.

Amazon S3 관리형 암호화 키를 사용한 서버 측 암호화 (SSE-S3)

이 방식은 S3 파일 시스템의 저장 데이터를 암호화하는 기본 방법이에요. Amazon S3 관리형 암호화 키는 Amazon S3가 소유하고 관리하는 키 모음이에요. Amazon S3 관리형 암호화 키를 사용하면 S3 Files가 S3 파일 시스템의 저장 데이터와 메타데이터 암호화를 소유하고 관리해요. Amazon S3 관리형 암호화 키에 대한 자세한 내용은 Amazon S3 관리형 키로 데이터 보호를 참고하세요.

AWS Key Management Service를 사용한 서버 측 암호화 (SSE-KMS)

파일 시스템을 만드는 동안 직접 관리하는 AWS Key Management Service(AWS KMS) 키를 구성하도록 선택할 수 있어요. S3 파일 시스템에서 SSE-KMS 암호화를 사용할 때 AWS KMS 키는 파일 시스템과 같은 리전에 있어야 해요.

AWS KMS용 S3 Files 키 정책

키 정책은 고객 관리 키에 대한 액세스를 제어하는 기본 방법이에요. 키 정책에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드의 AWS KMS의 키 정책을 참고하세요. 다음 목록은 S3 Files가 파일 시스템의 저장 데이터 암호화를 위해 지원하는 모든 AWS KMS 관련 권한을 설명해요.

  • kms:Encrypt (선택 사항) 일반 텍스트를 암호문으로 암호화해요. 이 권한은 기본 키 정책에 포함돼요.
  • kms:Decrypt (필수) 암호문을 복호화해요. 암호문은 이전에 암호화된 일반 텍스트예요. 이 권한은 기본 키 정책에 포함돼요.
  • kms:ReEncrypt (선택 사항) 클라이언트 쪽에서 데이터의 일반 텍스트를 노출하지 않고 새 고객 관리 키로 서버 측에서 데이터를 암호화해요. 데이터는 먼저 복호화된 다음 다시 암호화돼요. 이 권한은 기본 키 정책에 포함돼요.
  • kms:GenerateDataKeyWithoutPlaintext (필수) 고객 관리 키로 암호화된 데이터 암호화 키를 반환해요. 이 권한은 기본 키 정책에 kms:GenerateDataKey* 아래 포함돼요.
  • kms:CreateGrant (필수) 키에 그랜트를 추가해 누가 어떤 조건에서 키를 사용할 수 있는지 지정해요. 그랜트는 키 정책의 대체 권한 메커니즘이에요. 그랜트에 대한 자세한 내용은 AWS Key Management Service 개발자 가이드의 AWS KMS의 그랜트를 참고하세요. 이 권한은 기본 키 정책에 포함돼요.
  • kms:DescribeKey (필수) 지정된 고객 관리 키에 대한 자세한 정보를 제공해요. 이 권한은 기본 키 정책에 포함돼요.
  • kms:ListAliases (선택 사항) 계정의 모든 키 별칭을 나열해요. 콘솔로 암호화된 파일 시스템을 만들 때 이 권한은 KMS 키 선택 목록을 채워요. 최상의 사용자 경험을 위해 이 권한을 사용할 것을 권장해요. 이 권한은 기본 키 정책에 포함돼요.

키 상태와 그 영향

KMS 키의 상태는 암호화된 파일 시스템에 대한 액세스에 직접 영향을 줘요.

  • 사용(Enabled) – 정상 작동. 파일 시스템에 대한 전체 읽기 및 쓰기 액세스가 가능해요.
  • 비활성화(Disabled) – 파일 시스템이 잠시 후 액세스할 수 없게 돼요. 다시 활성화할 수 있어요.
  • 삭제 대기(Pending deletion) – 파일 시스템이 액세스할 수 없게 돼요. 대기 기간 동안 삭제를 취소할 수 있어요. 키 삭제를 취소한 후에는 키를 사용 상태로 전환해야 해요.
  • 삭제됨(Deleted) – 파일 시스템이 영구적으로 액세스할 수 없게 돼요. 이 작업은 되돌릴 수 없어요.

경고 파일 시스템에 사용된 KMS 키를 비활성화하거나 삭제하거나 S3 Files의 키에 대한 액세스를 철회하면 파일 시스템에 액세스할 수 없게 돼요. 백업이 없다면 데이터 손실이 발생할 수 있어요. 암호화 키를 변경하기 전에 항상 적절한 백업 절차를 마련하세요.

전송 중 암호화 (Encryption in transit)

S3 Files는 TLS(Transport Layer Security)를 사용한 전송 중 데이터 암호화를 요구해요. 마운트 헬퍼로 파일 시스템을 마운트하면 클라이언트와 파일 시스템 사이를 오가는 모든 데이터는 TLS로 암호화돼요. 마운트 헬퍼는 파일 시스템과 보안 TLS 연결을 설정하기 위해 efs-proxy 프로세스를 초기화해요. 마운트 헬퍼는 또한 amazon-efs-mount-watchdog라는 프로세스를 만들어 마운트의 상태를 모니터링하며, S3 파일 시스템이 처음 마운트될 때 자동으로 시작돼요. 이 프로세스는 각 마운트의 efs-proxy 프로세스가 실행 중인지 확인하고, 파일 시스템이 마운트 해제되면 프로세스를 중지해요. 어떤 이유로 프로세스가 예기치 않게 종료되면 watchdog 프로세스가 프로세스를 다시 시작해요.

전송 중 TLS 암호화가 작동하는 방식은 다음과 같아요.

  • 클라이언트와 파일 시스템 사이에 보안 TLS 연결이 설정돼요.
  • 모든 NFS 트래픽은 이 암호화된 연결을 통해 라우팅돼요.
  • 데이터는 전송 전에 암호화되고 수신 시 복호화돼요.

전송 중 데이터 암호화는 NFS 클라이언트 설정을 변경해요. 활성 마운트된 파일 시스템을 검사하면 다음 예시처럼 127.0.0.1(또는 localhost)에 마운트된 것을 볼 수 있어요.

$ mount | column -t
127.0.0.1:/  on  /home/ec2-user/s3files        type  nfs4         (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=20127,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1)

파일 시스템을 마운트 헬퍼로 마운트하며, 이 헬퍼는 항상 TLS로 전송 중 데이터를 암호화해요. 따라서 마운트하는 동안 NFS 클라이언트는 로컬 포트에 마운트하도록 재구성돼요.