[AWS] S3 실습 - 버킷 권한 정책/암호화
버킷 권한 정책
만들어논 버킷에 권한 탭으로 들어간다.
버킷 정책은 현재 비워져있다.
여기에는 JSON형태의 버킷 정책을 작성하면된다.
편집버튼을 누른다.
우측에 정책생성기 버튼을 누르면
새탭이 뜨며 Policy Generator가 뜬다
Policy Generator
S3 Bucket Policy를 선택해준다.
그밖에 AWS 리소스에 대한 정책을 생성할 수도 있다.
Effect는 Allow
Principal : 마우스 커서를 올리면 간단한 설명이 뜬다.
유저 ARN / 그룹 ARN 주소를 넣어주면된다.
본 실습은 root계정을 넣어주겠다.
IAM으로 가서
사용자로 이동 ⭢ 내 자신을 클릭하면 ⭢ 사용자 ARN을 볼수있다. 해당을 복사한다.
Principal에 넣어준다
Amazon S3로 잘되어있는지 확인
Actions : GetBucketPolicy 찾아서 넣어준다.
만들 버킷의 정책에 접근할 수 있게 해달라는 것
Amazon Resource Name (ARN) : 고유 ARN을 넣어줘야한다. 버킷 ARN을 찾아야한다. S3로 돌아간다
버킷 정책 편집에 버킷 ARN을 복사한다. Amazon Resource Name (ARN)에 넣어준다.
클릭
지금부터 만들 버킷 정책에 대한 검토를 할수있는 창이 뜨게된다
만족한다면 Generate Policy 버튼을 클릭해준다.
그러면 이렇게 JSON 형태의 문서가 생성된 것을 볼 수있다.
위에서 정의한 것으로 기반으로 잘 만들어졌는지 확인해준다.
Document를 복사해서 정책 편집기에 넣어주면된다.
그리고 변경 사항 저장
암호화
✬ AWS에서 공식적으로 2023년 1월 5일 부터 버킷에 업로드하는 모든 파일들은 추가 비용없이 자동으로 암호화가 걸릴 것이라고 함
버킷 - 새로운버킷 만들기 (버킷 만들기 버튼)
버킷 이름 : awslearner-encryption-test
기본 암호화
SSE-KMS으로 설정해주고
AWS KMS 키 : AWS KMS 키 중에서 선택
사용 가능한 AWS KMS 키 : AWS/S3 default
https://ap-northeast-2.console.aws.amazon.com/kms/home?region=ap-northeast-2#/kms/defaultKeys
https://ap-northeast-2.console.aws.amazon.com/kms/home?region=ap-northeast-2#/kms/defaultKeys
ap-northeast-2.console.aws.amazon.com
여기서 어떻게 만들어지는지 JSON 문서볼 수 있음
버킷 만들기
만든 버킷에 들어가서 정책 편집기를 열어준다
Effect : Deny
Principal : * ⮕ 모든 사용자, 그룹에 영향이 갈 것이라는 뜻
Actions : PutObject 추가
Amazon Resource Name (ARN) : 버킷의 ARN을 찾아서 넣어준다 그리고 /* 를 추가해서 넣어준다
⮕ 버킷 안에 들어있는 모든 오브젝트에 영향이 갈 것이라는 뜻
그리고 Add Conditions
Condition : StringNotEquals
Key : s3:x-amz-server-side-encryption
Value : aws,kms
Add Conditions click
Add Statement click
두번째 Statement 만들기
위와 동일하게 한 후
Add Conditions
Condition : Null
Key : s3:x-amz-server-side-encryption
Value : true
그리고 Add Condition click, Add Statement click
Generate Policy click
그러면 이 document에 두개의 statement가 들어있다.
첫번째 : 누군가 파일을 업로드할 때 암호화를 걸지 않고 그냥 올린다면 deny를 할 것이다. ⮕ 파일을 업로드 못하게끔 하는 것
즉, 암호화가 걸린 파일만 업로드가 될 것이다라는 뜻
암호화는 무조건 aws kms이어야한다.
Strings.equal이기 때문에 aws kms가 아니면 업로드를 deny해라
두번째 :
"s3:x-amz-server-side-encryption": "true" ⮕ 암호화가 걸려있는 파일에만 들어가는 일종의 메타데이터이기 때문에 이게 true라는 뜻은 암호화가 관련 있다는 것이며 이런 값이 업로드 될 파일이 없다면 업로드를 deny해라
{
"Id": "Policy1707722236992",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1707721996263",
"Action": [
"s3:PutObject"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::awslearner-encryption-test22/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": [
"aws ",
"kms"
]
}
},
"Principal": "*"
},
{
"Sid": "Stmt1707722208344",
"Action": [
"s3:PutObject"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::awslearner-encryption-test22/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": "true"
}
},
"Principal": "*"
}
]
}
이 두가지 statement를 버킷 정책에 넣어주도록 하겠다.
그리고 변경 사항 저장
그러면 이제 암호화를 적용시키지 않고 파일을 업로드 해보자.
실패 (엑세스가 거부됨) : 버킷에 현재 정의된 정책에 어긋나는 파일이 업로드되었기 때문
다시 파일을 업로드 해보겠다.
KMS를 넣어주도록하겠다. 그리고 다시 업로드
업로드 성공