AWS/Technical Essentials

AWS 소개

AWS Technical Essentials 트랙의 첫 번째 단원 학습 정리 내용

AWS란?

  • AWS 클라우드 컴퓨팅 서비스를 제공한다.
  • 클라우드 컴퓨팅 배포 방법은 3가지 유형이 존재한다.
    • 온프레미스: 기업이 자체 시설에 IT 인프라르 보유하고 직접 설치 및 관리, 운영하는 방식
    • 클라우드: AWS가 데이터 센터를 소유하고, 종량제 요금으로 인터넷을 통해 IT 리소스를 온디맨드로 제공하는 방식
    • 하이브리드: 클라우드 기반 리소스와 클라우드에 있지 않은 리소스 간 인프라와 애플리케이션을 연결하는 방식

클라우드 컴퓨팅의 장점

  • 개발자의 애플리케이션 기능 배포 과정을 각 방법으로 실행할 때를 가정
    • 온프레미스의 경우 프로덕션 환경과 동일한 환경 구성을 위해 물리적인 인프라를 구축해야 하고, 이에 수반하는 비용과 시간 소모가 있다.
    • 반면, 클라우드의 경우 몇 분 또는 몇 초 만에 전체 프로덕션 환경을 복제할 수 있다.
  • 또한, 코드 실행 환경과 관련된 작업은 비즈니스에 차별성을 가져오기 어렵기에 이런 작업들을 제외하게 된다면 본질적인 전략에 집중할 수 있다.
    • AWS에선 이것을 '차별성이 없고 부담스러운 작업'을 제거한다고 말한다.
  • 클라우드 컴퓨팅의 이점을 6가지로 정리할 수 있다.
    • 종량제: 리소스 실사용량에 대한 비용만 지불하기에 하드웨어 비용을 지불하지 않아도 된다.
    • 규모의 경제로 얻게 되는 이점: 사용량에 따라 지불하는 종량제 요금이 더 낮아진다.
    • 용량 추정 불필요: 필요한 만큼의 용량에 엑세스하고 필요에 따라 몇 분 만에 용량을 확장하거나 축소할 수 있다.
    • 속도 및 민첩성 향상: 클릭 한 번으로 IT 리소스 확보한다.
    • 비용 절감 목표 실현: 물리적 인프라에 대한 신경을 덜 쓰기에 고객에게 더 집중할 수 있다.
    • 몇 분 만에 전 세계에 배포: 최소 비용으로 고객의 지연 시간을 줄이며 더욱 유용한 경험을 제공한다.

AWS 글로벌 인프라

인프라는 모든 클라우드 애플리케이션의 기반으로 존재한다.

리전

  • AWS가 데이터 센터를 호스팅하는 전 세계의 지리적 위치에 해당한다.

적절한 AWS 리전 선택

  • AWS 리전은 서로 독립적이며, 명시적 동의와 허가가 없는 경우 데이터가 한 리전에서 다른 리전으로 복제되지 않는다.
  • 리전을 선택하는 기준은 아래와 같으며, 순서는 우선순위에 해당한다.
    1. 규정 준수 (ex. 법적 제한)
    2. 지연 시간
    3. 요금
    4. 서비스 가용성

가용 영역

  • 리전을 구성하는 클러스터에 해당하며 중복 전력, 네트워킹 및 연결 기능을 갖춘 하나 이상의 데이터 센터로 구성된다.
  • 각 데이터 센터는 공개되지 않은 위치의 개별 시설에서 운영되며, 지연 시간이 짧은 중복 고속 링크를 사용하여 연결된다.

AWS 서비스의 범위

  • 사용하는 AWS 서비스에 따라 리소스는 가용 영역, 리전 또는 전역 수준 중 하나로 배포된다.
    • 리전 범위 서비스의 경우 AWS는 데이터 내구성 및 가용성을 높이기 위한 작업을 자동으로 수행한다.
    • 반면, 가용 영역을 지정하는 경우엔 리소스 내구성과 가용성을 높일 책임을 대개 사용자에게 부여한다.

복원력 유지

  • 애플리케이션 가용성 유지를 위해 고가용성과 복원력을 유지해야 한다.
  • 리전 범위의 관리형 서비스를 사용하는 경우 가용성과 복원력이 내장되어 있다.
    • 하나의 가용 영역에 장애가 발생한 경우, 두 번째 가용 영역에서 인프라가 가동되어 애플리케이션 트래픽을 처리한다.

엣지 로케이션

  • 콘텐츠가 캐시되는 전 세계의 위치에 해당한다.
  • 예를 들어, 미디어 콘텐츠가 런던에 있는데 시드니에 있는 유저에게 콘텐츠를 공유하려는 경우 시드니와 가까운 엣지 로케이션에 비디오를 캐시할 수 있다.
  • Amazon CloudFront는 전 세계의 엣지 로케이션 네트워크를 사용하여 콘텐츠를 전송하고, 콘텐츠 요청 시 가장 짧은 지연 시간을 소요하는 엣지 로케이션으로 요청이 라우팅된다.

AWS와 상호작용

  • AWS에서 수행하는 모든 작업은 인증 및 권한이 부여된 API 호출이다.
  • AWS Management Console, AWS Command Line Interface(AWS CLI), AWS SDK 등이 있다.

AWS Management Console

  • AWS에서 제공하는 GUI를 활용하여 상호작용 할 수 있다.
  • 가장 쉽게 활용할 수 있는 방법이다.

AWS CLI

  • 스크립트 명령어를 통해 API를 호출하여 상호작용 할 수 있다.
  • 콘솔에서 반복적으로 진행하는 프로세스를 한 번의 명령어로 실행할 수 있다.

AWS SDK

  • 프로그래밍 언어로 코드를 실행하여 API를 호출하여 상호작용 할 수 있다.
  • C++, Go, Java, JavaScript, Ruby, Python 등과 같은 언어에 대해 유지 관리한다.
  • 애플리케이션 내에서 특정 이벤트로 인해 발생하는 결과를 SDK를 통해 AWS 리소스에 적용할 수 있다.

보안 및 AWS 공동 책임 모델

  • AWS의 보안에 대한 책임은 사용자와 AWS 공동에게 있다.
  • 이를 위해 AWS에서는 공동 책임 모델을 구성했고 책임의 차이를 클라우드 자체의 보안과 클라우드 내부의 보안이라고 한다.
구분보안 항목

고객 (클라우드 내부의 보안 담당)

  • 고객 데이터
  • 플랫폼, 애플리케이션, 자격 증명 및 액세스 관리
  • 운영 체제, 네트워크, 방화벽 구성
  • 클라이언트 측 데이터, 암호화, 데이터 무결성 인증
  • 서버 측 암호화 (파일 시스템 및 데이터)
  • 네트워킹 트래픽 보호

AWS (클라우드 자체의 보안 담당)

  • 소프트웨어
  • 컴퓨팅
  • 스토리지
  • 데이터베이스
  • 네트워킹
  • 하드웨어 및 AWS 글로벌 인프라
  • 리전
  • 가용 영역
  • 엣지 로케이션

AWS의 보안 책임

  • AWS는 클라우드 자체의 보안을 담당한다.
  • AWS 리전, 가용 영역, 데이터 센터 보호, 건물의 물리적 보안
  • 하드웨어, 소프트웨어, 네트워킹 구성 요소 등

고객의 보안 책임

  • 고객(사용자)은 클라우드 내부의 보안을 담당한다.
  • 책임 수준은 AWS 서비스에 따라 달라지며, 일부 서비스의 경우 필요한 모든 보안 구성 및 관리 작업을 고객이 수행해야 한다.
  • 범주마다 책임 수준이 다르기에 어떤 서비스를 사용하는지 고려하고 필요한 책임 수준을 검토해야 한다.
범주범주AWS 서비스의 예고객의 책임
인프라 서비스컴퓨팅 서비스Amazon Elastic Compute Cloud (Amazon EC2)고객은 고객 데이터를 암호화, 보호, 관리하는 것 외에도 운영 체제 및 애플리케이션 플랫폼을 제어한다.
추상화 서비스고객의 관리가 거의 필요하지 않은 서비스Amazon Simple Storage Service (Amazon S3)고객은 고객 데이터를 관리하고, 데이터를 암호화하고, 네트워크 방화벽 및 백업을 통해 데이터를 보호할 책임이 있다.

AWS 루트 사용자 보호

AWS 루트 사용자

  • AWS 계정을 처음 생성하면 계정의 모든 AWS 서비스 및 리소스에 대해 완전한 액세스 권한을 갖는 단일 로그인 자격 증명으로 시작한다.
  • 이 자격을 AWS 루트 사용자라고 하며 계정 생성 시 사용한 이메일과 패스워드로 로그인하여 액세스한다.

AWS 루트 사용자 자격 증명

  • AWS 루트 사용자에게는 2가지 자격 증명 집합이 있는데, 하나는 이메일 주소와 암호이고 두 번째는 액세스 키다.
    • 액세스 키는 액세스 키 ID, 비밀 액세스 키로 구성된다.

AWS 루트 사용자 모범 사례

  • 루트 사용자는 결제 및 개인정보를 비롯한 모든 AWS 서비스 및 리소스에 대한 전체 액세스 권한을 갖는다.
  • 그렇기에 이를 안전하게 보호하고 일상 작업에서는 루트 사용자를 사용하지 않는게 좋다.
  • 아래의 모범 사례를 따라 루트 사용자를 안전하게 보호할 수 있다.
    • 루트 사용자에 강력한 암호를 선택합니다.
    • 루트 사용자에 다중 인증(MFA)을 사용합니다.
    • 루트 사용자 암호나 액세스 키를 누구와도 공유하지 않습니다.
    • 루트 사용자와 연결된 액세스 키는 사용 중지하거나 삭제합니다.
    • 관리 작업이나 일상 작업용으로 Identity and Access Management(IAM) 사용자를 생성합니다.

다중 인증(MFA)

  • 로그인할 때 2개 이상의 인증 방법을 사용하여 자격 증명을 확인하는 방식이다.
  • 이를 통해 악의적인 행위자가 첫 번째 인증 방법으로 해킹하더라도 두 번째 인증 방법에서 제한되게 만들 수 있다.

AWS 기반 MFA

  • 루트 사용자에게 MFA를 활성화하는 경우, 두 가지 인증 과정을 거쳐야 한다.
  • 첫 번째는 이메일 및 암호 조합이고 두 번째는 MFA 디바이스에서 제공하는 임시 숫자 코드다.
  • 이를 활용하면 보안 계층이 강화된다.

지원되는 MFA 디바이스

  • AWS는 가상 MFA 디바이스, TOTP(시간 제한이 있는 하드웨어 일회용 암호), FIDO 보안 키와 같은 다양한 MFA 메커니즘을 제공한다.

AWS Identity and Access Management

인증 및 권한 부여

  • 게정에 대한 액세스를 구성할 때 인증권한 부여라는 두 가지 용어에 대해 이해해야 한다.

인증

  • 인증은 사용자가 본인임을 보장하는 행위이며 인증된 유저에 대해 액세스 권한을 부여한다.
  • 보통 이름과 암호가 대표적이고 토큰 기반 인증, 지문과 같은 생체 인식 데이터 등 다른 형식도 존재한다.

권한 부여

  • AWS 리소스 및 서비스에 액세스할 수 있는 권한을 부여하는 프로세스다.
  • 사용자가 읽기, 편집, 삭제 또는 리소스 생성과 같은 특정 작업을 수행할 수 있는지 여부를 결정한다.

IAM이란?

  • AWS IAM(Identity and Access Management)는 AWS 계정 및 리소스에 대한 액세스를 관리하는데 도움이 되는 AWS 서비스다.
  • IAM을 사용하면 액세스 키 또는 암호 집합을 공유하지 않고도 AWS 계정 및 리소스에 대한 액세스 권한을 공유할 수 있다.

IAM 기능

  • AWS 계정에서 액세스를 제어하고 자격 증명을 관리하는데 도움이 되도록 IAM에서는 보안을 위한 다양한 기능을 제공한다.
    • 글로벌 사용 가능
    • AWS 서비스와 통합
    • 공유 액세스 지원
    • 다중 인증(MFA) 지원
    • ID 페더레이션 지원
    • 무료 제공

IAM 사용자

  • AWS와 상호 작용하는 사람 또는 서비스를 뜻한다.
  • 사용자를 생성하면 해당 사용자가 로그인해 계정 내 AWS 리소스에 액세스 할 수 있다.

IAM 사용자 자격 증명

  • IAM 사용자는 일련의 자격 증명으로 구성되며 사용자를 생성할 때 다음과 같은 유형의 액세스를 제공할 수 있다.
    • AWS Management Console 액세스
    • AWS CLI 및 AWS API에 대한 프로그래밍 방식 액세스
  • 사용자 수준과 그룹 수준에서 권한을 부여할 수 있다.

IAM 그룹

  • 사용자의 모음이며, 그룹에 할당된 권한은 그룹에 속한 모든 사용자에게 상속된다.
  • 사용자에 대한 권한을 편리하고 확장 가능한 방식으로 관리할 수 있다.
  • IAM 그룹은 다음과 같은 특징을 가진다.
    • 사용자는 여러 그룹에 속할 수 없다.
    • 그룹은 다른 그룹에 속할 수 없다.

IAM 정책

  • 액세스를 관리하고 AWS 서비스 및 리소스에 대한 권한을 제공하는 방법이다.
  • IAM 자격 증명이 요청을 할때마다 AWS는 해당 자격 증명과 관련된 정책을 평가한다.

IAM 정책 예시

  • 대부분의 정책은 여러 정책 요소가 포함된 JSON 문서로 AWS에 저장된다.
  • 아래 예시는 IAM 자격 증명 기반 정책을 통해 관리자 액세스 권한을 제공한다.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "*",
      "Resource": "*"
    }
  ]
}
  • 해당 정책에는 4가지 주요 JSON 요소가 있다.
    • Version: 요소는 정책 언어의 버전을 정의한다. AWS가 정책을 처리하는 데 필요한 언어 구문 규칙을 지정한다. 사용 가능한 모든 정책 기능을 사용하려면 정책의 “Statement” 요소 앞에 "Version": "2012-10-17"을 포함하면 된다.
    • Effect: 요소는 정책이 액세스를 허용할지 또는 거부할지를 지정한다. 이 정책에서 Effect는 “Allow”이므로 특정 리소스에 대한 액세스를 제공한다는 뜻이다.
    • Action: 요소는 허용하거나 거부해야 하는 작업 유형을 설명한다. 예제 정책에서 작업은 "*" 이다. 이것을 와일드카드라고 하며, AWS 계정 내의 모든 작업을 상징한다.
    • Resource: 요소는 정책 스테이트먼트에서 다루는 객체를 지정한다. 정책 예제에서 리소스는 와일드카드인 "*" 이다. 이것은 AWS 콘솔 내의 모든 리소스를 나타낸다.
  • 아래는 예제는 좀 더 세분화된 IAM 정책이다.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyS3AccessOutsideMyBoundary",
      "Effect": "Deny",
      "Action": ["s3:*"],
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:ResourceAccount": ["222222222222"]
        }
      }
    }
  ]
}
  • 해당 정책은 Deny Effect를 사용하여 Amazon S3 작업에 대한 액세스를 차단한다.
    • 단, 예외는 액세스되는 Amazon S3 리소스가 222222222222 라는 계정에 있는 경우다.

IAM 역할

  • 서비스 간 액세스(API 호출 권한 등)을 부여할 때 활용할 수 있는 서비스다.
  • IAM 사용자와 마찬가지로 AWS에 있는 자격 증명이며 요청에 서명하는 데 사용되는 AWS 자격 증명 또한 연결되어 있다.
  • 아래의 특징을 갖는다.
    • 정적 로그인 자격 증명 안됨
    • IAM 역할은 프로그램 방식으로 배정
    • 자격 증명은 구성 가능한 기간 동안 임시임
    • 자격 증명은 만료되므로 교체해야 함

Last updated on