diff --git "a/_posts/2024-06-04-aws11_S3 \353\262\204\355\202\267 \354\240\225\354\261\205 \354\204\244\354\240\225 & \354\225\224\355\230\270\355\231\224\355\225\230\352\270\260.md" "b/_posts/2024-06-04-aws11_S3 \353\262\204\355\202\267 \354\240\225\354\261\205 \354\204\244\354\240\225 & \354\225\224\355\230\270\355\231\224\355\225\230\352\270\260.md" new file mode 100644 index 000000000000..57f20558e661 --- /dev/null +++ "b/_posts/2024-06-04-aws11_S3 \353\262\204\355\202\267 \354\240\225\354\261\205 \354\204\244\354\240\225 & \354\225\224\355\230\270\355\231\224\355\225\230\352\270\260.md" @@ -0,0 +1,212 @@ +--- +layout: single +title: "S3 버킷 정책 설정 & 암호화하기" +categories: [AWS] +tag: [AWS, S3] +toc: true +toc_sticky: true +post-header: false + +--- + +## S3 버킷 정책 설정하기 + +버킷 정책을 JSON 형식으로 설정해볼건데, 정책 생성기를 사용하여 특정 AWS 사용자 + +생성할 버킷 정책 : 내가 만든 버킷(myk-s3-bucket)에 Object를 put/get 할 수 있고, 버킷의 위치와 버킷 리스트를 가져 올수 있는 정책을 설정할 것이다. 단, 내 IP에서만 이 행위들을 할 수 있게 설정해보자. + +버킷 > 권한 > 버킷 정책으로 이동 + +![스크린샷 2024-08-28 오후 3.13.41.png](/assets/images/aws11/3.13.41.png) + +편집으로 들어가서 정책생성기를 이용하면 편리하게 정책을 JOSN형태로 생성할 수 있다. (아쉽게도 한글 지원은 하지 않는다.) + +![스크린샷 2024-08-28 오후 3.14.47.png](/assets/images/aws11/3.14.47.png) + +- Select Type of Policy : S3 Bucket Policy (S3 버킷 정책) +- Effect : Allow (허용할 권한을 생성할 것이기 때문에) +- Principal : AWS 유저의 ARN (정책을 적용할 AWS 유저를 지정한다. → IAM에서 해당 유저의 ARN을 복사하면 된다, 여러 유저라면 ‘,’로 지정하면 되고 전체 IAM 유저를 지정하려면 ‘*’를 입력) + + ![스크린샷 2024-08-28 오후 3.18.42.png](/assets/images/aws11/3.18.42.png) + +- Actions : get Obejct, put Object (정책에 해당하는 action을 지정) +- Amazon Resource Name : arn:aws:s3:::myk-s3-bucket/* (정책을 적용할 리소스 지정) + - 버킷 정책 편집에 내 버킷 ARN을 복사한 후 버킷 아래의 모든 Object들에 적용할 거기 때문에 /* 붙여줌 + + ![스크린샷 2024-08-28 오후 3.20.48.png](/assets/images/aws11/3.20.48.png) + + - 특정 폴더별 혹은 객체로 지정하려면 /folder_name/* 혹은 /folder_name/object_name으로 지정 + +![스크린샷 2024-08-28 오후 3.16.46.png](/assets/images/aws11/3.16.46.png) + +접근 허용할 IP를 지정하려면 Add Conditions를 선택하여 해당 옵션을 주면 된다. + +- Condition : IpAddress +- Key : aws:SourceIp +- Value : 허용할 IP 입력 (나의 IP로 입력했다.) + +![스크린샷 2024-08-28 오후 3.23.24.png](/assets/images/aws11/3.23.24.png) + +입력한 후 Add Condition 클릭 후 Add Statement를 클릭하면 방금 생성한 정책이 정책 생성기 리스트에 추가된다. + +![스크린샷 2024-08-28 오후 3.27.02.png](/assets/images/aws11/3.27.02.png) + +이제 GetBucketLocation, ListBucket을 추가한다. + +따로 하는 이유는 GetObejct, PutObject는 적용할 리소스가 객체 단위이므로 “Resouerce”값에 arn:aws:s3:::버킷명/* 으로 지정해주었다. + +하지만, GetBucketLocation, ListBucket는 적용할 리소스가 버킷 단위이므로 “Resouerce”값에 /*가 들어간다면 생성시 에러가 난다. + +그래서 나는 먼저 GetObject, PutObject를 추가 후에 생성하였다. + +- Actions : GetBucketLocation, ListBucket +- Amazon Resource Name : arn:aws:s3:::myk-s3-bucket + + ![스크린샷 2024-08-28 오후 3.31.08.png](/assets/images/aws11/3.31.08.png) + + +Generate Policy를 누르면 우리가 생성한 버킷 정책을 JSON형태로 한번에 보여준다. + +이걸 복사해서 버킷 정책 편집 화면에 붙여넣자. + +생성된 버킷 정책 JSON + +```json +{ + "Version": "2012-10-17", + "Id": "Policy1724825386935", // 정책 ID + "Statement": [ + { + "Sid": "Stmt1724825131984", + "Effect": "Allow", + "Principal": { + "AWS": "arn:aws:iam::746669191631:user/aws-learner" + }, + "Action": [ // 버킷에 수행할 액션(행동) + "s3:PutObject", // 객체 업로오기 + "s3:GetObject" // 객체 가져오기 + ], + "Resource": "arn:aws:s3:::myk-s3-bucket/*", // 대상이 되는 리소스 + "Condition": { // 조건 + "IpAddress": { // 아래 IP들을 허용 + "aws:SourceIp": "218.157.44.117" + } + } + }, + { + "Sid": "Stmt1724825386050", + "Effect": "Allow", + "Principal": { + "AWS": "arn:aws:iam::746669191631:user/aws-learner" + }, + "Action": [ + "s3:GetBucketLocation", // 버켓 위치 가져오기 + "s3:ListBucket" // 버켓 리스트 확인 + ], + "Resource": "arn:aws:s3:::myk-s3-bucket", // 대상이 되는 리소스 + "Condition": { + "IpAddress": { + "aws:SourceIp": "218.157.44.117" + } + } + } + ] +} +``` + +AWS CLI로 S3의 버킷 목록 조회해보기 + +![스크린샷 2024-08-28 오후 4.17.05.png](/assets/images/aws11/4.17.05.png) + +S3에 파일 업로드 + +![스크린샷 2024-08-28 오후 4.25.08.png](/assets/images/aws11/4.25.08.png) + +AWS CLI로 업로드되었는지 AWS 콘솔에서 확인하기 + +![스크린샷 2024-08-28 오후 4.25.24.png](/assets/images/aws11/4.25.24.png) + +## 암호화 정책 설정 + +버킷에 객체를 업로드(Put Object)할 때 자동으로 암호화를 할 수 있는 버킷과 암호화가 안된 객체를 업로드 할 시에 호출을 거부하는 버킷을 생성해보자. + +나는 암호화용 버킷을 새로 만들었다. + +- 기본 암호화 : 내장 암호화 방식, 버킷 안에서만 암호화가 유효하다 +- 버킷 정책 : 버킷에 대한 액세스 및 권한을 제어하는데 사용한다. + - 정책을 설정하면 지정된 암호화 헤더가 없는 객체를 버킷에 넣는 API 호출을 거부한다. + - 버킷 정책은 기본 암호화 전에 평가된다. + +따라서, 버킷의 기본 암호화를 KMS로 지정하고, 버킷 정책으로 암호화 안된 객체는 거부하는 정책을 생성할 것이다. + +### 버킷 생성 + +버킷을 생성할 때, 암호화는 KMS 유형으로 지정했고, KMS 키는 AWS에서 기본으로 제공하는 키를 사용했다. + +- KMS 키의 내용을 확인하고 싶을때는 AWS > KMS > AWS 관리형 키 > aws/s3에서 확인해보면 된다고 한다. + +![스크린샷 2024-08-28 오후 3.45.10.png](/assets/images/aws11/3.45.10.png) + +### 버킷 정책 설정 + +정책 생성기에서 버킷 정책을 생성했다. + +- Select Type of Policy : S3 Bucket Policy +- Effect : Deny (암호화 헤더가 호출은 거부할것이므로) +- Principal : * (모든 사용자에게 적용) +- Actions : Put Obejct +- ARN : 버킷_ARN/* + +![스크린샷 2024-08-28 오후 4.35.23.png](/assets/images/aws11/4.35.23.png) + +2가지 Condition을 추가해준다. + +- kms 암호화 방식이 아니면 deny하는 조건 + +![스크린샷 2024-08-28 오후 4.39.09.png](/assets/images/aws11/4.39.09.png) + +- header에 위와 같은 키값이 없다면 (Null 이라면) true로 발생시켜 요청을 deny하는 조건 + +![스크린샷 2024-08-28 오후 4.49.32.png](/assets/images/aws11/4.49.32.png) + +위 두가지 설정을 끝내고 정책을 생성해준다. + +```json +{ + "Id": "Policy1724831428004", + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "Stmt1724831425204", + "Action": [ + "s3:PutObject" + ], + "Effect": "Deny", + "Resource": "arn:aws:s3:::myk-encryption-bucket/*", + "Condition": { + "StringNotEquals": { + "s3:x-amz-server-side-encryption": "aws:kms" + }, + "Null": { + "s3:x-amz-server-side-encryption": "true" + } + }, + "Principal": "*" + } + ] +} +``` + +이제 버킷의 기본 암호화와 버킷 정책 설정이 끝났으니 테스트를 해본다. + +이미지 객체를 AWS 콘솔에서 암호화 없이 직접 업로드 한 결과 업로드 실패가 뜬것을 확인할 수 있다. + +![스크린샷 2024-08-28 오후 4.52.09.png](/assets/images/aws11/4.52.09.png) + +AWS CLI로 별도 암호화 설정 없이 업로드를 해보면 역시 deny된 것을 확인 할 수 있다. + +![스크린샷 2024-08-28 오후 4.57.29.png](/assets/images/aws11/4.57.29.png) + +반대로 kms 암호화하여 업로드를 하면 성공할 수 있다. + +![스크린샷 2024-08-28 오후 4.58.18.png](/assets/images/aws11/4.58.18.png) diff --git "a/_posts/2024-06-05-aws12_S3 CORS \354\240\225\354\261\205 \354\213\244\354\212\265\355\225\264\353\263\264\352\270\260.md" "b/_posts/2024-06-05-aws12_S3 CORS \354\240\225\354\261\205 \354\213\244\354\212\265\355\225\264\353\263\264\352\270\260.md" new file mode 100644 index 000000000000..87dc86ff4253 --- /dev/null +++ "b/_posts/2024-06-05-aws12_S3 CORS \354\240\225\354\261\205 \354\213\244\354\212\265\355\225\264\353\263\264\352\270\260.md" @@ -0,0 +1,185 @@ +--- +layout: single +title: "S3 CORS 테스트해보기" +categories: [AWS] +tag: [AWS, S3] +toc: true +toc_sticky: true +post-header: false + +--- + +S3에서 CORS를 적용하여 다른 Origin에서 접근을 하고자 한다면 Headers에 Cors정책을 추가해 주어야 한다. + +외부에서 객체를 액세스할 버킷을 하나 생성해준다. + +이 버킷을 생성할 땐 퍼블릭 엑세스 차단을 비활성화 해주고 생성하고, 3개의 파일을 업로드해준다. + +그리고 정적 호스팅을 활성화해준다. + +![스크린샷 2024-08-28 오후 5.34.33.png](/assets/images/aws12/5.34.33.png) + +해당 내용으로 버킷 정책을 설정해준다 + +위 버킷을 생성할때 처럼 단순히 퍼블릭 액세스를 모두 해제해주면 누구나 해당 데이터에 접근이 가능하기 때문에 퍼블릭 액세스를 허용한 다음에는 버킷 정책을 반드시 설정해주어야 한다. + +버킷 정책을 설정 안하면 정적 호스팅한 url로 접속시 403 Forbidden 에러 뜸. + +```json +{ + "Version": "2012-10-17", + "Id": "Policy1724833189112", + "Statement": [ + { + "Sid": "Stmt1724833188297", + "Effect": "Allow", + "Principal": "*", + "Action": "s3:GetObject", + "Resource": "arn:aws:s3:::myk-cors-bucket/*" + } + ] +} +``` + +index.html 내용 + +```html + + + AWS TEST + + +

AWS S3 Testing..

+

Hello

+ + + + +``` + +error.html 내용 + +```html +

Error

+``` + +이제 이 버킷에 액세스를 제공해줄 버킷을 생성해준다. 이때 만드는 버킷은 퍼블릭 액세스를 비활성화 한 상태로 만들어야 하며, 기존에 만든 버킷과는 다른 리전을 가지고 있어야 한다. + +다른 리전을 가지게 됨으로써 이 버킷은 이전에 만든 버킷과 다른 Origin으로 형성하는 것임. + +이 버킷은 리전 도쿄(ap-northeast-1)에 만들었고, 4개의 파일을 업로드해준다. + +![스크린샷 2024-08-28 오후 5.43.05.png](/assets/images/aws12/5.43.05.png) + +index.html 내용 + +```html + + + AWS TEST + + +

AWS S3 Testing..

+

Hello

+ + + + + + +
+ + +``` + +extra.html 내용 + +```html +

extra Page

+``` + +이제 새롭게 만든 버킷의 웹 호스팅을 활성화해주고, 버킷 정책을 동일하게 설정해준다. + +여기서, 버킷 정책을 등록할 때 먼저 버킷의 퍼블릭 액세스 차단을 비활성화 해준다. + +퍼블릭 액세스 차단 상태에서는 버킷 정책을 등록,수정을 할 수 없기 때문에 일단 비활성화 한 후, 버킷 정책을 수정,등록한다. + +처음 만들었던 버킷(myk-cors-bucket)의 index.html 파일을 수정해서 확인해보자. + +도쿄 리전에 만들었던 버킷의 extra.html 리소스를 이 버킷의 index.html에서 불러오도록 수정해본다. + +```html + + + AWS TEST + + +

AWS S3 Testing..

+

Hello

+ + + + + + +
+ + +``` + + + +index.html의 내용을 위와 같이 수정한 후 웹 url에 접속하면 extra.html 파일이 불러와지지 않고 콘솔에 해당 에러가 찍히게 된다. (Access-Control-Allow-Origin) + +![스크린샷 2024-08-28 오후 6.47.27.png](/assets/images/aws12/6.47.27.png) + +이런 경우에 S3 CORS 설정을 통해 해결해보자. + +액세스를 시도할 버킷의 권한으로 이동 → 가장 하단에 있는 CORS 편집 + +→ 맨 아래 CORS 편집에 해당 json을 넣는다. + +- AllowedOrigins 에는 요청을 보내는 버킷의 URL + +```json +[ + { + "AllowedHeaders": [ + "Authorization" + ], + "AllowedMethods": [ + "GET" + ], + "AllowedOrigins": [ + "http://myk-cors-bucket.s3-website.ap-northeast-2.amazonaws.com" + ], + "ExposeHeaders": [], + "MaxAgeSeconds": 3000 + } +] +``` + +해당 설정 후 다시 url로 접속하면 이번엔 해당 리소스가 가져와지는 것을 확인할 수 있다. + +![스크린샷 2024-08-28 오후 7.56.23.png](/assets/images/aws12/7.56.23.png) \ No newline at end of file diff --git a/assets/images/aws11/3.13.41.png b/assets/images/aws11/3.13.41.png new file mode 100644 index 000000000000..8e49946cbedd Binary files /dev/null and b/assets/images/aws11/3.13.41.png differ diff --git a/assets/images/aws11/3.14.47.png b/assets/images/aws11/3.14.47.png new file mode 100644 index 000000000000..fff7283ed7b4 Binary files /dev/null and b/assets/images/aws11/3.14.47.png differ diff --git a/assets/images/aws11/3.16.46.png b/assets/images/aws11/3.16.46.png new file mode 100644 index 000000000000..9ae1cfe2997a Binary files /dev/null and b/assets/images/aws11/3.16.46.png differ diff --git a/assets/images/aws11/3.18.42.png b/assets/images/aws11/3.18.42.png new file mode 100644 index 000000000000..f68ee25cddb7 Binary files /dev/null and b/assets/images/aws11/3.18.42.png differ diff --git a/assets/images/aws11/3.20.48.png b/assets/images/aws11/3.20.48.png new file mode 100644 index 000000000000..e31a8da64e31 Binary files /dev/null and b/assets/images/aws11/3.20.48.png differ diff --git a/assets/images/aws11/3.23.24.png b/assets/images/aws11/3.23.24.png new file mode 100644 index 000000000000..ce72b77a9aa6 Binary files /dev/null and b/assets/images/aws11/3.23.24.png differ diff --git a/assets/images/aws11/3.27.02.png b/assets/images/aws11/3.27.02.png new file mode 100644 index 000000000000..9100a715ffc6 Binary files /dev/null and b/assets/images/aws11/3.27.02.png differ diff --git a/assets/images/aws11/3.31.08.png b/assets/images/aws11/3.31.08.png new file mode 100644 index 000000000000..6f2faec6db19 Binary files /dev/null and b/assets/images/aws11/3.31.08.png differ diff --git a/assets/images/aws11/3.45.10.png b/assets/images/aws11/3.45.10.png new file mode 100644 index 000000000000..4a1df26f3e19 Binary files /dev/null and b/assets/images/aws11/3.45.10.png differ diff --git a/assets/images/aws11/4.17.05.png b/assets/images/aws11/4.17.05.png new file mode 100644 index 000000000000..797d966ec587 Binary files /dev/null and b/assets/images/aws11/4.17.05.png differ diff --git a/assets/images/aws11/4.25.08.png b/assets/images/aws11/4.25.08.png new file mode 100644 index 000000000000..721e01113dd5 Binary files /dev/null and b/assets/images/aws11/4.25.08.png differ diff --git a/assets/images/aws11/4.25.24.png b/assets/images/aws11/4.25.24.png new file mode 100644 index 000000000000..d16884ee98ec Binary files /dev/null and b/assets/images/aws11/4.25.24.png differ diff --git a/assets/images/aws11/4.35.23.png b/assets/images/aws11/4.35.23.png new file mode 100644 index 000000000000..84c94941ba06 Binary files /dev/null and b/assets/images/aws11/4.35.23.png differ diff --git a/assets/images/aws11/4.39.09.png b/assets/images/aws11/4.39.09.png new file mode 100644 index 000000000000..e78af3125c6d Binary files /dev/null and b/assets/images/aws11/4.39.09.png differ diff --git a/assets/images/aws11/4.49.32.png b/assets/images/aws11/4.49.32.png new file mode 100644 index 000000000000..e9c1c95f56f3 Binary files /dev/null and b/assets/images/aws11/4.49.32.png differ diff --git a/assets/images/aws11/4.52.09.png b/assets/images/aws11/4.52.09.png new file mode 100644 index 000000000000..40f750ab66e2 Binary files /dev/null and b/assets/images/aws11/4.52.09.png differ diff --git a/assets/images/aws11/4.57.29.png b/assets/images/aws11/4.57.29.png new file mode 100644 index 000000000000..ebabd665f2d6 Binary files /dev/null and b/assets/images/aws11/4.57.29.png differ diff --git a/assets/images/aws11/4.58.18.png b/assets/images/aws11/4.58.18.png new file mode 100644 index 000000000000..2c7386097fea Binary files /dev/null and b/assets/images/aws11/4.58.18.png differ diff --git a/assets/images/aws12/5.34.33.png b/assets/images/aws12/5.34.33.png new file mode 100644 index 000000000000..807273c4d7fb Binary files /dev/null and b/assets/images/aws12/5.34.33.png differ diff --git a/assets/images/aws12/5.43.05.png b/assets/images/aws12/5.43.05.png new file mode 100644 index 000000000000..f6cf4190884f Binary files /dev/null and b/assets/images/aws12/5.43.05.png differ diff --git a/assets/images/aws12/6.47.27.png b/assets/images/aws12/6.47.27.png new file mode 100644 index 000000000000..34f7049c1d36 Binary files /dev/null and b/assets/images/aws12/6.47.27.png differ diff --git a/assets/images/aws12/7.56.23.png b/assets/images/aws12/7.56.23.png new file mode 100644 index 000000000000..2c76be717a50 Binary files /dev/null and b/assets/images/aws12/7.56.23.png differ