Ssoon
S3 Security Exercises - HTTPS 필요 / SSE-S3 암호화 필요 본문
AWS Hacking & Security Study
S3 Security Exercises - HTTPS 필요 / SSE-S3 암호화 필요
구구달스 2023. 8. 28. 18:53CloudNet@가시다님이 진행하는 "AWS Hacking & Security Study" 1기 스터디입니다.
# AWS Storage Immersion Day - S3 Security Best Practices 를 참조하였습니다.
✅ HTTPS 필요
✔ HTTPS를 사용하기 위해 연결이 필요한 S3 버킷 정책을 생성합니다.
✔ 버킷 정책을 복사하여 버킷 정책 편집기에 붙여넣습니다.
- BUCKET_NAME = sid-security-20230829
{
"Statement": [
{
"Action": "s3:*",
"Effect": "Deny",
"Principal": "*",
"Resource": "arn:aws:s3:::BUCKET_NAME/*",
"Condition": {
"Bool": {
"aws:SecureTransport": false
}
}
}
]
}
- "Action"
- 허용되거나 거부되는 작업(액션)을 정의
- "s3:*"로 지정되어 있으며, 모든 S3 작업을 나타냅니다.
- "Effect"
- "Action"에 대한 허용 또는 거부를 정의
- "Deny"로 지정되어 있으므로 해당 작업이 거부됩니다.
- "Principal"
- 해당 정책에 적용되는 주체(사용자 또는 역할)
- "*"로 지정되어 있어 모든 주체에게 적용됩니다. 따라서 모든 주체에 대한 액세스가 거부됩니다.
- "Resource"
- 액션을 적용할 리소스
- "arn:aws:s3:::BUCKET_NAME/*"로 지정되어 있는데, 여기서 "BUCKET_NAME"을 실제 S3 버킷 이름으로 대체
- 해당 버킷 내의 모든 리소스(파일 및 객체)에 대한 액세스가 거부됩니다.
- "Condition"
- 액션에 대한 추가적인 조건을 정의
- "aws:SecureTransport" 조건이 사용되며, 이 조건은 액세스 시에 안전한 트랜스포트(HTTPS)를 사용하는지 여부를 확인합니다.
- 조건 값이 "false"로 지정되어 있으므로, HTTPS를 사용하지 않는 액세스 요청에 대해 거부됩니다.
모든 주체에 대해 해당 S3 버킷의 모든 액세스 요청을 거부하되, HTTPS를 사용하지 않는 요청에 대해서만 적용됩니다.
✔ endpoint-url이 HTTP이므로 명령에서 403 오류를 반환합니다.
- aws s3api head-object
- AWS Command Line Interface (CLI)를 사용하여 Amazon S3의 객체의 메타데이터를 조회합니다
- --key Hello.txt
- 조회하려는 객체의 이름입니다.
- --endpoint-url http://s3.amazonaws.com
- S3 서비스의 엔드포인트 URL을 지정하는 것을 의미합니다. 엔드포인트는 서비스에 연결되는 주소입니다.
- --profile user1
- AWS CLI 프로파일을 지정합니다. 프로파일은 여러 AWS 계정 또는 환경을 관리하기 위해 사용됩니다.
- --bucket sid-security-20230829
- 조회하려는 객체가 있는 버킷의 이름을 나타냅니다.
✔ endpoint-url이 버킷 정책에 필요한 HTTPS를 사용하기 때문에 명령을 실행합니다.
✅ SSE-S3 암호화 필요
✔ 저장 데이터 암호화를 요구하는 S3 버킷 정책을 생성합니다.
✔ 버킷 정책을 복사하여 버킷 정책 편집기에 붙여넣습니다.
- BUCKET_NAME = sid-security-20230829
{
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::BUCKET_NAME/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
}
]
}
- "StringNotEquals"
- 조건의 유형을 나타냅니다. 여기서는 문자열이 서로 같지 않은지를 확인하는 조건 유형을 사용하고 있습니다.
- "s3:x-amz-server-side-encryption"
- 조건 키(key)로 사용됩니다. 여기서는 S3 객체의 서버 측 암호화 여부를 확인하는데 사용됩니다.
서버 측 암호화(Server-Side Encryption)란?
Amazon S3에서 데이터를 저장할 때 데이터 자체를 암호화하여 보안을 강화하는 메커니즘
데이터가 S3에 업로드될 때, S3는 데이터를 암호화하여 저장하고, 데이터를 다운로드할 때는 자동으로 복호화하여 제공합니다.
- 서버 측 암호화 옵션설명
SSE-S3 | S3가 데이터를 암호화 및 복호화하며 관리합니다. |
SSE-KMS | AWS Key Management Service (KMS)를 사용하여 키로 데이터를 암호화하고 관리합니다. |
SSE-C | 사용자가 직접 제공한 키를 사용하여 데이터를 암호화하고 관리합니다. |
- "AES256"
- 비교하려는 값(value)입니다. 여기서는 S3 객체가 AES256 암호화로 서버 측에 암호화되어야 한다는 조건을 나타냅니다.
✔ textfile 을 생성합니다.
✔ 개체를 버킷에 넣도록 다음 명령어를 실행합니다.
aws s3api put-object --key text01 --body textfile --profile user1 --bucket sid-security-20230829
- 개체가 버킷 정책에 필요한 SSE-S3 암호화를 사용하여 암호화되지 않았기 때문에 요청이 실패합니다.
✔ SSE-S3 암호화를 사용하여 SSH 세션에서 다음 명령을 실행합니다.
aws s3api put-object --key text01 --body textfile --server-side-encryption AES256 --profile user1 --bucket sid-security-20230829
✔ 콘솔에서 해당 버킷에 업로드된 파일을 확인할 수 있습니다.
'AWS Hacking & Security Study' 카테고리의 다른 글
AWS IAM Workshop - 자격증명 기반 정책(Identity-based policies) (0) | 2023.09.05 |
---|---|
AWS IAM Workshop - IAM 사용자(User) & IAM 사용자 그룹(User Group) (0) | 2023.09.04 |
S3 Security Exercises - S3 VPC 엔드포인트에 대한 액세스 제한 / AWS Config 규칙을 사용하여 퍼블릭 버킷 감지 (0) | 2023.08.30 |
S3 Security Exercises - Public ACL 차단 / S3 Public 액세스 차단 (0) | 2023.08.30 |
S3 Security Exercises - Access Key & Bucket ACL 설정 (0) | 2023.08.28 |
Comments