Wisdom’s Cloud

[AWS] 7. S3 Security 본문

AWS/Intermediate

[AWS] 7. S3 Security

지혜로운지혜쓰 2022. 3. 21. 14:07

Require HTTPS

Amazon S3는 HTTP 요청과 HTTPS 요청을 기본적으로 모두 허용합니다. 버킷 정책에서 HTTP 또는 HTTPS 요청을 확인하려면 "aws:SecureTransport" 조건으로 확인하는데, 이 조건이 false인 경우 해당 버킷의 HTTP 요청에 대한 액세스를 명시적으로 거부합니다.
위와 같이 버킷 정책을 편집한 후, 버킷의 객체에 대한 메타데이터를 검색합니다. 첫번째 명령어는 HTTP를 사용하였으므로 403 오류를 반환하고, 두번째 명령어는 HTTPS를 사용하였으므로 검색한 메타데이터가 성공적으로 뜨는 것을 확인할 수 있습니다.

 

 

Require SSE-S3 Encryption

Amazon S3는 관리형 암호화 키(SSE-S3)로 서버 측 암호화를 사용하여 데이터를 보호합니다. 버킷에 저장된 모든 객체에 대해 서버 측 암호화가 필요한 경우, x-amz-server-side-encryption 요청에 서버 측 암호화를 요청하는 헤더가 포함되어 있지 않으면 객체 업로드 권한을 거부하는 버킷 정책을 사용합니다.
위와 같이 버킷 정책을 편집한 후, 텍스트 파일을 만들어 객체를 PUT합니다. 첫번째 명령어는 암호화 없이 객체를 PUT하였으므로 요청이 실패하고, 두번째 명령어는 SSE-S3를 사용하여 객체를 PUT하였으므로 요청이 성공하는 것을 확인할 수 있습니다.

 

 

Block Public ACLs using Bucket Policy

Amazon S3는 미리 준비된 ACL이라고 하는 미리 정의된 권한 부여 세트를 지원합니다. 미리 준비된 ACL에는 피부여자 및 권한 집합이 미리 정의되어 있습니다. (참고: https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl)
위와 같이 버킷 정책을 편집한 후, 객체를 PUT합니다. 현재 버킷 정책은 private ACL을 허용하지만 아무것도 거부하지 않기 때문에, 두번째 명령어인 public-read ACL을 의도하지 않게 허용하는 것을 확인할 수 있습니다.
따라서 버킷에 대한 작업을 제한하려고 할 때, 허용하지 않고 작업을 방지하는 정책을 작성하는 것이 중요합니다.
위와 같이 버킷 정책을 편집한 후, 다시 객체를 PUT합니다. 이번에는 public-read ACL을 제한하였으므로 두번째 명령어의 요청이 실패하는 것을 확인할 수 있습니다.

 

 

Configure S3 Block Public Access

버킷에 대한 public 액세스를 방지하는 방법에는 버킷 정책을 편집하는 방법도 있지만, S3 Block Public Access를 통해 더 쉽게 구성하는 방법도 있습니다.
위와 같이 S3 Block Public Access를 구성한 후, 다시 객체를 PUT합니다. 새로운 ACL을 통해 부여된 버킷 및 객체에 대한 퍼블릭 액세스 차단을 선택하였기 때문에 두번째 명령어의 요청이 실패하는 것을 확인할 수 있습니다.

 

 

Restrict Access to a S3 VPC Endpoint

Amazon S3는 버킷에 액세스할 수 있는 VPC 엔드포인트를 지정할 수 있습니다. "aws:sourceVpce" 조건을 사용하여 해당 VPC 엔드포인트에서 온 요청이 아니면 버킷에 대한 트래픽을 차단할 수 있습니다.
위의 정책을 사용하려면 S3에 대한 VPC 엔드포인트를 연결해야 하며, VPC 엔드포인트는 EC2 인스터스 서브넷의 라우팅 테이블에 연결되어야 하고, 버킷과 동일한 AWS 리전에 있어야 합니다. 따라서 실행 중인 인스턴스는 이 모든 조건을 만족하기 때문에 요청이 성공하는 것을 확인할 수 있습니다.

 

 

Restrict Access to an IP Address

Amazon S3는 버킷에 액세스할 수 있는 IP 주소를 지정할 수 있습니다. "aws:sourceIP" 조건을 사용하여 해당 IP 주소에서 온 요청이 아니면 버킷에 대한 트래픽을 차단할 수 있습니다.
실행 중인 인스턴스는 해당 IP 주소 범위에 있기 때문에 요청이 성공하는 것을 확인할 수 있습니다.

 

 

Restrict Access to a User

Amazon S3는 특정 IAM 사용자에게 권한을 부여할 수 있습니다. Principal 요소에 해당 IAM 사용자의 ARN을 입력하여 버킷에 대한 트래픽을 차단할 수 있습니다.
user2만 버킷에 대한 트래픽을 차단하였기 때문에 user1의 요청은 성공하는 것을 확인할 수 있습니다.