AWS 보안 및 암호화

jisoolee·2023년 6월 7일
0

AWS Associate Developer

목록 보기
26/27

Why encryption?

Encryption flight(SSL)

: 전송 중 암호화에서 데이터는 전송 전에 암호화되고 서버에서는 수신 후에 암호화를 해독한다. 하지만 이 방법은 본인과 서버만 알고 있다. 그래서 SSL 인증서로 암호화를 하고 이를 확인할 수 있는 또다른 방법은 HTTPS가 있다.

Server side encryption at rest

: 서버에서 데이터를 수신한 후에 암호화한다.

  • 서버는 데이터를 디스크에 저장하는데 암호화된 형식으로 저장한다.

Client side encryption

: 데이터는 서버에 저장되지만 서버는 데이터의 의미를 알지 못한다.

AWS KMS(Key Management Service)

  • CloudTrail을 통해 키를 사용하기 위해 수행된 모든 API 호출을 검사할 수 있다.
  • 기본적으로 KMS는 직접 사용할 수도 있는데 기밀 정보가 있는 경우 일반 텍스트 즉, 있는 그대로 코드에 저장해서는 안 된다.
  • KMS에서 AWS Managed Service 키를 사용할 수 있으므로 자체 KMS 키를 생성할 필요가 없다.

KMS Keys Types

Symmetric(AES-256 keys)

: 데이터를 암호화하고 복호화하는 데 오직 하나의 키가 사용된다.

Asymmetric(RSA & ECC key pairs)

: 데이터 암호화에 사용되는 공개 키와 복호화에 사용되는 개인 키가 있다.

Copying Snapshots acress regions

KMS Key Policies

Default KMS Key Policy

: 특정한 사용자 지정 KMS 키 정책이 제공되지 않는 경우에 생성된다.

Custom KMS Key Policy

: KMS 키에 액세스할 수 있는 사용자, 역할을 정의하고 키를 관리할 수 있는 사람을 정의할 수 있다.

  • 암호화된 스냅샷을 여러 계정에 복사하려는 경우
    1. KMS 키로 암호화된 스냅샷을 생성한다(고객 관리형 키를 생성).
    1. KMS 키 정책을 추가하여 교차 계정 접근 권한을 부여한다.
    2. 암호화된 스냅샷을 대상 계정과 공유한다.
    3. 대상 계정에서 스냅샷 복사본을 생성하여 해당 계정의 다른 고객 관리 키로 암호화한다.
    4. 대상 계정의 스냅샷에서 볼륨을 생성한다.

API - Encrypt and Decrypt

Encrypt

: 4KB 이상의 데이터를 암호화할 때 사용한다.

Decrypt

: 4KB 이하의 데이터를 해독할 때 사용한다.

GenerateRandom

Envelope Encryption

: 4KB 이상을 암호화하려면 봉투를 사용해서 암호화하는 방법이 있다.

  • 크기가 큰 파일을 암호화할 때 GenerateDataKey API를 사용한다.
  • GenerateDataKeyWithoutPlaintext

Encryption SDK

  • Data Key Caching: 데이터 키를 매번 오브젝트를 암호화할 때마다 다시 생성하는 게 아니라 재사용한다.

KMS Request Quotas

: 암호화나 해독에 있어 KMS의 요청 할당량을 초과하게 되면 ThrottlingException이 난다.

  • 이런 경고에 대처하는 법은 지수 백오프 전략을 사용한다.
  • GenerateDataKey를 사용하고 있다면, DEK 캐싱을 사용한다.
  • 다른 방법은 제한을 여러 번 초과할 경우를 대비해 요청 할당량을 늘린다(API 호출이나 AWS 고객센터 문의를 통해 가능).

S3 Bucket Key for SSE-KMS encryption

: SSE-KMS 유형 암호화를 상용해 S3로부터 KMS로 보내지는 API 호출의 양을 99% 감소시킬 수 있다.

  • CloudTrail 내에 KMS 관련 CloudTrail 이벤트의 수가 줄어들고 KMS 비용 또한 대폭 낮아진다.

CloudHSM

: 'HSM'이라는 암호화 하드웨어를 통해 보안 모듈을 프로비저닝한다.

  • S3에서 SSE-C 유형의 암호화를 구현하고자 할 때 아주 적절한 선택지이다.
  • 외부에서 비대친 키를 가져오는 건 CloudHSM에서만 할 수 있다.

High Availability

: CloudHSM 클러스터는 가용성이 매우 높다. 여러 가용 영역에 분산되어 있어 고가용성을 갖는다.

Integration with AWS Services

: KMS에서 KMS 사용자 지정 키 스토어를 CloudHSM으로 지정하면 KMS를 통해 CloudHSM 기능을 사용할 수 있다.

SSM Parameter Store

: 구성 및 보안 암호를 안전하게 보관하기 위한 저장소

  • SSM 파라미터 스토어는 비밀을 저장하는 데 사용할 수 있으며 버전 추적 기능이 내장되어 있다. 파라미터 값을 편집할 때마다 SSM Parameter Store는 파라미터의 새 버전을 생성하고 이전 버전을 유지한다. 매개변수 기록에 있는 모든 버전의 값을 비롯한 세부정보를 볼 수 있다.

SSM Parameter Store Hierarchy

Parameters Policies

AWS Secrets Manager

: 암호 위주의 서비스이며 매 X일마다 암호가 순환하도록 강제할 수 있다.

  • Secrets Manager를 RDS와 통합하여 데이터베이스와 Secrets Manager 사이에서 암호를 동기화할 수도 있다.

CloudFormation Integration RDS & Aurora

  • ManageMasterUserPassword: true - RDS에 의해 자동으로 보안 암호가 생성된다.

CloudFormation - Dynamic Reference

: CloudFormation에서 시크릿 매니저로 자격 증명(보안 암호)을 생성한 다음 동적으로 참조한다.

SSM Parameter Store vs Secrets Manager

  • Secrets Manager($$$): 람다 함수를 이용해서 암호의 순환을 자동화할 수 있다.
  • SSM Parameter Store($): 조금 더 다용도로 사용이 가능하며 비용이 더 저렴하다.

CloudWatch Logs - Encryption

  • associate-kms-key: KMS 키를 기존의 로그 그룹과 연결하는 명령어
  • create-log-group: 아직 존재하지 않는 로그 그룹을 생성해 KMS 키와 바로 연결

CodeBuild Security

: CodeBuild는 VPC 외부에 있지만 VPC 리소스로의 액세스를 위해 CodeBuild를 VPC 내부에서 실행할 수 있다.

  • 암호를 CodeBuild 환경 변수 내에서 평문으로 저장해서는 안 된다.

AWS Nitro Enclaves

: 민감 데이터를 처리하는 앱에서 공격에 노출되는 면을 줄일 수 있다.

  • 암호화 증명을 사용하여 인증받은 코드만 엔클레이브에서 실행되도록 할 수 있다.

0개의 댓글