확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스.
S3 생성 시 글로벌로 잡혀, 리전에 종속적이라는 사실을 놓칠 수 있다.
S3 생성 두번째 항목이 리전인 것을 볼 수 있다.
ACL 활성화를 하면 다른 AWS 계정에서도 소유권을 가지거나 접속제어가 가능해진다.
ACL은 버킷이나 객체에 대해 요청자의 권한 허용 범위를 어디까지 설정할 것인가에 대해 간단하게 설정할 수 있다.
ACL은 IAM이나 버킷 정책에 비해 더 넓은 범위에서 제어할 수 있지만, 단지 접근 승인을 한 곳과 접근 승인을 받은 곳으로만 나타낼 수 잇다. (간단한 것만 설정 가능)
퍼블릭 엑세스 차단 설정은 외부에서도 파일을 읽을 수 있다, 없다의 의미다.
버킷 버전 관리를 활성화 하면 파일을 버전별로 관리한다. 해서 비용이 더 들게 된다.
하지만 실수로 파일을 삭제해도 복원할 수 있다.
버전을 사용하도록 설정한 후에는 비활성화 상태로 돌아갈 수 없다. 대신 버전 관리 일시 중지 설정은 가능하다.
태그는 버킷이 많아지면 버킷을 그룹화 시킬 수 있다. 태그로 버킷을 검색할 수 있다.
기본 암호화를 활성화 하면 버킷에 저장되는 모든 새 객체를 암호화해서 저장 한다. 그리고 객체를 다운 로드할 때 암호를 복호화해서 제공해준다.
버킷정책은 버킷을 사용할 권한을 가진 여러 명의 사용자 별로 각각의 행위에 대한 권한 범위를 설정할 수 있다. 버킷에 대한 전반적인 권한 설정은 버킷 정책를 통해 설정된다.
단, 버킷 안의 파일 하나하나의 권한 설정은 불가능하다.
<< 정책생성기 링크 >>
{
"Version": "2012-10-17", // Bucket Policy의 문법이 언제 날짜 기준으로 확정된 문법을 사용하는지 → 2008-10-17 버전 후 2012-10-17 버전이 있는데, 그 뒤로는 업데이트가 안됐음
"Id": "S3PolicyId1", // Bucket Policy의 고유 아이디, 자동으로 부여되는 경우가 많음
"Statement": [
{
"Sid": "IPAllow", // 각 Statement의 고유 아이디. 무슨 역할을 하는 policy인가
"Effect": "Allow", // 버킷에 대한 명령을 허락(allow)하거나 거부(deny). 특정 사용자에 대해 명령을 제한하거나, 허용하는 식으로 사용
"Principal": {"AWS": "arn:aws:iam::spark323:user/spark"}, // Bucket Policy의 적용대상 (spark323 아이디의 유저에 대해서)
"Action": [ // Bucket Policy에서 허용한 Action
"s3:GetObject", // 객체 가져오는 행동
"s3:GetBucketLocation", // 버켓 위치를 확인하는 행동
"s3:ListBucket", // 버켓 리스트를 확인하는 행동
],
"Resource": "arn:aws:s3:::bucketname/*", // 대상이 대는 Bucket에 대한 명세
"Condition": { // 어떤 조건 하에
"NotIpAddress": { // 이 IP비허용
"aws:SourceIp": "1.1.1.1/32"
},
"IpAddress": { // 이 IP허용
"aws:SourceIp": [
"192.168.1.1",
"192.168.1.2/32",
]
}
}
}
]
}
ACL과 Bucket Policy 차이
ACL이나 버킷 정책이나 둘다 버킷에 대한 엑세스를 제한하거나 허용하는 권한 설정이다.
버킷정책은 버킷에대해서만 권한을 설정할 수 있지만, ACL은 버킷 뿐만 아니라 개별 객체에도 가능하다.
버킷정책은 JSON을 통해 세분화된 권한을 설정할 수 있지만, ACL은 버킷 정책만큼 세분화된 엑세스 모드를 제공하지 않는다.
S3는 사용한 만큼만 요금을 지불한다.
S3 Glacier 같은 장기 보관용 등급의 경우 storage 저장 비용은 정말 저렴하지만 데이터를 꺼낼때 요금이 굉장히 세다.
동일한 리전의 EC2와는 데이터 전송 요금이 발생하지 않으므로 S3와 EC2의 리전은 동일하게 설계한다.
유형 | 정책 |
---|---|
스토리지 요금 | 객체 저장 비용(객체크기, 해당 월에 객체 저장한 기간, 스토리지 클래스에 따라 다름) |
요청 및 데이터 검색 | GET, LIST 및 기타 요청에 대한 비용 발생(DELETE 및 CANCEL 요청은 무료) |
데이터 전송 | 특정 케이스를 제외하고 모든 송수신 대역폭에 대해 요금 지불인터넷에서 전송된 데이터, 동일한 리전의 EC2 인스턴스로 전송된 데이터, CloudFront로 전송된 데이터 |
S3는 전세계에서 접속할 수 있는 스토리지 서비스 이다. 따라서 어느 누가 접속해 내용물을 변조할수 있기때문에 S3의 버킷의 기본 정책은 public이 아닌 private로 설정 되어있다.
하지만 만일 외부에서 접속해 S3의 버킷을 제어할 필요가 있다면 어떻게 할까?
버킷을 통째로 public으로 개방하는 것이 아닌 S3 권한 제어을 통해 접근 제어를 설정 할 수 있다.
AWS 계정 생성할때 설정 했던 이중 인증 옵션이다.
간단히 말하면 파일 지울때 보안 토큰 입력하라는 방지책이다.
public에서 접근해서 object를 다운받거나 업로드 해야 하는 경우, 버킷 자체를 public으로 열기엔 부담스럽고, 그렇다고 pulblic에 있는 사용자에게 S3 접근권한을 일일히 부여하기도 번거로울 때 사용할 수 있는게 pre-signed url(임시 권한)이다.