Ssoon

S3 Security Exercises - S3 VPC 엔드포인트에 대한 액세스 제한 / AWS Config 규칙을 사용하여 퍼블릭 버킷 감지 본문

AWS Hacking & Security Study

S3 Security Exercises - S3 VPC 엔드포인트에 대한 액세스 제한 / AWS Config 규칙을 사용하여 퍼블릭 버킷 감지

구구달스 2023. 8. 30. 03:37
CloudNet@가시다님이 진행하는 "AWS Hacking & Security Study" 1기 스터디입니다.
# AWS Storage Immersion Day - S3 Security Best Practices 를 참조하였습니다.

Restrict Access to a S3 VPC Endpoint

VPC 엔드포인트를 사용하면 VPC 내에서 S3 리소스에 대한 액세스를 단순화할 수 있습니다. 이러한 엔드포인트는 구성이 쉽고 안정성이 높으며 인터넷 게이트웨이나 NAT 인스턴스가 필요하지 않은 S3에 대한 프라이빗 연결을 제공합니다.

 

💠 VPC Endpoint

VPC Endpoint를 설정하면 VPC 내에서 AWS 서비스에 대한 프라이빗 네트워크 연결이 생성됩니다. 이 연결은 인터넷을 거치지 않고 VPC 내부에서 AWS 서비스와 통신할 수 있도록 합니다. 각 VPC Endpoint는 특정 서비스에 대응하며, 예를 들어 S3 VPC Endpoint는 Amazon S3 서비스에 대한 연결을 제공합니다.

이점:

  1. 보안 강화: VPC Endpoint를 사용하면 인터넷을 통한 접근이 차단되므로 보안이 강화됩니다. VPC 내의 리소스는 VPC Endpoint를 통해서만 AWS 서비스에 연결할 수 있습니다.
  2. 데이터 전송 비용 절감: 인터넷을 통한 데이터 전송에 비용이 발생하지 않으므로 데이터 전송 비용을 절감할 수 있습니다.
  3. 프라이빗 네트워크: VPC Endpoint를 사용하면 리소스 간의 네트워크 통신이 VPC 내부에서 이루어지므로 공용 인터넷을 사용하지 않고도 데이터를 안전하게 전송할 수 있습니다.
  4. 간단한 구성: VPC Endpoint를 설정하는 것은 비교적 간단하며, AWS 콘솔이나 AWS CLI를 사용하여 수행할 수 있습니다

S3 VPC Endpoint를 설정하면 VPC 내부의 EC2 인스턴스 등이 Amazon S3에 안전하게 접근할 수 있으며, 이를 통해 데이터 보안과 전송 비용을 관리할 수 있습니다

 

 VPC 엔드포인트를 통과하는 요청에만 액세스를 제한하도록 S3 VPC 엔드포인트와 버킷 정책을 구성합니다

서비스 아래 검색창에 S3을 입력하고 Enter 키를 누릅니다. Gateway 유형으로 서비스 이름을 선택합니다.

  • Amazon S3 서비스에 대한 "Gateway" 엔드포인트를 생성하면 VPC 내의 EC2 인스턴스 또는 다른 리소스가 인터넷을 거치지 않고도 안전하게 Amazon S3에 접근할 수 있습니다. 

1. Gateway 엔드포인트:

  • 연결 대상: Gateway 엔드포인트는 특정 AWS 서비스와 VPC 간의 연결을 위한 게이트웨이 역할을 합니다. 대표적인 예로는 Amazon S3와 DynamoDB가 있습니다.
  • 전송 경로: Gateway 엔드포인트는 VPC 내부에서 AWS 서비스로의 직접적인 경로를 제공하며, 인터넷을 거치지 않고 데이터를 전송합니다. 이는 데이터가 더 안전하고 빠르게 전송되도록 도와줍니다.
  • 단순한 구성: Gateway 엔드포인트는 구성이 간단하며 주로 게이트웨이 역할을 하는 AWS 서비스에 연결하는 데 사용됩니다.

2. Interface 엔드포인트:

  • 연결 대상: Interface 엔드포인트는 VPC와 AWS PrivateLink를 통해 다른 AWS 서비스 또는 AWS Marketplace에서 제공하는 서비스에 연결하기 위한 방법을 제공합니다. 예를 들어, Amazon EC2, RDS, ELB와 같은 서비스에 연결할 수 있습니다.
  • 전송 경로: Interface 엔드포인트는 VPC 내에서 사용자 정의 네트워크 인터페이스를 생성하여 연결합니다. 이로써 VPC 내부와 연결 대상 서비스 간의 통신이 이루어집니다. 이는 더 많은 유연성을 제공하지만 구성이 더 복잡할 수 있습니다.
  • 사용자 정의 IP 주소: Interface 엔드포인트를 사용하면 VPC 내에서 사용자가 지정한 IP 주소를 사용하여 연결할 수 있습니다. 이는 IP 주소 기반의 액세스 제어를 가능하게 합니다.

 VPC 엔드포인트 ID 을 확인합니다.

vpce-009f52fc74bfb61bf

 

✔ S3 Bucket 을 클릭합니다.

Permission 탭을 클릭 후 Bucket Policy 을 수정합니다.

BUCKET_NAME을 버킷 이름으로 바꾸고 VPC_ENDPOINT_ID를 엔드포인트 ID로 변경하고 버킷 정책을 복사하여 버킷 정책 편집기에 붙여넣습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "s3:*",
            "Effect": "Deny",
            "Resource": "arn:aws:s3:::BUCKET_NAME/*",
            "Condition": {
                "StringNotEquals": {
                    "aws:sourceVpce": "VPC_ENDPOINT_ID"
                }
            },
            "Principal": "*"
        }
    ]
}

 EC2 인스턴스 에서 다음 명령어를 실행합니다.

aws s3api head-object --key app1/file1 --profile user1 --bucket sid-security-20230829
  • head-object 
    • 객체의 메타데이터를 조회
    • 메타데이터는 객체와 관련된 정보를 포함하며 사용자 지정 메타데이터 및 시스템에서 생성한 메타데이터를 모두 포함

  • VPC 엔드포인트와 연결된 라우팅 테이블이 없기 때문에 HeadObject 요청이 실패합니다.

 

 앞서 생성한 VPC 엔드포인트를 선택해야 합니다. 작업을 클릭하고 경로 테이블 관리를 선택합니다.

 연결된 라우팅 테이블 ID를 선택합니다.

 경로를 VPC 엔드포인트에 연결했기 때문에 요청이 성공합니다.

 

 

Use AWS Config Rules to Detect a Public Bucket

Step 1 : Specify rule type

  • Rules, 검색 창에 S3을 입력하여 Rules을 필터링합니다. s3-bucket-public-read-prohibited를 찾아 규칙을 선택합니다.

Step 2 : Configure rule

  • 변경없이 Next 을 클릭합니다.

  • Scope of changes
All changes               - 규칙이 리소스의 구성 및 설정 변경, 상태 변경, 속성 변경 등 모든 종류의 변경 사항을 모니터링하고 검사합니다.
- 모든 변경 사항을 감시하므로 규칙은 리소스의 모든 측면을 포함한 변경 사항을 감시합니다.
- 리소스의 모든 측면에 대한 규칙 준수를 확인하고자 할 때
- 리소스의 모든 변경 사항을 필요로 하는 경우
Resources - 규칙이 특정 유형의 리소스에 대한 변경 사항만 모니터링하고 검사합니다.
- 사용자는 검사하려는 리소스 유형(예: EC2 인스턴스, S3 버킷, RDS 데이터베이스 등)을 지정할 수 있습니다.
- 특정 리소스 유형에만 집중하여 규칙을 실행하려는 경우
- 특정 리소스 유형의 변경 사항에만 관심이 있는 경우
Tags - 규칙이 리소스의 태그 변경 사항만 모니터링하고 검사합니다.
- 태그는 리소스에 메타데이터를 추가하는 데 사용됩니다.
- 이 옵션을 선택하면 리소스의 태그 변경에만 관심을 두고 규칙을 실행할 수 있습니다.
- 리소스의 태그 변경에만 관심이 있는 경우
- 태그를 통한 리소스 식별 및 관리를 감시하려는 경우

 

Step 3 : Review and create

 

 규칙이 실행되는 데 몇 분 정도 걸립니다. 페이지를 몇 번 새로 고쳐야 할 수도 있습니다. 구성 대시보드가 ​​표시됩니다.

✔ S3 Bucket 을 클릭합니다.

✔ Permissions 탭을 클릭 후 Access control list (ACL) Edit 를 클릭하여 수정합니다.

모든 사람(공개 액세스)에서 목록 및 읽기를 선택하고 저장합니다.

 s3-bucket-public-read-prohibited 규칙을 클릭합니다.

  • 액세스 제어 목록을 방금 변경했는데도 비준수 리소스가 없습니다. 이는 이 규칙이 24시간마다 실행되기 때문입니다.

 Actions 탭에서 Re-evaluate를 선택합니다. 규칙을 재평가하는 데 몇 분 정도 걸릴 수 있습니다. 

 규칙이 성공적으로 실행되면 비준수 S3 버킷이 표시됩니다.

대시보드에서도 비준수 S3 버킷 정보를 확인할 수 있습니다.

 

 

 

Comments