[SK shieldus Rookies 19기] 클라우드 보안 기술 1일차

기록하는짱구·2024년 4월 1일
0

SK Shieldus Rookies 19기

목록 보기
23/43
post-thumbnail

AWS 프리티어
https://aws.amazon.com/ko/free/?nc2=h_ql_pr_ft&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all

AWS Activate
https://aws.amazon.com/startups/credits?trk=b337e2be-f484-49d6-8cb4-9d5677961015&sc_channel=el&p=ft&z=subnav&loc=3

📌 클라우드 컴퓨팅

https://aws.amazon.com/ko/what-is-cloud-computing/?nc1=f_cc

📖 클라우드 컴퓨팅

IT 리소스를 인터넷을 통해 온디맨드로 제공하고 사용한만큼만 비용을 지불하는 것

📢 여기서 잠깐! 온디맨드(On Damand)란?
사용자의 요청에 따라 즉싣 제공/공급하는 서비스 (주문형)

물리적 데이터 센터와 서버를 구입, 소유 및 유지 관리하는 대신 Amazon Web Services(AWS)와 같은 클라우드 공급자로부터 필요에 따라 컴퓨팅 파워, 스토리지, 데이터베이스와 같은 기술 서비스에 액세스 가능

📖 On-Premise vs Cloud

On-PremiseCloud
도입 비용구매 시 많은 예산이 소요되고 장비 교체 시 교체 비용 발생하며 운영이 장기화되면 유지보수 비용 외의 추가 비용 덜 발생월 정액 기반으로 사용한 만큼 요금을 지불 (예측 가능) 하며 서비스 증설로 인한 추가적인 비용 상승이 가능
인력시스템 운영 인력 필요시스템 운영 인력이 감원되지만 클라우드 전문 인력 필요
구축 기간시스템 설계 후 하드웨어 및 소프트웨어를 조달하고 배치하는데 시간이 걸림클라우드 사업자가 준비한 인프라를 활용하여 신속하게 시스템 구축 가능
탄력성서버 구축과 시스템 확장에는 고도의 기술과 비용이 필요하며 구축된 시스템을 확장/축소하는 것이 쉽지 않음컴퓨팅 리소스를 떼어서 팔기 때문에 필요에 따라 필요한 만큼만 시스템의 확장/축소가 가능
경제성사전에 시스템 이용 피크 타임을 예측해서 그만큼의 장비와 소프트웨어를 사야하고 피크 타임 외에는 리소스 낭비가 발생할 수 있지만 클라우드에 비해 규모의 경제 작동 X사용하고자 하는 기능을 사용하고자 하는 기간만 사용하므로 낭비가 적으며 관리가 제대로 이루지지 않을 경우 과다한 비용이 청구
가용성시스템의 이중화 및 백업 등의 조치가 필요재해를 대비한 데이터 센터를 이용하거나 장애에 대비한 시스템 구성

📖 클라우드 환경

☁ 퍼블릭 클라우드

CSP(Cloud Service Provider)가 제공하는 서비스로, 특정 기업이나 사용자를 위한 서비스가 아닌 인터넷에 접속이 가능한 모든 사용자를 위한 클라우드 서비스

CSP가 모든 하드웨어/소프트웨어 및 기타 인프라를 소유 및 관리

네트워크, 서버 같은 자원은 각 서비스에서 사용자 별로 권한 관리가 되거나 격리되어 서비스 아용자 간에는 전혀 간섭이 없음

☁ 프라이빗 클라우드

인터넷 또는 개인 내부 네트워크를 통해 일반 사용자가 아닌 특정 사용자(기업, 조직)에게만 제공되는 컴퓨팅 서비스

하드웨어와 소프트웨어는 조직에서만 전용으로 사용

☁ 하이브리드 클라우드

퍼블릭 + 프라이빗

📖 클라우드 서비스 모델

클라우드 컴퓨팅의 세 가지 주요 유형으로 Infrastructure as a Service, Platform as a Service, Software as a Service가 존재

각 클라우드 컴퓨팅 유형은 다양한 수준의 제어, 유연성 및 관리 기능을 제공하므로 필요에 맞는 서비스 세트를 선택 가능

📝 Infrastructure as a Service(IaaS)

IaaS에는 클라우드 IT를 위한 기본 빌딩 블록이 포함되어 있으며 일반적으로 네트워킹 기능, 컴퓨터(가상 또는 전용 하드웨어) 및 데이터 스토리지 공간에 대한 액세스 제공

IaaS는 IT 리소스에 대한 최고 수준의 유연성과 관리 제어 기능을 제공하는데 이는 많은 IT 부서 및 개발자에게 익숙한 기존 IT 리소스와 가장 유사

📝 Platform as a Service(PaaS)

PaaS를 사용하면 기본 인프라(일반적으로 하드웨어와 운영 체제)를 관리할 필요가 없어 애플리케이션 개발과 관리에 집중할 수 있음

즉 PaaS는 애플리케이션 실행과 관련된 리소스 구매, 용량 계획, 소프트웨어 유지 관리, 패치 작업 또는 다른 모든 획일적인 작업에 대한 부담 없이 더욱 효율적인 운영이 가능

📝 Software as a Service(SaaS)

SaaS는 서비스 공급자에 의해 실행되고 관리되는 완전한 제품 제공

대부분의 경우 SaaS라고 하면 웹 기반 이메일과 같은 최종 사용자 애플리케이션을 의미함

SaaS 오퍼링의 경우 서비스를 유지 관리하는 방법이나 기본 인프라를 관리하는 방법에 대해 생각할 필요 없고 특정 소프트웨어를 어떻게 사용할지만 생각하면 됨

📌 공동 책임 모델

https://aws.amazon.com/ko/compliance/shared-responsibility-model/

📖 AWS 책임

AWS 클라우드에서 제공되는 모든 서비스를 실행하는 인프라를 보호할 책임
AWS 클라우드 서비스를 실행하는 하드웨어, 소프트웨어, 네트워킹 및 시설로 구성

📖 고객 책임

IaaS의 경우 고객은 게스트 운영체제의 관리(업데이트, 보안 패치 등), 고객이 인스턴스에 설치한 모든 애플리케이션 소프트웨어 또는 유틸리티의 관리, 인스턴스별로 AWS에서 제공한 방화벽(보안 그룹)의 구성 관리에 대한 책임

데이터 관리(암호화 옵션 포함), 자산 분류, 적절한 허가를 부여하는 IAM 도구 사용의 책임

IAM의 보안 모범 사례
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/best-practices.html

📌 AWS 요금

https://aws.amazon.com/ko/pricing/?nc2=h_ql_pr_ln&aws-products-pricing.sort-by=item.additionalFields.productNameLowercase&aws-products-pricing.sort-order=asc&awsf.Free%20Tier%20Type=*all&awsf.tech-category=*all

📖 사용량에 따른 요금

AWS에서는 사용한만큼 요금을 지불하므로 기업이 민첩성과 응답성을 유지하고 항상 필요한 규모를 충족할 수 있음

사용한만큼 지불하는 요금을 통해 예산을 과도하게 할당하거나 변화에 대한 응답성을 개선하지 않고도 변화하는 비즈니스 요구에 손쉽게 대응할 수 있음

사용한만큼 지불하는 모델에서는 예측이 아니라 필요에 따라 비즈니스에 대응하므로 용량을 오버 프로비저닝하거나 언더 프로비저닝하는 위험을 줄일 수 있음

필요에 따라 서비스 비용을 지불함으로써 혁신과 창조에 주의를 집중하여 조달의 복잡성을 줄이고 비즈니스의 탄력성을 높일 수 있음

📖 커밋을 통한 비용 절감(Savings Plans)

Savings Plans는 AWS 사용량에 대한 요금을 상당량 절감할 수 있는 유연한 요금 모델

이 요금 모델은 AWS 컴퓨팅 및 AWS Machine Learning을 더 저렴한 요금으로 제공

Savings Plans는 특정한 양(USD/시간으로 측정)의 AWS 서비스 또는 서비스 범주를 1년 또는 3년 기간으로 사용하는 약정을 조건으로 온디맨드보다 낮은 요금을 제공

1년 또는 3년 약정으로 Savings Plans에 가입할 수 있으며 AWS Cost Explorer에서 권장 사항, 성능 보고 및 예산 알림 기능을 활용하여 플랜을 손쉽게 관리할 수 있음

📖 더 많이 사용하여 더 적은 비용 지불

AWS에서는 대량 구매 할인을 받고 사용량 증가에 따라 상당한 비용 절감을 실현할 수 있음

S3와 같은 서비스 및 EC2에서 송신되는 데이터 전송 요금은 계층화되어 있음
즉, 더 많이 사용할수록 GB당 요금이 줄어듦

또한, 데이터 수신 요금은 언제나 무료이기에 AWS 사용 요구가 증가함에 따라 도입을 확장하면서 비용은 통제할 수 있는 규모의 경제의 이점을 활용할 수 있음

조직이 성장함에 따라 AWS에서는 고객이 비즈니스 요구를 처리하는 데 도움이 되는 서비스를 확보할 수 있도록 옵션을 제공

예를 들어, AWS의 스토리지 서비스 포트폴리오는 데이터 액세스 빈도와 데이터 검색에 필요한 성능에 따라 비용을 줄일 수 있는 옵션을 제공

비용 절감을 최적화하기 위해서는 성능, 보안 및 안정성을 유지하면서 비용을 절감할 수 있는 적절한 스토리지 솔루션의 조합을 선택해야 함

📖 AWS 요금 계산기

https://calculator.aws/#/?ch=cta&cta=lower-pricing-calc

단일 인스턴스를 실행하든, 수십 개의 개별 서비스를 실행하든, AWS 요금 계산기를 사용하여 월별 청구액 추산할 수 있음

계산기를 사용하면 개별 또는 여러 요금을 추산하고 템플릿을 사용하여 전체 솔루션을 살펴볼 수 있음

📌 AWS 서비스(제품)

https://aws.amazon.com/ko/products/?nc2=h_ql_prod_fs_f&aws-products-all.sort-by=item.additionalFields.productNameLowercase&aws-products-all.sort-order=asc&awsf.re%3AInvent=*all&awsf.Free%20Tier%20Type=*all&awsf.tech-category=*all

📖 Amazon 이름으로 시작하는 서비스

AWS의 기본 빌딩 블록으로 볼 수 있으며 대부분의 기본적인 클라우드 컴퓨팅 요구사항을 충족시키는 데 사용
Amazon EC2, Amazon S3, Amazon RDS

📖 AWS 이름으로 시작하는 서비스

특별한 작업, 데이터 처리, 서버리스 컴퓨팅, 데이터 분석 등과 같은 특화된 작업을 위한 솔루션으로 사용
AWS Lambda, AWS Glue, AWS Step Functions

📌 AWS 글로벌 인프라

https://aws.amazon.com/ko/about-aws/global-infrastructure/?hp=tile&tile=map

33개 지리적 리전 내에 105개의 가용 영역이 있으며 말레이시아, 멕시코, 뉴질랜드, 사우디아라비아, 태국 및 AWS European Sovereign Cloud에 가용 영역 18개와 AWS 리전 6개를 추가하는 계획이 발표

https://aws.amazon.com/ko/about-aws/global-infrastructure/regions_az/?p=ngi&loc=2

📖 리전

리전이란 AWS가 전 세계에서 데이터 센터를 클러스터링하는 물리적 위치를 의미

논리적 데이터 센터의 각 그룹은 가용 영역이라고 함

각 AWS 리전은 지리적 영역 내에서 격리되고 물리적으로 분리된 최소 3개의 AZ로 구성

흔히 리전을 단일 데이터 센터로 정의하는 다른 클라우드 공급자와 달리 모든 AWS 리전의 여러 AZ 설계는 고객에게 여러 가지 이점을 제공

각 AZ는 독립된 전원, 냉각 및 물리적 보안을 갖추고 있으며 지연 시간이 매우 짧은 중복 네트워크를 통해 연결됨

고가용성을 중시하는 AWS 고객은 여러 AZ에서 실행되도록 애플리케이션을 설계하여 내결함성을 한층 더 강화할 수 있음

AWS 인프라 리전은 가장 높은 수준의 보안, 규정 준수 및 데이터 보호 충족

AWS는 다른 어떤 클라우드 공급자보다 더 광범위한 국제적 입지를 제공하며 AWS의 국제적 입지를 지원하고 고객이 전 세계에서 서비스를 이용할 수 있도록 빠르게 새로운 리전을 열고 있음

AWS는 북미, 남미, 유럽, 중국, 아시아 태평양, 남아프리카 및 중동의 리전을 포함하여 여러 지리적 리전을 유지·관리하고 있음

📖 가용영역(Availability Zone, AZ)

AZ(가용영역)는 AWS 리전의 중복 전력, 네트워킹 및 연결이 제공되는 하나 이상의 개별 데이터 센터로 구성

AZ를 사용하면 단일 데이터 센터를 사용하는 것보다 더 높은 가용성, 내결함성 및 확장성을 갖춘 프로덕션 애플리케이션과 데이터베이스를 운영할 수 있음

AWS 리전의 모든 AZ는 높은 대역폭, 지연 시간이 짧은 네트워킹, 완전한 중복성을 갖춘 전용 메트로 광 네트워크와 상호 연결되어 있어 AZ 간에 높은 처리량과 지연 시간이 짧은 네트워킹을 제공

AZ 간의 모든 트래픽은 암호화

네트워크 성능은 AZ 간 동기 복제 기능을 충분히 수행 가능
AZ는 고가용성을 위한 애플리케이션 분할을 용이하게 함

애플리케이션 하나를 여러 AZ에 걸쳐 분할하면 기업의 격리가 더 원활하게 이루어지며 정전, 낙뢰, 토네이도, 지진 등과 같은 문제로부터 안전하게 보호됨

AZ는 다른 모든 AZ와 수 킬로미터에 상당하는 유의미한 거리를 두고 물리적으로 분리
→ 다만 모든 AZ는 서로 100km(60마일) 이내의 거리에 위치

📖 로컬 영역

AWS 로컬 영역은 컴퓨팅, 스토리지, 데이터베이스 및 기타 엄선된 AWS 서비스를 최종 사용자에게 더 가까운 위치에서 실행할 수 있게 함

AWS 로컬 영역을 사용하면 미디어 및 엔터테인먼트 콘텐츠 작성, 실시간 게임, 저장소 시뮬레이션, 전자 설계 자동화, 기계 학습과 같이 지연 시간이 10밀리 초 미만이어야 하는 매우 까다로운 애플리케이션을 쉽게 실행 가능

각 AWS 로컬 영역 위치는 최종 사용자에게 근접한 지역에서 Amazon Elastic Compute Cloud, Amazon Virtual Private Cloud, Amazon Elastic Block Store, Amazon File Storage, Amazon Elastic Load Balancing 등의 AWS 서비스를 사용하여 지연 시간에 민감한 애플리케이션을 실행할 수 있는 AWS 리전의 확장

AWS 로컬 영역은 로컬 워크로드와 AWS 리전에서 실행 중인 워크로드 간의 고대역폭 보안 연결을 제공하여 동일한 API와 도구 세트를 통해 전체 리전 내 서비스에 원활하게 다시 연결할 수 있게 함

📖 AWS Wavelength

AWS Wavelength를 사용하면 모바일 디바이스 및 최종 사용자에게 10밀리 초 미만의 대기 시간을 제공하는 애플리케이션을 구축 가능

AWS 개발자는 이동 통신 사업자 데이터 센터 내의 5G 네트워크 엣지에 AWS 컴퓨팅 및 스토리지 서비스를 포함하는 AWS 인프라 배포 환경인 Wavelength Zone에 애플리케이션을 배포하고 해당 리전의 다양한 AWS 서비스에 원활하게 액세스 가능

이를 통해 개발자는 게임 및 라이브 동영상 스트리밍, 엣지의 기계 학습 추론, 증강 및 가상 현실(AR/VR) 등 10밀리 초 미만의 지연 시간이 요구되는 애플리케이션을 제공할 수 있음

AWS Wavelength는 5G 네트워크 엣지에 AWS 서비스를 제공하여 모바일 디바이스에서 애플리케이션에 연결할 때 발생하는 지연 시간을 최소화

애플리케이션 트래픽은 모바일 사업자 네트워크 내의 Wavelength Zone에서 실행되는 애플리케이션 서버로 전송될 수 있음

인터넷에 대한 추가 네트워크 홉으로 인해 대기 시간이 100밀리 초를 초과하는 경우를 방지함으로써 5G의 향상된 대역폭 및 대기 시간을 완전히 활용하지 못하는 상황을 줄여줌

📖 AWS Outposts

AWS Outposts는 네이티브 AWS 서비스, 인프라 및 운영 모델을 거의 모든 데이터 센터, 콜로케이션 공간 또는 온프레미스 시설로 이전할 수 있음

온프레미스와 AWS 클라우드에서 동일한 AWS API, 도구 및 인프라를 사용하여 일관된 하이브리드 환경 제공 가능

AWS Outposts는 연결된 환경용으로 설계되었으며 짧은 대기 시간 또는 로컬 데이터 처리 필요성에 따라 온프레미스에 유지되어야 하는 워크로드를 지원하는 데 사용 가능

📢 <참고>
2023 클라우드 보안 가이드 AWS

📌 AWS IAM(Identity and Access Management)

https://aws.amazon.com/ko/iam/

AWS 서비스 및 리소스에 대한 액세스와 ID를 안전하게 관리
사용자(users), 그룹(group), 역할(role), 정책(policy)으로 구성
리전에 속하는 서비스가 아닌 글로벌 서비스

📜 IAM 보안 모범 사례

https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/best-practices.html

  • 임시 보안 인증을 사용하여 AWS에 액세스하려면 인간 사용자(user)가 ID 공급자와의 페더레이션을 사용하도록 요구

  • AWS에 액세스하려면 워크로드에 IAM 역할이 있는 임시 자격 증명을 사용하도록 요구

  • 다중 인증(MFA) 필요

  • 장기 보안 인증이 필요한 사용 사례에 필요한 경우 액세스 키 업데이트

  • 모범 사례를 따라 루트 사용자 보안 인증을 보호

  • 최소 권한 적용

  • AWS 관리형 정책으로 시작하고 최소 권한을 향해 나아감

  • IAM 액세스 분석기를 사용하여 액세스 활동을 기반으로 최소 권한 정책 생성

  • 사용하지 않는 사용자, 역할, 권한, 정책 및 보안 인증은 정기적으로 검토하고 제거

  • IAM 정책의 조건(condition)을 사용하여 액세스 추가 제한

  • IAM Access Analyzer를 사용하여 리소스에 대한 퍼블릭 및 크로스 계정 액세스 확인

  • IAM Access Analyzer를 사용하여 IAM 정책을 검증하여 안전하고 기능적인 권한을 보장

  • 여러 계정에 권한 가드레일 설정

  • 권한 경계를 사용하여 계정 내에서 권한 관리 위임

📖 사용자(user)

AWS의 기능과 자원을 이용하는 객체
사람 또는 애플리케이션

🔎 사용자를 식별하는 방법

① 사용자 생성 시 지정한 이름
② 사용자의 고유 식별자
③ ARN(Amazon Resource Name)

arn:aws:service:region:account-id:resouce 
~~~ ~~~ ~~~~~~~ ~~~~~~ ~~~~~~~~~~ ~~~~~~~
|   |   |       |      |          |
|   |   |       |      |          +-- 서비스별로 리소스를 고유하게 식별하는 정보 
|   |   |       |      +--  AWS 계정 ID 
|   |   |       +-- 리소스가 위치하는 AWS 리전 (선택적일 수 있으며 서비스에 따라 상이)
|   |   +-- 리소스를 제공하는 AWS 서비스 
|   |       예) Amazon S3 버킷, AWS Lambda 함수, Amazon RDS 데이터베이스 등
|   +-- AWS를 나타내는 고정 값
+-- 모든 ARN의 시작 부분

🔎 사용자의 자격증명 방법

① AWS Management Console 암호

https://console.aws.amazon.com

💻 발급 받은 계정 확인

💻 IAM 사용자로 로그인 → root 사용자가 생성한 사용자

💻 루트 사용자로 로그인

② Access Key = Accerss Key ID + Secret Access Key

프로그래밍 방식으로 호출할 때 사용

③ SSH Key → AWS에 생성한 EC2 인스턴스로 SSH 접속할 때 사용

④ 서버 인증서

💻 사용자 추가 실습

① 발급받은 계정으로 AWS Management Console에 로그인

② IAM 서비스로 이동

③ 사용자 생성

④ 사용자 세부 정보 입력

⑤ 권한 설정

권한 정책을 선택하지 않고 다음으로 진행

⑥ 검토 및 생성

⑦ 사용자 생성을 확인하고 필요한 경우 계정 정보를 다운로드

⑧ (다른 브라우저) AWS Management Console에 앞에서 생성한 계정으로 로그인

⑨ IAM 서버스로 이동

권한이 없으므로 대시보드에 내용이 출력되지 않는 것을 확인

⑩ (원래 브라우저) 생성한 사용자의 식별 정보(사용자 이름, 사용자 고유 식별자, ARN) 확인

①① 생성한 사용자 삭제

📖 사용자 그룹(user group)

여러 사용자에게 공통으로 권한을 부여하기 위해서 만든 개념
여러 사용자에게 일관된 권한 정책을 쉽게 적용하는 것이 가능

📖 권한(permission)

AWS에서 제공하는 서비스나 자원에 어떤 작업을 할 수 있는지 여부를 명시한 규칙
Ex. 서울 리전에 있는 모든 EC2를 조회 가능

📖 정책(policy)

자격 증명이나 리소스와 연결될 때 해당 권한을 정의하는 AWS의 객체
권한의 모음으로 사용자, 사용자 그룹, 역할에 적용이 가능
사용자, 사용자 그룹, 역할에 권한을 직접 적용할 수 없고, 정책을 생성한 후 적용해야 함
https://docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/access_policies.html

📜 자격 증명 기반 정책

자격 증명 기반 정책은 자격 증명(사용자, 사용자 그룹 및 역할)이 무슨 작업을 어느 리소스에서 어떤 조건에서 수행할 수 있는지를 제어하는 JSON 권한 정책 문서

📝 관리형 정책

AWS 계정에 속한 다수의 사용자, 그룹 및 역할에 독립적으로 연결할 수 있는 자격 증명 기반 정책

  • AWS 관리형 정책
    AWS에서 생성 및 관리하는 관리형 정책

  • 고객 관리형 정책
    ▫ 사용자가 자신의 AWS 계정에서 생성 및 관리하는 관리형 정책
    ▫ 고객 관리형 정책은 AWS 관리형 정책보다 정책에 대해 더욱 정밀하게 제어하는 것이 가능

📝 인라인 정책

  • 단일 사용자, 그룹 또는 역할에 직접 추가하는 정책
  • 정책과 자격 증명을 정확히 1대 1 관계로 유지
  • 자격 증명을 삭제하면 삭제

📜 리소스 기반 정책

S3 버킷과 같은 리소스에 연결하는 정책으로 지정된 보안 주체에 해당 리소스에 대한 특정 작업을 수행할 수 있는 권한을 부여하여 이러한 권한이 적용되는 조건을 정의

리소스 기반 정책은 인라인 정책이며, 관리형 리소스 기반 정책은 없음

모든 리소스가 지원하는 것은 아님

📜 권한 경계

관리형 정책을 사용해 자격 증명 정책이 IAM 엔티티(사용자 또는 역할)에 부여할 수 있는 최대 권한을 설정하기 위한 고급 기능

엔티티의 권한 경계 설정을 통해 자격 증명 기반 및 관련 권한 경계 모드에서 허용되는 작업만 수행할 수 있음

리소스 기반 정책은 권한 경계에 제한을 받지 않음

🤔 아래와 같은 권한 정책과 권한 경계가 설정된 사용자는 EC2와 IAM에 어떤 작업을 할 수 있을까?

해당 사용자는 권한 경계로 EC2FullAccess 권한을 설정했으므로 IMAFullAccess 권한을 가져도 IAM 작업을 수행할 수 없고 EC2 관련 권한이 설정되어 있지 않으므로 EC2 작업도 할 수 없음 → 해당 사용자는 아무것도 할 수 없는 상태

📜 서비스 제어 정책(SCP, Service Control Policies)

조직의 권한을 관리하는데 사용할 수 있는 조직 정책 유형
조직의 모든 계정에 사용 가능한 최대 권한에 대한 중앙 제어를 제공

📜 ACL(Access Control List, 접근 제어 목록)

리소스에 액세스 가능한 다른 계정의 보안 주체를 제어할 수 있는 서비스 정책
JSON 정책 문서 형식을 사용하지 않는 유일한 정책 유형
Amazon S3, AWS WAF 및 Amazon VPC → ACL을 사용하는 대표적인 서비스

📜 세션 정책

역할 또는 페더레이션 사용자에 대해 임시 세션을 프로그래밍 방식으로 생성할 때 파라미터로 전달되는 고급 정책

AssumeRole, AssumeRoleWithSAML 또는 AssumeRoleWithWebIdentity API 작업을 사용하여 프로그래밍 방식으로 역할 세션을 생성하고 세션 정책을 전달

Policy 파라미터를 사용하여 단일 JSON 인라인 세션 정책 문서를 전달
PolicyArns 파라미터를 사용하여 최대 10개까지 관리형 세션 정책을 지정

📖 JSON 정책 문서

⛓ JSON 정책 문서의 구조

문서 상단에 정책 전반의 선택적 정보
하나 이상의 Statement로 구성
각 Statement에는 단일 권한에 대한 정보가 포함

정책에 여러 Statement가 포함된 경우 AWS는 이를 평가할 때 Statement 전체에 논리 OR를 적용

🧿 JSON 정책 요소

  • Version
    정책 언어의 버전
    최신 버전 "2012-10-17" 사용을 권장

  • Statement (필수)
    단일 문 또는 개별 문의 배열을 포함

   "Statement": [ { ... }, { ... }, { ... } ]
  • Sid
    문(statement) 배열에서 각 문에 할당
    JSON 정책 내에서 고유해야 하며 정책 문에 대한 설명으로 사용이 가능

  • Effect (필수)
    문의 허용 또는 명시적 거부를 지정
    Allow 또는 Deny 값을 가질 수 있음 (대소문자를 구분)
    기본적으로 리소스 액세스는 거부되므로, 리소스 액세스를 허용하려면 Effect 요소를 Allow로 설정해야 함

  • Principal
    리소스 기반 정책을 생성하는 경우 액세스를 허용하거나 거부할 계정, 사용자, 역할 또는 페더레이션 사용자를 표시

  • Action (필수)
    특정 작업의 허용 또는 거부 여부를 지정

  • Resources (필수)
    문에서 다루는 객체를 ARN을 사용해 지정

  • Condition
    정책이 효력이 발생하는 시점에 대한 조건을 지정

"Condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" } }

📖 JSON 정책 구문 예시

자격 증명 기반 정책으로 example_bucket이라는 하나의 Amazon S3 버킷 목록을 암시된 보안 주체를 허용

{
	"Version": "2012-10-17", 
	"Statement": {
		"Resource": "arn:aws:s3:::exampel_bucket", 
		"Action": "s3:ListBucket", 
		"Effect": "Allow"
	}
}

리소스 기반 정책으로 특정 AWS 계정 구성원이 mybucket 내 버킷 또는 객체에 수행할 수 있는 모든 작업을 허용

  {
	"Version": "2012-10-17", 
	"Statement": [
		{
			"Sid": "1", 
			"Resource": [
				"arn:aws:s3:::mybucket", 		→ mybucket 버킷
				"arn:aws:s3:::mybucket/*"		→ mybucket 버킷에 포함된
  												  하위 버킷 또는 파일(객체)
			], 
			"Action": "s3:*", 
			"Effect": "Allow", 
			"Principal": { 
				"AWS": [ "arn:aws:iam::account-id:rrot" ]
			}
		}
	]
}

모든 리소스에 모든 동작을 허용

{
	"Version": "2012-10-17", 
	"Statement": {
		"Resource": "*", 
		"Action": "*", 
		"Effect": "Allow"
	}
]

📖 안전한 권한 부여 방법

최소 권한 부여

방법 1. 모든 리소스에 모든 동작 허용

필요 이상의 권한 부여

안전 X

{
	"Resouce": "*", 
	"Action": "*", 
	"Effect": "Allow"
}

방법 2. DynamoDB에 대한 액션을 구체화

DynamoDB의 모든 테이블에 대해 read/write가 가능

(접근하면 안 되는) 다른 테이블에 대해서도 접근이 가능하므로 안전 X

{
	"Resouce": "*", 
	"Action": [
		"dynamodb:GetItem", <<
		"dynamodb:PutItem"	<<
], 
	"Effect": "Allow"
}

방법 3. 사용할 테이블을 한정(제한)

myDynamoDBTable에 대해서만 read/write하도록 제한

{
	"Resouce": "arn:aws:dynamodb:us-east-
  2:123456789012:table/myDynamoDBTable", 	<<
	"Action": [
		"dynamodb:GetItem", 
		"dynamodb:PutItem"
], 
	"Effect": "Allow"
}

방법 4. 특정 조건 명시

IP 주소가 1.2.3.4인 곳에서 접근하는 경우에만 myDynamoDBTable에 read/wirte 할 수 있도록 제한

{
	"Resouce": "arn:aws:dynamodb:us-east-
  2:123456789012:table/myDynamoDBTable", 
	"Action": [
		"dynamodb:GetItem", 
		"dynamodb:PutItem"
], 
	"Effect": "Allow", 
	"Condition": [ 							<<
		"IpAddress": {						<<
			"aws:SourceIp": "1.2.3.4"		<<
		}
	]
}

📖 역할(role)

사용자가 아닌 특정 서비스에서 생성한 객체에 권한을 부여할 때 사용

Ex. 람다 함수가 S3 버킷에서 파일을 읽어 오려면, S3 버킷에 파일을 읽을 수 있는 권한 정책을 만든 뒤 해당 정책으로 역할을 만들어 람다 함수에 지정해야 함

📌 IAM 실습

① user1, user2, user3 사용자 생성

[사용자 생성] 버튼 클릭

사용자 세부 정보 입력하고 [다음] 버튼 클릭

권한 정책을 선택하지 않고 [다음] 버튼 클릭

입력한 내용을 확인하고 [사용자 생성] 버튼 클릭

동일한 방법으로 user2와 user3 생성

사용자 목록에서 추가된 사용자 확인

② S3-Support, EC2-Support, EC2-Admin 사용자 그룹 생성

사용자 그룹 이름을 입력하고 그룹에 소속된 사용자를 선택한 후 권한 정책 연결 없이 그룹 생성

세 개의 그룹이 생성된 후, 각 그룹에 각각 한 명의 사용자를 추가하고 권한을 정의하지 않아야 함

③ S3-Support 사용자 그룹에 S3 읽기 전용 관리형 정책 추가

AmazonS3ReadOnlyAccess 정책을 선택하고 해당 정책에 JSON 정책 문서를 확인한 후 [정책 연결] 버튼 클릭

해당 그룹에 속한 사용자에게 동일한 권한이 부여된 것을 확인 가능

④ EC2-Support 사용자 그룹에 EC2 인스턴스 읽기 전용 AWS 관리형 권한 설정

⑤ EC2-Admin 사용자 그룹에 EC2 인스턴스 읽기, 실행, 중지 권한을 부여

인라인 정책 적용

JSON 편집기를 이용하는 경우

시각적 정책 편집기를 사용하는 경우

정책 이름을 입력하고 [정책 생성] 버튼 클릭

EC2-Admin 사용자 그룹에 생성한 정책이 연결된 것을 확인

⑥ EC2 인스턴스 생성

본인에게 할당된 리전 사용

EC2 대시보드 화면에서 [인스턴스 시작] 버튼 클릭

인스턴스의 이름을 입력하고 Amazon Linux 2023 AMI 선택

프리 티어 사용 가능한 이미지 선택

인스턴스 유형으로 t2.micro를 선택하고 새 키 페어 생성 링크를 클릭해서 키 페어 생성

키 페어 이름을 입력하고 [키 페어 생성] 버튼 클릭

내려받은 키 페어 파일은 해당 인스턴스 접속을 위해서 잘 보관해야 함

나머지 설정을 그대로 유지한 상태로 [인스턴스 시작] 버튼 클릭

인스턴스 실행 확인

불필요한 과정 발생을 막기 위해 EC2 인스턴스 중지

0개의 댓글