S3 Replication (CRR & SRR)

Must enable versioning in source and destination

Cross Region Replication (CRR)

Same Region Replication (SRR)

Bucekts can be in different accounts

Copying is asynchronous

Must give proper IAM permissions to S3

CRR use cases: compliance, lower latency access, replication across accounts

SRR use cases: log aggregation, live replication between production and test accounts

소스 및 대상 버킷에 버저닝을 활성화 해야 한다.

CRR은 다른 리전에도 이동할 수 있는 것.

SRR은 같은 리전에서 이동할 수 있는 것.

버킷이 다른 AWS 계정에 있을 수도 있다.

복제는 비동기식으로 백그라운드에서 이루어진다.

S3에 적절한 IAM 권한을 제공해야 한다.

CRR 사용사례로 규정 준수 /액세스 시 지연시간 단축 / 계정 간 복제 등이 있다.

SRR 사용사례로 로그 집계 / 프로덕션 및 테스트 계정 간의 실시간 복제 또는 재해 복구


S3 Replication - Notes

After activating, only new objects are replicated

Optionally, you can replicate existing objects using S3 Batch Replication

-Replicates exising objects and objects that failed replication

For DELETE operations:

-can replicate delete markers from source to target (optional setting)

-Deletions with a version ID are not replicated (to avoid malicious deletes)

There is no "chaining" of replication

-If bucket 1 has replication in to bucket 2, which has replication into bucket 3

-Then objects created in bucket 1 are not replicated to bucket 3

S3 복제를 활성화하면

활성화한 뒤 새 개체만 복제됩니다.

선택적으로 S3 배치 복제를 사용하여 기존 개체를 복제할 수 있습니다.

- 복제에 실패한 기존 개체 및 개체를 복제합니다.

삭제 작업의 경우:

- 삭제 마커를 소스에서 대상으로 복제할 수 있습니다(옵션 설정).

- 버전 ID가 있는 삭제는 복제되지 않습니다(악의적인 삭제를 방지하기 위해).

Chainig 복제가 없다.

버킷 1을 버킷2에 복제했으면 버킷3에는 복제되지 않는다.

 

S3 MFA-Delete

MFA(multi factor authentication) forces user to generate a code on a device (mobile phone or hardware) before doing important operations on S3

-To use MFA-Delete, enable Versioning on the S3 bucket

-You will need MFA to

permanently delete an object version

suspend versioning on the bucket

-You won't need MFA for

enabling versioning

listing deleted versions

Only the bucket owner(root account) can enable/disable MFA-Delete

MFA-Delete currently can only be enabled using the CLI

S3에서 중요한 작업 전 MFA 인증(주로 핸드폰 혹은 하드웨어 장치)이 이루어진다.

MFA 삭제를 사용하려면 S3버킷에서 버저닝을 활성화 해야한다.

MFA가 필요한 경우 : 객체의 버전을 영구적으로 삭제할 때 / 버킷에서 버저닝을 중단하는 경우이다.

MFA가 필요없는 경우 : 버저닝 활성화 할 때 / 삭제된 버전을 목록화 할 때.

오직 루트 계정으로만 MFA-Delete를 활성화/비활성화 할 수 있다.

현재 CLI를 통해서만 MFA삭제가 가능하다.


S3 Default Encryption vs Bucket Policies

One way to "force encryption" is to use a bucket policy and refuse any API call to PUT an S3 object without encryption headers

Another way is to use the "default encrypton" option in S3

Note: Bucket Policies are evaluated before "default encryption"

버킷 정책을 사용해 강제로 객체를 암호화 할 수 있다.

"암호화를 강제"하는 한 가지 방법은 버킷 정책을 사용하고 암호화 헤더가 없는 S3 개체에 대한 API 호출을 거부하는 것이다.

다른 방법으로는 S3의 기본 암호화 옵션을 사용하는 것이다.

일반 객체를 S3에 올리면 기본 암호화 옵션을 통해 암호화가 이루어진다.

참고: 버킷 정책 방식이 기본 암호화보다 먼저 고려된다.


S3 Access Logs

For audit purpose, you may want to log all access to S3 buckets

Any request made to S3, from any account, authorized or denied, will be logged into another S3 bucket

That data can be analyzed using data analysis tools...

Or Amazon Athena

S3 액세스 로그

감사 목적으로 모든 액세스를 S3 버킷에 로깅하는 경우, S3로 보내지는 모든 요청은 계정과 승인 여부에 상관없이, 다른 S3 버킷에

로깅되어 이후 분석이 가능하다.

데이터 분석도구나 Athena를 사용해 분석할 수 있다.

S3 Access Logs:Warning

Do not set your logging bucket to be the monitored bucket

It will create a logging loop, and your bucket will grow in size exponentially

모니터링 중인 버킷을 로깅 버킷으로 설정하면 안된다.

그렇게 설정할 시 로깅 루프가 생기게 되고, 버킷의 크기가 기하급수적으로 커진다. (엄청 많은 비용을 AWS에 지불할 수도 있다.)

AWS EC2 Instance Metadata

-AWS EC2 Instance Metadata is powerful but one of the least known features to developers

-It allows AWS EC2 instance to "learn about themselves" without using an IAM Role for that purpose.

-The URL is http://169.254.169.254/latest/meta-data

-You can retrieve the IAM Role name from the metadata, but you Cannot retrieve the IAM Policy

-Metadata = Info about the EC2 instance

-Userdata = launch script of the EC2 instance

EC2 인스턴스 메타데이터는 강력한 기능이지만 개발자에게 잘 알려지지 않은 기능이다.

EC2 인스턴스가 스스로 학습하도록 하는데 IAM 역할이 필요없다.

-URL은 http://169.254.169.254/latest/meta-data이다.

169.254.169.254의 IP는 AWS의 내부 IP로 EC2 인스턴스에서만 실행된다.

메타데이터는 EC2 인스턴스의 정보

유저데이터는 EC2 인스턴스의 스크립트를 실행하는 개념이다.

1. AWS Certified Cloud Practitioner 시험이란

AWS Certified Cloud Practitioner는 AWS 자격증 중에 클라우드의 기본지식과 AWS의 핵심 서비스들을 이해하고 있음을 의미하는 자격증이다.

가장 기초적인 자격증이란 뜻이다.


위 사진은 시험에서 출제되는 영역 및 비율이다.

합격 기준은 객관식 문제로서 65문제를 90분 동안 풀어야하며, 총 1000점 중 700점 이상을 넘겨야 합격이다.

시험 결과는 시험이 끝난 그 즉시 바로 확인할 수 있다. (세부 점수는 영업일 5일 이내 이메일로 받을 수 있으며, 어떤 문제가 틀렸는지는 볼 수 없다.)

시험 신청 시에는 언어를 한글로 신청할 수 있으며, 신청 전에 비영어권 국가이므로 시험시간을 추가로 30분 더 제공받을 수 있는 혜택을 얻을 수 있다.

[혜택]에서 신청 후, 시험을 신청하면 된다. (시험을 신청하고 난 뒤에 혜택을 받을 수는 없다.)

사실 시험시간이 90분이면 충분한 시간이다.

시험 신청은 아래 페이지에서 가능하다. 응시료는 100USD 달러로, 10만원이 좀 넘는 가격이다.

만약 시험을 성공적으로 본 뒤에는 50% 바우처를 주니, 다음에 다른 시험을 응시할 때 꼭 바우처를 적용하고 시험에 응시하자.

https://aws.amazon.com/ko/certification/certified-cloud-practitioner/


공부 방법 및 시험 응시

공부 방법은 유데미를 활용

Free tier 범위 및 무료 서비스로 제공(IAM, VPC etc..)하는 경우에는 직접 Hands-on으로 실습해봤다.

시험 준비 기간은 2주, 평일에 3~4시간 정도 공부를 했다. 주말에는 1-2시간 내외.

시험 응시

온라인 시험과 시험 테스트센터에 가서 보는 것으로 두 가지가 있는데,

테스트 센터에는 시간도 제한적이고 이동해야 하는 번거로움이 있어서 온라인 시험(PSI)로 응시했다.

시험 당일 날 PSI Secure 웹브라우저를 다운받고 그 브라우저 내에서 감독관의 지시사항대로 진행하면 된다.

신분증으로 여권과 크레딧 카드를 준비했는데, 여권 및 본인 사진 촬영만 진행했고 따로 크레딧 카드는 필요하지 않았다.

그 이후 주변 360도를 캠으로 보여줬고, 책상 위, 아래 / 천장부터 바닥까지 보여줘야 했다.

또한 손목과 팔을 보여줘야했다.

핸드폰은 카메라가 보이는 곳이고 시험자 손에 닿지 않는 곳에 위치시켜야만 한다.

또한 어떠한 시계도 착용하면 안된다.

모든 지시사항을 감독관이 영어로 지시하는데 이는 말로 직접하지 않고 채팅으로 전달받았다.

모든 검사가 끝나면 시험에 응시한다.

난이도는 그렇게 어렵진 않았지만 문제가 가끔 명확하지 않을 때도 있다.(단순히 내 문해력이 낮았던 걸까?)

마지막에 검토까지 끝내고 제출을 누르면 바로 합/불 여부가 뜬다.

서비스들을 단순히 암기하는 것보다 직접 AWS Cloud 생태계를 이해하고 각 서비스들을 손으로 직접 실습해보는 것이 더 효과적이다. 그러니 덤프만 주구장창 풀면서 시험을 치르지말고 직접 해보면서 이해하자!

-Strong consistency as of December 2020:

-After a :

successful write of a new object (new PUT)

or an overwrite or delete of an existing object (overwrite PUT or DELETE)

...any :

subsequent read request immediately receives the latest version of the object(read after write consistency)

subsequent list request immediately reflects changes (list consistency)

Available at no additional cost, without any performance impact

S3 일관성 모델

2020년 12월부터 S3의 모든 작업은 강력한 일관성을 이룸.

새로운 객체를 성공적으로 S3 작성했거나 기존 객체를 덮어쓰거나, 삭제하는 경우 혹은 이와 같은 모든 작업에 대해 언제든 읽기 혹은

쓰기 후 읽기를 수행할 때마다 방금 작성한 객체를 볼 수 있다는 의미이다. (원래는 아니었다)

목록을 작성할 때에도 목록 내 항목을 바로 볼 수 있다.

성능에 영향을 주지 않으며 무상이다.

CORS 교차 오리진 리소스 공유

CORS mean Cross-Origin Resource Sharing

An origin is a scheme (protocol), host (domain) and port

ex) https://www.example.com (implied port is 443 for HTTPS, 80 for HTTP)

-Web Browser based mechanism to allow requests to other origins while visiting the main origin

-Same origin : http://example.com/app1 & http://example.com/app2

-Different origins : http://www.example.com & http://other.example.com

-the requets won't be fulfilled unless the other origin allows for the requests, using CORS Headers(ex:Access-Control-Allow-Origin)

CORS는 교차 오리진 리소스 공유이다.

즉, 리소스를 다른 오리진에서 얻을 수가 있는 것이다.

오리진이란 체계(프로토콜), 호스트(도메인), 포트이다.

예시 : https://www.example.com은 체계가 hhtps이고, 호스트가 www.example.com, 포트가 443이다.

웹 브라우저에는 기본적인 보안으로 CORS를 갖추고 있는데 이는 웹사이트를 방문했을 때 오리진이 허락 할 때에만 요청을 보낼 수 있도록

허락하는 설정이다. 브라우저 기반 보안인 것.

같은 오리진은 첫 번째와 두 번째 URL끼리 웹 브라우저 요청이 가능하다.

example.com에서 other.example.com에 대한 요청을 할 경우 이를 교차 오리진 요청이라고 하며 이때 올바른 CORS 헤더가 없으면

웹 브라우저가 해당 요청을 차단한다.


S3 CORS

-If a client does a cross-origin request on our S3 bucket, we need to enable the correct CORS headers

-You can allow for a specific origin or for *(all origins)

클라이언트가 웹사이트로 활성화된 S3 버킷에 대해 교차 오리진을 요청하는 경우 올바른 CORS 헤더를 활성화 해야 한다.

특정 오리진에 대해 허용할 수 있거나 혹은 *(아스테리스크)로 전체 오리진을 허용할 수도 있다.

S3 Websites

-S3 can host static websites and have them accessible on the www

-The website URL will be :

-<bucket-name>.s3-website-<AWS-region>.amazonaws.com

OR

-<bucket-name>.s3-website.<AWS-region>.amazonaws.com

-If you get a 403(Forbidden) error, make sure the bucket policy allows public reads

S3는 정적 웹사이트 호스팅 가능하고 WWW에서 접근이 가능하도록 허용한다.

URL도 비교적 간단하다.

403 에러가 있을 경우 버킷 정책에서 public reads를 허용했는지 확인한다.

1)Block public access 설정을 비활성화로 바꿔준다

2)Bucket policy에서 공개 엑세스를 허용하는 버킷 정책을 작성한다.

S3 Security

User based

-IAM policies - which API calls should be allowed for a specific user from IAM console

Resource Based

-Bucket Policies - bucket wide rules from the S3 console - allow cross account

-Object Access Control List (ACL) - finer grain

-Bucket Access Control List (ACL) - less common

Note : an IAM principal can access an S3 object if

the user IAMm permissions allow it OR the resource policy ALLOWS it

AND there's no explicit DENY

S3 보안

사용자 기반 보안

-IAM 정책 : 어떤 API 호출이 허용될지 결정함

만약 유저가 IAM 정책을 통해 S3 버킷으로의 액세스 방법을 승인받게 되면 실행 가능해짐

리소스 기반 보안

버킷 정책 : S3 콘솔에서 설정 가능한 버킷 전반의 규칙, S3 버킷으로의 교차 계정 액세스 활성화가 가능함

객체 ACL

버킷 ACL - 이 둘은 시험에 잘 나오지 않음

참고

-IAM 보안 주체인 유저나 역할은 IAM 권한이 허용할 경우, S3 객체에 액세스 할 수 있다.

->IAM 정책이 S3 버킷에 액세스를 허용하는 보안 주체와 연결돼 있는 경우 or S3 버킷 정책이 허용하는 경우에도 액세스 가능함

동시에 버킷 정책이 사용자 액세스의 명시적 거부가 없어야 함.


S3 Bucket Policies

JSON based policies

-Resources : bucekts and objects

-Actouons : Set of API to Allow or Deny

-Effect : Allow / Deny

-Principal : The account or user to apply the policy to

Use S3 bucket for policy to :

-Grant public access to the bucket

-Force objects to be encrypted at upload

-Grant access to another account(Cross Account)

-버킷 정책은 사용자의 버킷이나 객체 둘 다 적용 할 수 있다.

-Action은 API 허가/거부 설정

-Effect 허용/거부 설정

-Principal : 해당 S3 버킷의 정책을 적용할 계정(유저)

S3 버킷 정책 사용하는 경우

-버킷에 퍼블릭 액세스 권한을 승인

-업로드 시점에 객체 암호화 할 경우

-교차 계정 S3 버킷 정책 사용하여 다른 계정에 액세스 권한 주는 경우


Bucket settings for Block Public Access

Block public access to buckets and objects granted through

-new access control list (ACLs)

-any access control list (ACLs)

-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

These settings were created to prevent compnay data leaks

If you know your bucket should never be public, leave these on

블록 퍼블릭 액세스 (버킷 설정)

객체가 퍼블릭으로 노출 되는 것을 차단하는 설정

네 가지 종류의 액세스 차단 설정이 있으니 참고

퍼블릭으로 두고 싶지 않다면 해당 설정을 활성화시켜야 한다.


S3 Security - Other (기타 보안)

Networking :

-Support VPC Endpoints (for instances in VPC without www internet)

Logging and Audit :

-S3 Access Logs can be stored in other S3 bucket

-API calls be logged in AWS CloudTrail

User Security :

-MFA Delete : MFA can be required in versioned buckets to delete objects

-Pre-Signed URLs : URLs that are valid only for a limited time

네트워킹 :

VPC 엔드포인트로 S3에 비공개 액세스 가능하다.

(VPC에 EC2 인스턴스가 있고 인터넷 액세스가 없는 경우 VPC 엔드포인트를 통해 비공개로 S3에 액세스)

로깅 및 감사 :

S3 액세스 로그를 사용하면 다른 S3 버킷에 해당 로그가 저장됨

API 호출은 CloudTrail에 저장된다.

사용자 보안 :

MFA 삭제 : MFA로 인증이 되어야만 객체 삭제 가능

사전 서명된 URL : AWS의 자격증명으로 서명된 URL, 한정된 시간 동안만 유효하다.

+ Recent posts