AWS 보안성 아키텍처

SangLog·2023년 9월 23일
1

정보 보안의 기본 목표는 데이터의 보호, 특히 해당 ㅔ이터를 저장한 리로스 보호와 해당 데이터에 대한 접근 보안이다.

데이터 보안을 위한 3가지 요소는 아래와 같다.

  • 기밀성(Confidentiality) : 특정 데이터에 접근 권한이 있는 사람만이 접근 할 수 있다. 데이터의 암호화와 ACL을 통해서 기밀성을 강화 할 수 있다.
  • 무결성(Integrity) : 데이터는 악의적으로 혹은 우연히 라도 변조가 되면 안된다. 암호화를 위한 해싱 및 로그 관리는 무결성을 검증하는 주요 도구이다.
  • 가용성(Availability) : 데이터를 필요로 하는 사람은 해당 데이터에 접속할 수 있어야한다.

신분 및 접근 권한 관리

AWS에서는 IAM 에서 제공하는 신분을 기준으로 AWS 콘솔에 접속하고 서비스를 관리할 수 있다. AWS의 자격인증(Credentials)은 각종 리소스에 접근할 수 있는 핵심 정보이다.

AWS 자격인증 정보 보호

AWS리소스에 접근하려는 사람은 누구나, 일련의 자격인증 정보를 이용해 접근권한을 확인 받아야한다. AWS 리소스에 대한 작업 권한 개체를 principal 이라 부르며 때론 이를 신분(identity)라 부르기도한다.

AWS의 권한 개체

  • 루트 유저
  • IAM 유저
  • IAM 롤

루트 유저는 AWS계정에 대한 무제한 접근권한 일반적 업무서 사용하지 않고
관리자 권한이 필요하다면 IAM 유저에 administratorAccess 권한을 부여해서 관리자 계정으로 사용하는것이 권장된다.
로그인 보안을 위해서는 MFA를 사용하는것이 권장된다.

프로그래밍 방식 접근이 필요한 경우 AWS API, CLI, SDK 등을 사용할 수 있으며 access ID와 Secret access key가 필요하다.

세분화된 권한부여

정보 보안의 근본적인 개념은 최소 권한부여 원칙이다. 이는 접근이 필요한 리소스에 대한 권한만 부여해야한다는 원칙이다. 이 원칙은 IAM 정책에 정의된 IAM principals를 통해 긴밀하게 구현될 수 있다.

IAM principals는 기본적으로 모든 개체의 접근을 허용하지 않는다.
IAM 유저 또는 롤은 IAM 정책을 통해 명시적으로 권한을 부여받아야만 하므로 IAM 정책은 ACL의 효과적인 구현 체계라 할 수 있다.

어드민은 유저에게 하나 이상의 정책을 작성해 principal에 명시하는 방식으로 권한을 부여한다. 정책에는 하나 이상의 permission이 포함되어 있으며 각 퍼미션에는 최소 다음 4가지 요소가 포함된다.

  • Effect : 리소스에 대한 액션의 허용 여부 결정(allow/deny)
  • Action/Operation : 각 AWS 서비스는 해당 리소스에 대한 작업 가능 요소인 액션 또는 작업 세트를 지닌다.
  • Resource : 액션 정의시 하나 이상의 리소스를 지정해야한다.
  • Condition : 퍼미션 부여를 위한 조건을 지정할 수 있다.

IAM 그룹은 principal 요소가 아니다. 그룹 자체로는 액션을 수행할 수 없으며, 그 속에 포함된 유저 단위로 또는 롤 기반으로 액션을 수행한다.

AWS 관리형 정책 (aws managed polices)

AWS 관리형 정책은 AWS가 제공하는 수백 종의 사전정의된 정책이며, 네트워크 관리자, 데이터베이스 관리자, 보안 감사담당자 등 전형적인 인프라 및 리소스 관리자의 업무 롤을 제공한다.

고객 관리형 정책 (customer-managed policy)

AWS 계정의 권한 개체에 추가할 수 있는 개별적이며 독립적인 정책이다.
최대 5개의 버전을 이용해 다양한 정책 변화를 반영하거나 이전 정책으로 되돌릴 수 있다.

인라인 정책 (inline policy)

인라인 정책은 IAM 권한 개체 또는 IAM 그룹에 포함돼 실행되는 정책이다.
AWS 관리형 정책과 고객 관리형 정책이 권한 개체에 독립적으로 존재할 수 있는것과 달리 특정 권한 개체의 일부로만 존재할 수 있다. 인라인 정책은 특정 정책을 매우 구체적인 대상에게 확실하게 적용해야. 할 때 특히 유용하다.

권한의 경계

특정 권한 개체의 접근을 허용하는 정책을 퍼미션 정책이라 부르며, 이러한 정책 속석을 이용해 권한의 경계를 정의할 수 있다.

권한의 경계는 다수의 퍼미션 정책을 부여하는 가운데 특정 권한 개체에게 지나치게 많은 권한이 부여되는것을 막는 장치로서 의미가 있다.

예를 들어 아래와 같이 EC2 서비스에 대한 모든 액션을 허용하는 정책을 생성한 뒤 이를 IAM 유저에게 부착한다

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

이후 이 유정에게 AWS 모든 접근 권한을 부여하는 Administrator Access 정책을 부여하더라도 해당 유저는 여전히 EC2에 대한 작업 권한만 지니게 된다.

권한의 경계 적용을 받는 유저는 더 높은 수준의 권한을 부여받더라도 권한의 경계를 벗어난 작업을 할 수 없게 되는 것이다.

롤은 패스워드나 엑세스 키를 사용하지 않는 IAM 권한 개체로 다를ㄴ 개체처름 접근 권한 정책 또는 권한 경계 속성을 지닐 수 있따.

IAM 유저 또는 AWS 리소스는 롤을 지닐 수 있고 롤과 연계된 권한을 상속받는다.

롤은 EC2 인스턴스에서 실행되는 애플리케이션에게 액세스 키 없이 특정 AWS 리소스에 대한 접근 권한을 부여할 때 편리하게 이용할 수 있다.

인스턴스 프로필

롤은 퍼미션 정책 외에도 트러스트 정책을 통해 어떤 AWS 리소스가 해당 롤을 지니고 있는지 설명할 수 있다.

즉 특정 DB에 접근 권한을 EC2가 가지고 있다고 하면 트러스트 정책을 통해 해당 롤에 EC2인스턴스에 대한 퍼미션이 있다는 사실을 증명해야한다.

트러스트 정책은 리소스 기반 정책의 일종으로 EC2접근 건한의 롤 생성시 IAM 은 자동으로 인스턴스 프로필과 동일한 이름의 롤을 생성한다. 이후 사용자가 인스턴스 프로필과 EC2 인스턴스를 연결하면 해당 롤에 인스턴스 퍼미션이 부여된다.

인스턴스와 인스턴스 프로필을 연계함으로 해당 인스턴스는 Security Token Service를 통해 엑세스 키, 시크릿 키, 세션 토큰등의 임시 접근 권한을 부여받게 딘다.

Security Token Service는 인스턴스 메타데이터에 임시 접근 권한을 저장한 뒤 6시간 마다 갱신한다.

롤 부여하기

롤을 생성한 뒤 어떤 IAM 유저에게든 롤을 부여할 수 있따. 롤을 부여받은 유저는 롤과 동일한 계정에 속해 있거나, 다른 계정에 속해 있을 수 있다.

Swith role 을 통해서 특정권한을 가진 롤에 접속하고 해당 기능을 사용할 수 있다.

서비스 레벨 보안 강화하기

IAM 과 같이 리소스에 대한 접근 제어를 위해 신분 기반 정책(identity-based policies) 을 정의하는 방법 외에도 일부 AWS서비스는 리소스 기반 정책(resource-based policies) 을 정의할 수 있다.

리소스 기반 정책은 신분 기반 정책만으로 제어할 수 없는 리소스 또는 서비스에 대한 접근 권한을 제공할 수 있다.

Key Management Service(KMS) 의 경우 사용자로 하여금 키 관리자 및 키 사용자를 지정하기 위한 키 정책을 정의하도록 한다.

탐지 제어

AWS는 클라우드 환경에서 발생하는 다양한 이벤트를 추적 및 기록하고, 리소스 침탈 시도 및 잠재적 위협을 경고하는 다양한 탐지 제어 기법을 제공한다.

CloudTrail

탐지 제어 에 있어 어떤 로그를 기록하고 이들 로그 정보를 어떻게 사용할지 결정하는 일이 무척 중요하다. CloudTrail은 AWS 계정에서의 각종 활동 로그를 기록한다.
활동 로그중에서 어떤 로그를 기록할지 기록하지 않을지도 결정 할 수 있다.

  • 관리이벤트 또는 데이터 이벤트 기록 혹은 둘다 기록
  • read-only 이벤트 또는 write-only 이벤트 기록 혹은 둘 다 기록
  • 모든 리소스 또는 특정 리소스만 기록
  • 모든 리전 또는 특정 리전만 기록
  • 글로벌 서비스 기록 여부

CloudTrail은 S3에 로그를 기록하므로 로그의 열람 및 삭제 제어를 위해 버킷 정책을 정의할 필요가 있다.

로그 기록에 대한 보안성 수준을 높이기 위해서는 추적 생성 시 SSE-KSM 암호화 기능 또는 로그 파일 무결성 검증 기능을 활성화한다.

CloudWatch Logs

CloudWatch Logs는 다수의 소스로부터 유입되는 로그를 수집해 저장 및 검색이 용이 하도록 한다. 아래와 같은 다양한 AWS서비스에서 로그가 유입된다.

  • CloudTail Logs
  • VPC Flow LOgs : vpc로 유입되거나 유출되는 트래픽 정보
  • RDS Logs
  • Route 53 DSN Queries
  • Lambda

Athena로 로그 검색하기

AWS는 CloudTrail log, VPC logs 등 여러 다양한 로그를 S3에 저장하며
Athena 는 SQl을 이용해 S3에 저장된 로그 데이터를 검색할 수 있도록 해준다.

CloudWatch logs에서 검색하는것과 다른것은 SQl을 통해서 내가 원하는 형식으로 포맷해서 보여주는 것이 가능하다는것이다.

Athena 는 SQL을 이용하므로 Cretate Table DDl 명령을 사용해서 데이터 구조를 정의해야한다.

여러 개의 로그 그룹을 Athena의 단일 데이터베이스에 임포트한 뒤 SQL JOIN명령을 이용해 관련성을 기준으로 데이터를 결합할 수 있다.

AWS Config 를 이용한 리소스 환경설정 감사

AWS Config 는 AWS계정 내 리소스의 환경설정 변경 사항을 모니터링하며, 경고 메시지를 전송한다.

이를 통해서 기업에서 정의한 바람직한 기준선과 현재 리소스 환경설정 내역을 비교할 수 있도록 AWS Config Rules를 정의 할 수 있다.

AWS Config Rules 는 비정상적이거나 의심스러운 환경설정 상태를 정의할 수 있으며 이런 상태를 좀 더 집중적으로 관찰 및 분석할 수 있다.

AWS Config가 제공하는 리소스 환경설정 타임라인을 확인하면 해당 리소스가 변경 되었을때마다의 상황을 타임스탬프로 보여준다. 즉 환경설정 전과 후를 비교해 변경 내역의 관련성을 명확하게 파악할 수 있다.

AWS GuardDuty

AWS GuardDuty는 VPC flow logs, Route 53 DNS query logs등 로그를 분석해 악성 IP 주소 및 도메인 네임 그리고 악의적인 행독을 탐색한다.

GuardDuty가 잠재적인 보안 위협을 탐지하면 위협 탐지 또는 파인딩 노티피케이션을 생성해 관련 요소의 세부 사항을 전달한다.

위혐 탐지 타임 분류

  • Backdoor : EC2 인스턴스가 악성 코드에 감염돼 DDos 자원 등으로 활요되고 있으믈 나타낸다.
  • Behavior : EC2 인스턴스가 일반적으로 사용하지 않는 프로토콜 또는 포트를 통해 통신하거나 외부 호스트에 비정상적으로 대량의 트래픽을 전송했음을 나타낸다.
  • Cryptocurrency : EC2 인스턴스가 Bitcoin 노드로 활용되고 있음을 나타낸다.
  • Pentest : 시스템이 모의 해킹 또는 침투 테스트에 사용되는 시스템을 실행하는 경우.
  • Persistence : 작업 이력에 존재하지 않는 IAM 유저가 유저, 리소스 퍼미션 등을 수정했음을 의미한다.
  • Policy : 루트 유저 권한이 사용되었거나, S3의 퍼블릭 액세스 차단 기능이 해제되었음을 의미한다.
  • Recon : 정찰 공격이 진행 중임을 나타낸다. 악성 IP 주소가 보안 그룹이나 네트워크 ACL이 설정되지 않은 포트를 통해 EC2 인스턴스에 접근하거나 관련 내역을 탐색했음을 의미한다.
  • ResourceConsumption : 작업 이력이 존재하지 않는 IAM 유저가 EC2 인스턴스 등의 리소스를 생성했음을 의미한다.
  • Stealth : 패스워드 정책이 약화되거나, CloudTrail 로그 기록이 삭제된 경우 등
  • Trojan : Ec2 인스턴스에 Trojan 악성코드가 설치됐을 가능성이 있음을 의미한다.
  • UnauthorizedAccess : AWS리소스에 대해 API 호출 또는 콘솔 로그인을 통한 비인가 접근 시도가 있었음을 의미한다.

이러한 위혐 탐지 결과가 나오면 관리자는 악성코드를 제거하거나 해당 인스턴스를 폐기하고 새 인스턴스를 만들거나, 아니면 노출된 자격인승서를 폐기하고 새 인증서를 발급하는 등의 행동을 취해야한다.

Amazon Inspector

Amazon Inspector 는 EC2 인스턴스에 대한 침해 행위를 탐지하는 에이전트 기반 서비스이다. Inspector 에이전트는 인스턴스 자체의 네트워크, 파일 시스템, 프로세스 활동의 적절성을 분석한다.

Inspcetor는 하나 이상의 룰 패키지와 에이전트가 수집한 인스턴스 사용 내역을 비교해 위협 요소의 존재 여부를 판단한다.

Amazon Inspector 룰 패키지

  • 보편적인 보안 위협 및 기밀노출
  • 인터넷 보안 벤치마크 센터
  • 보안성 베스트 프랙티스
  • 런타임 동작 분석
  • 네트워크 연결의 적절성

보안 검증을 수행한 후 Inspector는 문제의 심각성 수준에 따라 다음과 같은 단계로 주의 목록을 제공 한다.

  • High : 해당 문제를 즉시 해결해야하는 수준
  • Medium : 해당 문제를 조만간, 가능한 시점에 해결해야 하는 수준
  • Low : 해당 문제점을 원할 떄 해결하면 되는 수준
  • Informational : 현재 문제는 없는것으로 판단되지만 요직의 요구 수준에 따라 관련 사항을 수정 또는 보완하면 되는 수준

Amazon Detective

Amazon Detective는 VPC flow logs, CloudTrail 등으롭터 정보를 수집해 이를 그래프 데이터베이스에 저장한다.

보안 관리자는 그래프 모델을 이용해 AWS리소스와 관계된 의심스러운 행동 또는 흥미로운 행동을 식별하고 서로의 관련성을 파악할 수 있다.

Detective를 이용해 이벤트 간의 관련성을 파악하고, 하나의 이벤트가 특정 리소스에 어떤 영향을 미치는지도 분석할 수 있다.

Security Hub

Security Hub는 우리가 사용하는 전체 AWS환경의 보안 상태를 한자리에서 보여주는 서비스이다.
또한 보안 상태와 AWS 보안 베스트 프랙티스 및 PICDSS(Payment card industry data security standard)를 비교할 수 있게 해준다.

Amazon Fraud Detector

기업의 데이터 유형 및 위험 허용수준에 맞춰 조정할 수 있는 사기 행위 감지 서비스로, 판매자 가장 사기, 가짜 계정, 온라인 지불 사기 등을 감지 할 수 있도록 돕는다.

AWS Audit Manager

AWS Audit Manger는 클라우드 리소스의 사용량 및 제어 수준을 평가하고 이에 대한 감사 보고서를 생성할 수 있는 서비스다.
감사 목록에는 우리의 비즈니스 요구사항을 추가하거나 AWS리소스 구성에 대한 요구 사항을 적용하는 방식도 지정할 수 있다.

네트워크 경계 보호하기

네트워크는 해킹 등 공격에 대한 1차 방어선이며 모든 AWS 서비스는 네트워크를 통해 제공된다. AWS 인프라 설계시 AWS리소스와 외부 리소스, 유저가 서로 어떤 방식으로 소통할 것인지를 고려해야 한다.

다수의 AWS서비스는 인터넷에 접근가능한 엔드포인트를 제공한다.
이들 엔드포인트에 대한 보안 책임은 AWS측에 있다.
사용자는 VPC에 배포한 EC2인스턴스, RDS등에 대한 보안을 책임지고 네트워크를 관리하게 된다.

NACL과 보안그룹

VPC에서 리소스는 서브넷을 통해 제공된다 NACL(network access control lists)는 서브넷으로 유입 또는 서브넷에서 유출되는 트래픽을 정의한다.

보안그룹은 EC2인스턴스와 ELB리스너 등 개별 리소스에 대한 유입 및 유출 트래픽을 정의한다.

NACL과 보안그룹 설정시 AWS리소스에 대한 접근 가능 여부를 오직 프로토콜과 포트로만 정의할 수 있다. 이떄 우리의 조직 보안 요구 조건에 맞춰 특정 IP 주소 범위로만 해당 리소스에 접근하도록 할 수 있따.

네트워크 보안 설계시 인터넷을 통해 어떤 리소스에 접근하도록 할 것인지 고려해야 한다. VPC는 인터넷 게이트웨이를 통해 특정 리소스에 접근할 수 있도록한다.
각 서브넷에 부착된 라우트 테이블 또한 기본 라우트 타겟으로 인터넷 게이트웨이를 설정해야 한다.

AWS WAF

웹 애플리케이션 방화벽 또는 WAF(web application firewall)은 애플리케이션 로드 밸런서 또는 CloudFront 배포에 대한 HTTP 및 HTTPS 요청을 모니터링 하며, 서비스 거부 공격 또는 비인가 접근으로부터 애플리케이션을 보호한다.

WAF는 CSS공격, SQL주입, 비정상적인 장문의 쿼리 문자열 공격등 애플리케이션 트래픽에 포함된 각종 악의적인 징후를 감지한다.

또한 WAF는 소스 IP주소 패턴 또는 지리적 위치에 따라 특정 트래픽을 차단할 수 있다.

AWS Shield

인터넷과 연결된 애플리케이션이라면 어떤 것이든 DDOS 공격을 받을 가능성이 있다 AWS Shield는 DDos공격으로 부터 우리를 보호하며
Standard와 Advanced 두가지 타입이 있다.

Shield는 5분 이내에 DDos 공격의 99%를 무력화 할 수 있다.

AWS Firewall manager

AWS Organizations 전반에 걸쳐 적용될 수 있는 일관된 보안 규칙 세트를 구성 및 적용할 수 있도록 돕는 서비스다.

보안 그룹 규칙, AWS Network Firewalls, DNS방화벽 규칙 등 다양한 보안서비스 규칙의 관리를 돕는다.

특정 보안 구성을 조직의 리소스 전역에 적용할 때 특히 유용하다.

데이터 암호화

데이터 암호화는 정확한 키를 이용한 복호화 없이는 데이터를 읽을 수 없도록 만들어서 데이터의 기밀성을 보장한다. 일단 암호화된 원본 데이터는 수정이 불가능하다.

저장중인 데이터

AWS에서 데이터는 S3, EBS,EFS,RDS 중에 속해 있으며 이들 서비스는 암호화 키 관리 서비스인 KMS와 통합적으로 사용할 수 있으며, 고객이 관리하는 CMK(최대한의 통제권 가질 수 있음) 혹은 aws가 관리하는 CMK 중 하나를 키로 적용할 수 있다.

S3 데이터 암호화

S3버킷의 암호화 옵션

  • SSE-S3 : S3관리형 Key를 이용한 서버 측 암호화
  • SSE-KMS : KMS 관리형 Key를 이용한 서버 측 암호화
  • SSE-C : 고객 제공 key를 이용한 서버측 암호화
  • CSE : 클라이언트 측 암호화

암호화는 버킷이 아닌 객체 단위로 적용이 되기때문에 하나의 버킷 내에서 서로다른 암호화 옵션을 적용하거나 아예 암호화를 하지 않을 수 도 있다.

버킷 레벨에 기본 암호화를 적용할 경우 이미 버킷에 들어있는 기존 객체에 암호화가 적용되지 않고 해당 객체에 새로 추가되는 객체에만 암호화가 적용된다.

EBS 볼륨 데이터 암호화

KMS 관리형 키를 이용해 EBS 볼륨을 암호화 할 수 있으며, 볼륨의 생성 단계부터 암호화 할 수있다.
but 이미 존재하던 비암호화 스냅샷 또는 비암호화 AMI로 생성하는 볼륨은 생성 단계에서 바로 암호화를 할 수 없기 때문에 우선 비암호화 볼름으로 스냅샷을 생성한뒤 해당 스냅샷을 암호화 해야한다.

EFS 암호화

EFS 파일 시스템 생성 시에도 암호화 기능을 활성화 할 수 있다. EFS 암호화에서 파일 암호화에는 KMS 고객 마스터 키를 사용하고, 파일 및 디렉토리 이름과 같은 파일 시스템 메타데이터의 암호화에는 EFS 관리형 키를 사용한다.

이동중인 데이터

이동중인 데이터의 암호화에는 TLS(Transport Layer Security)인증서가 사용된다.
Amazon Certificate Manger(ACM)을 이용해 TLS 인증서를 생성한 뒤 애플리케이션 로드 밸런서 또는 CloudFront 배포에 인증서를 설치하면 된다.

Macie

Macie는 S3버킷에 저장된 민감한 데이터를 자동으로 분류하고 데이터의 위치를 알려주는 서비스이다. 데이터가 다른 서비스 속에서 어떻게 활용되고 있는지를 보여준다.

profile
기록 쌓기

0개의 댓글