Security
1 Security
- Amazon S3는 데이터 보안을 위해 다양한 메커니즘을 제공합니다.
- 이는 사용자 기반 보안과 리소스 기반 보안으로 구분됩니다.
1.1 사용자 기반 보안
- 특정 사용자가 어떤 API 호출을 허용할지를 정의합니다.
- 이는 AWS Identity and Access Management(IAM)를 통해 설정됩니다.
- 예: 특정 사용자가 S3 버킷에서 객체를 읽거나 쓸 수 있도록 허용할 수 있습니다.
1.2 리소스 기반 보안
- 버킷 정책(Bucket Policies)
- S3 콘솔에서 버킷 전체에 적용되는 규칙을 설정합니다.
- 이는 크로스 계정 액세스를 허용할 수 있습니다.
- 예: 특정 계정의 사용자가 내 버킷에 접근할 수 있도록 허용할 수 있습니다.
- 객체 접근 제어 목록(Object Access Control List)
- 더 세밀한 접근 제어를 설정할 수 있습니다.
- 객체 단위로 접근 권한을 설정할 수 있으며, 필요에 따라 비활성화할 수 있습니다.
- 예: 특정 사용자에게 특정 객체에 대한 읽기 권한을 부여할 수 있습니다.
- 버킷 접근 제어 목록(Bucket Access Control List)
- 버킷 수준에서 접근 권한을 설정할 수 있으며, 일반적으로 사용되지 않으며 비활성화할 수 있습니다.
1.3 Block Public Access
![[Pasted image 20240624162353.png]]
- 이 설정은 회사 데이터 유출을 방지하기 위해 만들어졌습니다.
- 버킷이 절대 퍼블릭이 되어서는 안 된다는 것을 알고 있다면, 이 설정을 활성화 상태로 유지하십시오.
- 퍼블릭 액세스 차단 설정은 사용자 기반 보안과 리소스 기반 보안과는 별도의 보안 레이어로 작동합니다.
- 리소스 기반으로 허용된 퍼블릭 액세스라도 퍼블릭 액세스 차단 설정이 활성화된 경우에는 차단됩니다.
- 설정 항목
- Block all public access: 모든 퍼블릭 액세스를 차단합니다.
- Block public access to buckets and objects granted through new access control lists (ACLs): 새로운 ACL을 통해 부여된 퍼블릭 액세스를 차단합니다.
- Block public access to buckets and objects granted through any access control lists (ACLs): 모든 ACL을 통해 부여된 퍼블릭 액세스를 차단합니다.
- Block public access to buckets and objects granted through new public bucket or access point policies: 새로운 퍼블릭 버킷 또는 액세스 포인트 정책을 통해 부여된 퍼블릭 액세스를 차단합니다.
- Block public and cross-account access to buckets and objects through any public bucket or access point policies: 모든 퍼블릭 버킷 또는 액세스 포인트 정책을 통해 부여된 퍼블릭 및 크로스 계정 액세스를 차단 합니다.
2 Bucket Policy
- 버킷 정책은 Amazon S3 버킷에 대한 액세스를 제어하는 리소스 기반 정책입니다.
- 이를 통해 버킷과 그 안의 객체에 대한 세밀한 권한 관리가 가능합니다.
2.1 구성요소
- 버킷 정책은 다음과 같은 주요 요소로 구성됩니다
- Version: 정책 언어의 버전을 명시합니다.
- Id: 정책의 선택적 식별자입니다.
- Statement: 하나 이상의 개별 명령문을 포함합니다. 각 명령문은 다음 요소로 구성됩니다:
- Sid: 명령문의 선택적 식별자입니다.
- Effect: 명령문이 지정된 작업을 허용할지(Allow) 거부할지(Deny)를 지정합니다.
- Principal: 정책이 적용되는 AWS 계정, 사용자, 역할 또는 서비스를 지정합니다.
- Action: 허용 또는 거부되는 특정 AWS 작업을 명시합니다.
- Resource: 정책이 적용되는 AWS 리소스를 지정합니다.
- Condition: (선택사항) 정책이 적용되는 조건을 지정합니다.
2.2 실제 예시
- 다음은 몇 가지 일반적인 시나리오에 대한 버킷 정책 예시입니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "FullAccessForSpecificUser",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::123456789012:user/username"},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}
]
}
- 특정 IAM 사용자에게 전체 액세스 권한 부여
- 이 정책은 특정 IAM 사용자(arn:aws:iam::123456789012:user/username)에게 'my-bucket'이라는 버킷과 그 안의 모든 객체에 대한 전체 액세스 권한을 부여합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowSpecificIP",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": {
"IpAddress": {"aws:SourceIp": "203.0.113.0/24"}
}
}
]
}
- 이 정책은 특정 IP 범위(203.0.113.0/24)에서만 'my-bucket' 버킷의 객체를 읽을 수 있도록 허용합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-public-bucket/*"
}
]
}
- 이 정책은 'my-public-bucket' 버킷의 모든 객체에 대해 퍼블릭 읽기 액세스를 허용합니다.
- 웹사이트 호스팅에 자주 사용되는 설정입니다.
3 S3를 오직 CloudFront를 통해서만 접근하게 하기
- S3 버킷에 대한 직접 접근을 차단하고 CloudFront를 통해서만 접근하도록 설정하는 것은 보안 강화와 함께 비용 절감 및 성능 향상을 도모할 수 있는 중요한 설정입니다.
- 이를 위해 AWS에서는 Origin Access Control (OAC)을 사용하여 이 기능을 구현할 수 있습니다.