s3에는 Bucket과 Object가 있다.
데이터와 메타 데이터 구성하고 있는 저장 단위 (s3에 저장되는 데이터)
[Object 구성]
1) Key
- 파일 이름
- 버킷 내 객체의 고유한 식별자
- 모든 객체는 정확히 하나의 키를 갖는다.
2) Value
- 파일의 데이터
- url로 /awsinaction/img/cloud.jpg 같이 구성
3) Version ID
- 파일의 버전 아이디
- 같은 파일이지만 다른 버전으로 올릴 수 있게 돕는 고유한 id
- 이전과 같은 이름으로 업로드한 'cloud.jpg' 객체를 이전 버전으로 돌아가고 싶다면 version id를 통해 복원 가능
4) Meta Data
- 파일의 정보를 담은 데이터
- ex) 최종 수정일, 파일 타입, 파일 소유자, 사이즈 ... 등
5) ACL
- 파일 권한에 대한 데이터(데이터에 대한 접근 및 수정)
위에서 만든 객체를 저장하고 관리 (디렉토리/폴더 개념)
아래 내용들은 모두 Bucket Policy로 권한 관리한 내용입니다.
Bucket PolicyVSACL
- Bucket Policy :
- 버킷 전체에 대한 엑세스 권한 관리
- 여러 객체에 대한 일관된 엑세스 제어 제공
- Bucket Policy json 파일로 세밀한 권한 제어 가능
- ACL:
- 개별 객체 또는 버킷에 대한 엑세스 권한 설정
- 객체마다 다른 엑세스 권한이 필요한 경우 유용
- 상세한 권한 제어가 어려움으로 제어가 유연하지 못함
버킷 이름 : 고유값으로 구성 ex) product_image
AWS region : ex) us-east-1
다른 AWS 계정에서도 소유권을 갖거나 접속 제어 가능 유무
현재 해당 사항 없으므로 ACL 비활성화됨(권장)
모든 퍼블릭 엑세스 차단
활성화 : 변경 내용 추적 가능하지만 비용 조심
고객 데이터나 암호화가 필요한 데이터가 아니라는 정책으로 암호화는 하지 않음.
Disabled statement
Dashboard에서 버킷 생성
product 데이터를 현재 Data(본인)팀에서 관리하고 같은 회사 내 다른 팀(마켓팅) or 다른 회사(외주 업체)에서도 추후 이용 가능한 환경일 때 Bucket Policy 설정입니다.
{
"Id": "Policy1649421058532", // 정책 ID
"Version": "2024-02-01",
"Statement": [
{
"Sid": "Stmt1649420985040",
"Action": [ // 버킷에 수행할 액션(행동)
"s3:DeleteObjectVersion",
"s3:RestoreObject",
"s3:ListBucket",
"s3:PutObjectLegalHold",
"s3:GetBucketAcl",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:GetObject",
"s3:PutObjectRetention",
"s3:PutLifecycleConfiguration",
"s3:GetObjectVersionAcl",
"s3:GetObjectTagging",
"s3:DeleteObject",
"s3:GetObjectVersion",
"s3:ListAllMyBuckets"
],
"Effect": "Allow", // 정책 적용
"Resource": "arn:aws:s3:::product_image/*", // product_image 버킷에 있는 모든 리소스(객체)
"Principal": "*" // 정책 적용 대상 모두
}
]
}{
"Id": "Policy1649421058532", // 정책 ID
"Version": "2024-02-01",
"Statement": [
{
"Sid": "Stmt1649420985040",
"Action": [ // 버킷에 수행할 액션(행동)
"s3:GetObject", // 객체 가져오기
],
"Effect": "Allow", // 정책 적용
"Resource": "arn:aws:s3:::product_image/*", // product_image 버킷에 있는 모든 리소스(객체)
"Principal": "arn:aws:iam::{ACCOUNT_ID}:{user}" // IAM 설정된 aws계정 id값, 사용자명
}
]
}IAM 정책 구조 Reference : https://inpa.tistory.com/entry/AWS-%F0%9F%93%9A-IAM-Policy-JSON-%EA%B5%AC%EC%A1%B0-ARN-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC
CloudFront는 기본적으로 public 권한으로 객체에 접근
Cloud Front (CDN service) 사용해야 하는 이유