학습 목표

AWS KMS — 키를 누가 쥐는가 SAA 빈출

AWS Key Management Service(KMS)는 암호화 키를 만들고 보관하고 사용을 통제하는 서비스입니다. SAA에서 KMS가 중요한 이유는 암호 알고리즘 때문이 아닙니다. 키에 대한 접근 권한이 곧 데이터에 대한 접근 권한이 되므로, KMS 키 하나가 버킷 정책이나 보안 그룹과 같은 수준의 접근 통제 장치가 되기 때문입니다.

키 종류 세 가지

KMS API는 키의 관리 주체를 KeyManager 값으로 AWS와 CUSTOMER 두 가지로만 표현합니다. 실무와 시험에서 쓰는 구분은 여기에 AWS 소유 키를 더한 세 가지입니다. 차이는 하나입니다 — 키 정책을 우리가 편집할 수 있는가입니다.

KMS 키 세 종류의 통제 범위와 접근을 결정하는 세 겹 위쪽은 KMS 키 세 종류를 고객이 제어할 수 있는 범위 축 위에 왼쪽부터 놓은 그림입니다. AWS 소유 키는 AWS 가 여러 계정에서 공용으로 쓰며 계정 안에서 조회조차 되지 않아 제어 범위가 없습니다. AWS 관리형 키는 서비스가 계정 안에 자동으로 만들고 aws 로 시작하는 별칭이 붙으며, 사용 내역은 볼 수 있지만 키 정책은 편집할 수 없습니다. 고객 관리형 키만 우리가 CreateKey 로 직접 만들고 키 정책, 별칭, 자동 교체, 비활성화, 삭제 일정, 교차 계정 공유를 모두 통제합니다. 그 아래 띠는 자동 교체의 경계입니다. 앞의 두 종류는 교체 주기를 AWS 가 정하고, 고객 관리형 키에서만 자동 교체를 직접 켜고 끄며 주기를 지정할 수 있습니다. 아래쪽은 접근 결정 구조입니다. 키 정책, IAM 정책, 권한 부여 세 겹이 함께 판정하며 세 갈래 화살표가 하나의 결론으로 모입니다. 키 정책은 모든 KMS 키에 반드시 하나 붙어 있고, 키 정책이 허용하지 않으면 IAM 정책만으로는 그 키를 쓸 수 없다는 것이 이 그림의 결론입니다. 키 종류 — 고객이 제어할 수 있는 범위 AWS 소유 키 만드는 주체 AWS · 여러 계정 공용 우리가 할 수 있는 것 없음 계정에서 조회되지 않습니다 AWS 관리형 키 만드는 주체 서비스가 자동 생성 alias/aws/s3 우리가 할 수 있는 것 사용 내역 조회만 가능 고객 관리형 키 만드는 주체 우리가 CreateKey 로 우리가 할 수 있는 것 키 정책 · 별칭 · 비활성화 삭제 일정 · 교차 계정 공유 제어 범위 없음 전부 통제 자동 교체를 켤 수 있는 경계 AWS 가 알아서 교체 AWS 가 자동 교체 직접 켜고 주기 지정 키 접근은 세 겹이 함께 결정합니다 키 정책 키마다 반드시 하나 IAM 정책 호출자에게 붙는 권한 권한 부여 (grant) 한시적 위임 세 겹을 모두 통과해야 이 KMS 키를 쓸 수 있습니다 키 정책이 허용하지 않으면 IAM 정책만으로는 접근할 수 없습니다
KMS 키 종류를 제어 가능 범위에 따라 배치한 그림 — AWS 소유 키는 계정 안에서 보이지도 않고, AWS 관리형 키는 보이지만 키 정책을 편집할 수 없으며, 고객 관리형 키만 키 정책 · 별칭 · 교체 · 삭제 일정을 직접 통제합니다. 접근 허용은 키 정책 · IAM 정책 · 권한 부여(grant) 세 겹이 함께 결정합니다
KMS 키 종류 세 가지와 통제 범위
키 종류 누가 만드는가 우리가 할 수 있는 것 고르는 신호
AWS 소유 키 AWS가 여러 계정에서 공용으로 씁니다 없음 — 계정에서 조회되지도 않습니다 암호화가 서비스 기본 동작으로 이미 걸려 있고 별도 요구가 없는 경우
AWS 관리형 키 서비스가 우리 계정 안에 자동으로 만듭니다(aws/s3처럼 별칭이 붙습니다) 사용 내역을 조회할 수 있지만 키 정책을 편집할 수 없습니다 서비스 콘솔에서 "KMS 키로 암호화"만 켜면 되는 경우
고객 관리형 키 우리가 CreateKey로 만듭니다 키 정책 · 별칭 · 자동 교체 · 비활성화 · 삭제 일정 · 교차 계정 공유 전부 키 정책으로 접근을 제한 · 교차 계정 공유 · 교체 주기 지정 · 키 폐기로 데이터를 무력화

봉투 암호화와 데이터 키

KMS는 큰 데이터를 직접 암호화하지 않습니다. KMS의 Encrypt 작업은 API 문서에 명시된 대로 최대 4,096바이트까지만 처리합니다. 데이터베이스 비밀번호나 식별자 정도가 그 크기입니다.

그래서 실제 암호화는 두 겹으로 이뤄집니다. KMS에게 데이터 키(data key)를 만들어 달라고 하면 GenerateDataKey가 평문 데이터 키와 KMS 키로 암호화된 데이터 키를 함께 돌려줍니다. 애플리케이션은 평문 데이터 키로 데이터를 암호화한 뒤 평문 키를 메모리에서 지우고 암호문 키를 데이터 옆에 저장합니다. 이 구조가 봉투 암호화(envelope encryption)입니다.

KMS 봉투 암호화의 처리 순서 애플리케이션 쪽과 AWS KMS 쪽을 두 세로 레인으로 나누고, 봉투 암호화를 여덟 단계로 번호 붙여 보여 줍니다. 암호화는 다섯 단계입니다. 애플리케이션이 KMS 키를 지정해 GenerateDataKey 를 호출하면, KMS 가 데이터 키를 만들어 평문 데이터 키와 그 KMS 키로 암호화한 데이터 키 두 벌을 함께 돌려줍니다. 애플리케이션은 평문 데이터 키로 데이터를 암호화하고, 평문 데이터 키를 즉시 메모리에서 폐기한 다음, 암호문 데이터와 암호문 데이터 키를 함께 저장합니다. 복호화는 역순 세 단계입니다. 저장해 둔 암호문 데이터 키를 KMS 에 보내 Decrypt 를 호출하면 키 정책 검사를 거쳐 평문 데이터 키가 돌아오고, 그 키로 데이터를 복호화한 뒤 다시 평문 키를 폐기합니다. 오른쪽 설명 상자가 가리키는 결론은, 데이터 본체가 애플리케이션 쪽에서만 처리되어 KMS 를 한 번도 통과하지 않는다는 점입니다. KMS 의 Encrypt 작업이 직접 다루는 크기가 최대 4,096 바이트뿐이므로 대용량 데이터는 이 구조로만 암호화할 수 있습니다. 애플리케이션 · 고객 환경 AWS KMS 암호화 1 GenerateDataKey 호출 KMS 키 지정 데이터 키 생성 2 평문 데이터 키 암호문 데이터 키 두 벌을 함께 반환 3 평문 키로 데이터 암호화 4 평문 데이터 키 즉시 폐기 5 암호문과 암호문 키를 함께 저장 데이터 본체가 지나는 곳 암호화와 복호화 연산은 전부 이 레인 왼쪽에서만 일어납니다 대용량 데이터는 KMS 를 한 번도 통과하지 않습니다 복호화 — 역순 6 저장된 암호문 데이터 키 전송 Decrypt 키 정책 · IAM 검사 7 평문 데이터 키를 되받음 평문 데이터 키 반환 8 복호화 후 평문 키 다시 폐기 여기서도 데이터는 로컬 처리 평문 데이터 키는 메모리에만 잠깐 존재하고, 데이터 본체는 KMS 를 통과하지 않습니다 KMS 의 Encrypt 가 직접 다루는 크기는 최대 4,096 바이트입니다
봉투 암호화의 순서 — KMS가 평문 데이터 키와 암호화된 데이터 키를 함께 반환하고, 애플리케이션이 평문 키로 데이터를 암호화한 뒤 평문 키를 폐기하고 암호문 키만 데이터와 함께 저장합니다. 복호화는 암호문 키를 KMS에 보내 평문 키를 되받는 역순이며, 대용량 데이터 자체는 한 번도 KMS를 통과하지 않는다는 것이 이 구조의 핵심입니다
envelope-encrypt.sh — 데이터 키를 발급받아 로컬에서 암호화 (키 ID와 리전은 예시입니다)
# 1) 평문 데이터 키와 암호화된 데이터 키를 함께 받습니다.
aws kms generate-data-key \
  --key-id alias/app-data \
  --key-spec AES_256 \
  --encryption-context purpose=invoice-archive \
  --query '{plaintext:Plaintext,wrapped:CiphertextBlob}'

# 2) Plaintext 로 파일을 암호화하고, 그 값은 즉시 버립니다.
# 3) CiphertextBlob 만 암호문 옆에 보관합니다.

# 복호화할 때는 보관해 둔 CiphertextBlob 을 KMS 에 되돌려 평문 키를 받습니다.
aws kms decrypt \
  --ciphertext-blob fileb://wrapped-data-key.bin \
  --encryption-context purpose=invoice-archive \
  --query 'Plaintext'

예제의 --encryption-context는 암호화할 때 지정한 값과 대소문자까지 정확히 같은 값을 복호화할 때 다시 줘야 합니다. 다르면 요청이 거부됩니다. 키 정책의 조건 키로도 쓸 수 있어서 "이 컨텍스트로만 복호화를 허용한다"는 통제를 만들 수 있습니다.

키 정책과 IAM 정책 — 두 개가 함께 결정한다

KMS 키에는 키 정책(key policy)이라는 리소스 기반 정책이 반드시 하나 붙어 있습니다. 여기가 2장에서 다룬 리소스 기반 정책과 다른 점이 하나 있습니다. 키 정책이 비어 있으면 IAM 정책만으로는 키를 쓸 수 없습니다. 키 정책이 먼저 계정이나 주체에게 권한 위임을 열어 줘야 IAM 정책이 의미를 갖습니다.

접근을 결정하는 장치는 실제로 세 겹입니다.

key-policy.json — 계정에 관리 권한을 위임하고 사용 주체를 좁힌 키 정책 뼈대 (계정 ID는 예시입니다)
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "EnableIAMPoliciesForAdmins",
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::123456789012:root" },
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "AllowApplicationRoleToUseTheKey",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:role/InvoiceServiceRole"
      },
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "kms:EncryptionContext:purpose": "invoice-archive"
        }
      }
    }
  ]
}

첫 번째 문장이 계정 루트를 주체로 쓰는 것은 루트 사용자에게 권한을 준다는 뜻이 아니라, 이 계정의 IAM 정책이 키에 대해 발언권을 갖도록 위임한다는 관용 표현입니다. 이 문장을 빼면 키를 만든 사람 외에는 아무도 키를 관리할 수 없게 되고, 키 정책을 잘못 저장하면 되돌릴 방법이 사라집니다.

키 교체

KMS의 자동 교체는 키 재료(key material)를 새로 만들고 이전 재료를 보관하는 방식입니다. 키 ID와 ARN, 별칭은 그대로이므로 애플리케이션은 아무것도 바꾸지 않아도 되고, 예전 재료로 암호화된 데이터도 계속 복호화됩니다.

키 종류별 자동 교체 동작 (KMS API 문서 기준)
키 종류 자동 교체 주기
고객 관리형 키 켜고 끌 수 있습니다 켜면 기본적으로 활성화 시점으로부터 1년(약 365일) 뒤 교체되고 이후 매년 반복됩니다. RotationPeriodInDays로 다른 주기를 지정할 수 있습니다
AWS 관리형 키 켜고 끌 수 없습니다 KMS가 매년 자동으로 교체합니다
AWS 소유 키 해당 없음 키를 소유한 AWS 서비스가 관리합니다

자동 교체에는 범위 제한이 있습니다. API 문서는 대칭 암호화 KMS 키에서만 지원되며 비대칭 키 · HMAC 키 · 키 재료를 가져온(imported) 키 · 사용자 지정 키 스토어의 키에는 자동 교체를 켤 수 없다고 명시합니다. 키 재료를 직접 가져온 키는 새 재료를 다시 가져오는 방식으로 교체합니다.

키 삭제는 되돌릴 수 없다

ScheduleKeyDeletion은 즉시 삭제하지 않고 대기 기간을 둡니다. API 문서 기준으로 기본 30일이며 7일에서 30일 사이로 지정할 수 있습니다. 대기 중에는 키 상태가 PendingDeletion이 되어 어떤 암호화 작업에도 쓸 수 없고, 기간이 끝나기 전이면 취소할 수 있습니다.

기간이 지나 실제로 삭제되면 그 키로 암호화된 데이터는 복구할 수 없습니다. 그래서 "키를 지워 데이터를 무력화한다"는 것이 규정 준수 시나리오의 정답이 되기도 하고, 반대로 사고의 원인이 되기도 합니다. 단순히 쓰지 못하게 막는 것이 목적이라면 삭제가 아니라 DisableKey가 맞습니다.

다중 리전 키와 별칭

기본적으로 KMS 키는 단일 리전 자원이며 리전 밖으로 나가지 않습니다. 그래서 리전 A에서 암호화한 데이터를 리전 B에서 읽으려면 보통 복호화 후 재암호화가 필요합니다. 다중 리전 키(multi-Region key)는 이 왕복을 없애기 위한 예외입니다.

별칭(alias)은 키에 붙이는 사람이 읽을 수 있는 이름입니다. 계정과 리전 안에서 고유하고, 키 하나에 여러 별칭을 붙일 수 있으며, 별칭이 가리키는 키를 나중에 바꿀 수도 있습니다. 코드에 키 ID 대신 alias/app-data를 쓰면 키를 교체해도 코드를 고치지 않아도 됩니다.

AWS CloudHSM과의 차이

AWS CloudHSM은 전용 하드웨어 보안 모듈을 우리 VPC 안에 배치하는 서비스입니다. KMS와 겹쳐 보이지만 판단 기준은 명확합니다 — 규정이 "단독 점유 HSM"이나 "AWS도 접근할 수 없는 키"를 요구하는가입니다.

AWS KMS와 AWS CloudHSM 비교
항목 AWS KMS AWS CloudHSM
형태 완전 관리형 · 멀티테넌트 고객 전용 HSM 클러스터 · VPC 안에 배치
운영 부담 낮음 — 가용성과 백업을 AWS가 처리 높음 — 클러스터 구성 · 사용자 관리 · 백업을 직접
AWS 서비스 통합 S3 · EBS · RDS 등 광범위 직접 통합은 제한적. KMS의 사용자 지정 키 스토어로 연결해서 씁니다
고르는 신호 "저장 데이터를 암호화하고 키 사용을 감사한다" "전용 HSM", "FIPS 검증 하드웨어를 단독으로", "AWS가 키에 접근할 수 없어야 한다"

KMS 키의 재료 출처(Origin)에 AWS_CLOUDHSM과 EXTERNAL_KEY_STORE가 있는 것이 이 연결 관계를 보여 줍니다. 즉 둘은 대체재라기보다, CloudHSM을 KMS 뒤에 두는 조합이 실제 구성입니다.

저장 데이터 암호화 — 서비스별 선택지

"저장 데이터를 암호화한다"는 요구는 거의 모든 서비스에서 만족시킬 수 있습니다. 그래서 문항은 암호화 여부가 아니라 어떤 방식으로 암호화하는가를 갈림길로 씁니다. 기준은 두 가지입니다 — 키를 누가 쥐는가와 키 사용 증적이 남는가입니다.

Amazon S3의 네 가지 서버 측 암호화

Amazon S3 서버 측 암호화 방식과 선택 기준
방식 키 관리 주체 이 방식을 고르는 신호
SSE-S3 Amazon S3가 관리(AES-256) 암호화 요구는 있지만 키 관리 요구가 없는 경우. 신규 객체에 자동으로 적용되는 기본값입니다
SSE-KMS AWS KMS 키(AWS 관리형 또는 고객 관리형) 키 사용을 감사해야 하거나 키 정책으로 접근을 따로 통제해야 하는 경우. KMS 호출이 AWS CloudTrail에 남습니다
DSSE-KMS AWS KMS 키 — 이중 계층 규정이 이중 암호화를 명시적으로 요구하는 경우
SSE-C 고객이 요청마다 키를 제공 키를 AWS에 맡길 수 없는 경우. AWS가 키를 저장하지 않으므로 키를 잃으면 데이터를 복구할 수 없습니다

다른 서비스의 암호화 옵션

서비스별 저장 데이터 암호화 방식과 주의할 점
서비스 암호화 방식 주의할 점
Amazon EBS 볼륨 단위로 KMS 키를 지정합니다. 스냅샷과 그 스냅샷에서 만든 볼륨도 암호화 상태를 이어받습니다 암호화되지 않은 볼륨을 제자리에서 암호화할 수 없습니다. 스냅샷을 만들어 암호화 옵션을 켜고 복사한 뒤 새 볼륨을 만드는 경로를 씁니다(6장)
Amazon RDS DB 인스턴스 생성 시 KMS 키로 저장 데이터를 암호화합니다 암호화는 생성 시점에 결정됩니다. 기존 인스턴스를 나중에 켜려면 스냅샷을 암호화해 복원해야 합니다(10장)
Amazon DynamoDB 저장 데이터가 기본적으로 암호화되며 키 종류를 고를 수 있습니다 "DynamoDB를 암호화해야 한다"는 요구는 이미 충족되어 있습니다. 갈림길은 어떤 키를 쓰는가입니다
Amazon EFS · Amazon FSx 파일 시스템 생성 시 KMS 키를 지정합니다 전송 중 암호화는 마운트 옵션으로 따로 켭니다(9장)
Amazon SQS · Amazon SNS KMS 키로 메시지를 서버 측 암호화합니다 생산자와 소비자 양쪽 역할이 키 사용 권한을 갖고 있어야 합니다(12장)

AWS Certificate Manager — 인증서를 어디에 붙이는가

AWS Certificate Manager(ACM)는 퍼블릭 TLS 인증서를 발급하고 자동으로 갱신합니다. SAA에서 ACM이 나오는 자리는 거의 언제나 전송 중 암호화와 TLS 종료 지점입니다.

발급과 검증

퍼블릭 인증서를 요청하면 도메인 소유를 증명해야 합니다. API 문서가 인정하는 방법은 DNS 검증과 이메일 검증이며, AWS는 DNS 검증을 권장합니다. DNS 검증은 지정된 CNAME 레코드를 도메인에 한 번 넣어 두면 이후 갱신도 자동으로 이뤄지기 때문입니다. Amazon Route 53을 쓰면 레코드 생성까지 콘솔에서 처리됩니다. 프라이빗 CA로 발급하는 프라이빗 인증서는 도메인 검증이 필요하지 않습니다.

request-certificate.sh — DNS 검증으로 퍼블릭 인증서 요청 (도메인은 예시입니다)
aws acm request-certificate \
  --domain-name example.com \
  --subject-alternative-names '*.example.com' \
  --validation-method DNS \
  --query 'CertificateArn'

# 검증에 필요한 CNAME 레코드를 확인합니다.
aws acm describe-certificate \
  --certificate-arn arn:aws:acm:ap-northeast-2:123456789012:certificate/EXAMPLE \
  --query 'Certificate.DomainValidationOptions[].ResourceRecord'

TLS 종료 지점과 CloudFront의 리전 제약

인증서는 요청을 받는 지점에 붙습니다. 이 지점에서 TLS가 종료되고, 그 뒤 구간은 별도로 설계합니다.

ACM 인증서가 TLS 를 종료하는 지점과 그 제약 뷰어에서 시작한 HTTPS 연결이 Amazon CloudFront, Application Load Balancer, Amazon API Gateway 세 지점 가운데 하나에서 TLS 로 종료되는 배치를 보여 줍니다. 이 세 곳이 AWS Certificate Manager 가 발급한 인증서를 붙일 수 있는 자리입니다. 그 뒤의 오리진 구간, 즉 EC2 와 컨테이너, Amazon S3 오리진, Lambda 백엔드로 가는 구간은 별개의 연결이며 별도의 인증서와 정책으로 다룹니다. 아래쪽 붉은 상자는 이 그림의 결론입니다. ACM 이 발급한 공인 인증서는 EC2 인스턴스나 온프레미스 서버에 내려받아 직접 설치할 수 없습니다. 서버에 직접 설치해야 하는 요구라면 외부 인증 기관의 인증서를 쓰거나 AWS Private CA 를 씁니다. 맨 아래 주의 상자는 리전 제약입니다. CloudFront 배포에 붙일 인증서는 반드시 US East 노스버지니아 리전에서 발급해야 하고, ALB 와 API Gateway 에 붙일 인증서는 그 리소스가 있는 리전에서 발급해야 합니다. 뷰어 TLS 가 종료되는 지점 (ACM) 뒤쪽 오리진 구간 — 별도 연결 브라우저 HTTPS 요청 Amazon CloudFront ACM 인증서 — us-east-1 발급 Application Load Balancer ACM 인증서 — 같은 리전 Amazon API Gateway ACM 인증서 — 같은 리전 EC2 · 컨테이너 Amazon S3 오리진 Lambda · 백엔드 ACM 공인 인증서는 EC2 나 온프레미스 서버에 내려받아 설치할 수 없습니다 서버에 직접 설치해야 한다면 외부 인증 기관의 인증서나 AWS Private CA 를 씁니다 CloudFront 배포에 붙일 인증서는 반드시 US East (N. Virginia) 리전에서 발급합니다 ALB 와 API Gateway 용 인증서는 그 리소스가 있는 리전에서 발급합니다
ACM 인증서가 붙는 지점 — Application Load Balancer · Amazon CloudFront · Amazon API Gateway에서 TLS가 종료되고, 뒤쪽 오리진 구간은 별도의 인증서와 정책으로 다룹니다. CloudFront에 붙일 인증서는 반드시 US East (N. Virginia) 리전에서 발급해야 한다는 제약이 함께 표시됩니다
ACM 인증서를 연결하는 지점과 제약
연결 지점 역할 제약
Application Load Balancer HTTPS 리스너에서 TLS를 종료하고 뒤쪽 대상에는 HTTP 또는 HTTPS로 전달합니다 인증서는 로드 밸런서와 같은 리전에 있어야 합니다
Network Load Balancer TLS 리스너를 쓰면 로드 밸런서에서 종료하고, TCP 리스너를 쓰면 종료하지 않고 그대로 넘깁니다 종료 여부가 리스너 프로토콜 선택으로 갈립니다(7장)
Amazon CloudFront 엣지에서 뷰어 연결의 TLS를 종료합니다 인증서를 US East (N. Virginia) 리전(us-east-1)에서 발급해야 합니다
Amazon API Gateway 사용자 지정 도메인 이름에 붙여 API 엔드포인트의 TLS를 종료합니다 엔드포인트 유형에 따라 인증서를 둘 리전이 달라집니다

Secrets Manager와 Parameter Store — 자동 교체가 기준이다

두 서비스는 겹치는 부분이 넓습니다. 둘 다 값을 KMS로 암호화해 저장하고, 둘 다 IAM으로 접근을 통제하며, 둘 다 애플리케이션이 런타임에 값을 가져오게 합니다. 그래서 시험은 겹치지 않는 지점 하나로 갈림길을 만듭니다.

AWS Secrets Manager 와 Parameter Store 의 대비 왼쪽은 AWS Secrets Manager 입니다. 비밀에 교체 Lambda 함수를 붙여 두면 정해진 주기마다 새 값이 만들어져 AWSPENDING 준비 라벨을 달고, 검증이 끝나면 AWSCURRENT 로 승격되어 순환합니다. 교체가 실패해도 현재 값이 살아 있습니다. 오른쪽은 AWS Systems Manager Parameter Store 입니다. 파라미터 이름을 슬래시로 나눈 경로처럼 계층화해 설정값을 정리하고 값 유형은 String, StringList, SecureString 세 가지이며, 자동 교체 기능 자체가 없어 새 값을 넣는 일은 사용자 몫입니다. 그 지점을 가위표로 표시했습니다. 아래 비교표는 주 용도, 자동 교체, 교체 동작, 계층, 비용 성격, 문제문에서 고르는 신호 여섯 항목을 나란히 놓습니다. 결론은 자격 증명을 주기적으로 자동 교체하라는 요구가 Secrets Manager 한쪽만 지목한다는 것이며, 교체 요구가 없고 추가 비용을 들이지 않아야 한다면 Parameter Store 가 답입니다. AWS Secrets Manager 교체가 내장된 비밀 저장소 비밀 (Secret) 교체 Lambda 새 버전 AWSPENDING 승격 AWSCURRENT 정해진 주기마다 자동으로 순환합니다 교체가 실패해도 현재 값은 살아 있습니다 Parameter Store 경로로 계층화하는 설정값 저장소 /prod/orders/ db/password SecureString feature-flags/new String 자동 교체 기능이 없습니다 새 값을 넣는 것은 사용자 몫입니다 항목 Secrets Manager Parameter Store 주 용도 DB 자격 증명 · API 키 설정값 · 파라미터 자동 교체 내장 — 교체 함수를 붙임 없음 교체 동작 AWSPENDING → AWSCURRENT 해당 없음 계층 비밀 단위 이름을 경로로 계층화 비용 성격 비밀 개수와 API 호출에 과금 표준 계층은 추가 비용 없음 고르는 신호 주기적으로 자동 교체 설정값 · 비용을 더 안 들이고 문제문에 자동 교체나 회전이 보이면 Secrets Manager, 없으면 Parameter Store 입니다
AWS Secrets Manager와 AWS Systems Manager Parameter Store의 대비 — 저장 대상, 자동 교체 기능의 유무, KMS 연동 방식, 계층 구조를 나란히 놓습니다. "자격 증명을 주기적으로 교체하라"는 요구가 Secrets Manager 한쪽만 지목하는 이유가 결론입니다
AWS Secrets Manager와 AWS Systems Manager Parameter Store 비교
항목 AWS Secrets Manager Parameter Store
주 용도 데이터베이스 자격 증명, API 키 같은 비밀 설정값과 파라미터. 값 유형은 String · StringList · SecureString
자동 교체 내장 — 교체 함수를 붙여 자동화합니다 내장 기능 없음
교체 동작 AWSCURRENT와 AWSPENDING 준비 라벨로 새 버전을 만들어 교체합니다. 실패해도 현재 값이 살아 있습니다 해당 없음 — 값을 새로 넣는 것은 우리 몫입니다
계층 비밀 단위 Standard · Advanced · Intelligent-Tiering 계층이 있고, 이름을 /app/prod/db/처럼 경로로 계층화합니다
비용 성격 비밀 개수와 API 호출에 요금이 붙습니다 표준 계층은 추가 비용 없이 쓸 수 있습니다
고르는 신호 "자격 증명을 주기적으로 자동 교체해야 한다", "RDS 비밀번호를 회전" "설정값을 계층 구조로 관리", "교체 요구가 없다", "비용을 더 들이지 않고"
store-config.sh — 같은 값을 두 서비스에 넣을 때의 차이 (이름과 리전은 예시입니다)
# 교체가 필요한 자격 증명 — Secrets Manager
aws secretsmanager create-secret \
  --name prod/orders/db \
  --secret-string '{"username":"app","password":"REPLACE_ME"}'

aws secretsmanager rotate-secret \
  --secret-id prod/orders/db \
  --rotation-lambda-arn arn:aws:lambda:ap-northeast-2:123456789012:function:RotateDbSecret \
  --rotation-rules AutomaticallyAfterDays=30

# 교체가 필요 없는 설정값 — Parameter Store
aws ssm put-parameter \
  --name /prod/orders/feature-flags/new-checkout \
  --type String \
  --value enabled \
  --tier Standard

위협 탐지 서비스 — 무엇을 입력으로 읽는가 SAA 빈출

네 서비스는 이름이 비슷해서 외우려 들면 계속 헷갈립니다. 구분하는 확실한 방법은 각 서비스가 무엇을 입력으로 읽는가를 보는 것입니다. 입력이 다르면 답할 수 있는 질문도 다릅니다.

위협 탐지 서비스 네 가지의 입력 데이터 구분 왼쪽에 입력 데이터, 가운데에 그 데이터를 읽는 서비스, 오른쪽에 집계 서비스를 놓은 좌우 흐름입니다. Amazon GuardDuty 는 CloudTrail 이벤트, VPC Flow Logs, Route 53 DNS 쿼리 로그 같은 로그와 네트워크 신호를 읽어 위협 활동을 탐지합니다. Amazon Inspector 는 EC2 인스턴스와 컨테이너 이미지, Lambda 함수에 설치된 소프트웨어 구성을 읽어 알려진 취약점을 평가합니다. Amazon Macie 는 Amazon S3 버킷 안 객체의 내용을 읽어 개인 식별 정보 같은 민감 데이터를 찾아냅니다. AWS Security Hub 는 데이터를 직접 읽지 않습니다. 앞의 세 서비스와 파트너 제품이 만든 결과를 모아 보안 표준에 대조하고 우선순위를 매겨 돌려줍니다. 그래서 시나리오에서 서비스를 고르는 유일한 기준은 문제문이 어떤 입력 데이터를 말하고 있는가입니다. 무엇을 입력으로 읽는가 읽는 서비스 결과를 모으는 곳 로그 · 네트워크 신호 CloudTrail 이벤트 VPC Flow Logs Route 53 DNS 쿼리 로그 Amazon GuardDuty 위협 활동 탐지 워크로드의 소프트웨어 구성 EC2 · 컨테이너 이미지 · Lambda 설치된 패키지 목록 Amazon Inspector 취약점 평가 Amazon S3 의 객체 내용 버킷 안에 실제로 담긴 데이터 개인 식별 정보 · 자격 증명 Amazon Macie 민감 데이터 탐지 AWS Security Hub 원본 데이터를 직접 읽지 않습니다 입력 GuardDuty · Inspector Macie · 파트너 제품 출력 보안 표준 대조 결과 우선순위가 매겨진 통합 조사 결과 서비스를 고르는 기준은 문제문이 말하는 입력 데이터입니다 로그와 네트워크는 GuardDuty · 설치된 소프트웨어는 Inspector · S3 객체 내용은 Macie
위협 탐지 서비스의 역할 분담 — Amazon GuardDuty는 로그와 네트워크 신호를, Amazon Inspector는 워크로드의 소프트웨어 구성을, Amazon Macie는 Amazon S3의 객체 내용을 읽고, AWS Security Hub는 앞의 세 서비스를 포함한 여러 소스의 결과를 모아 표준에 대조합니다. 시나리오에서 서비스를 고르는 기준은 입력 데이터입니다
탐지·평가 서비스 네 가지의 입력과 답하는 질문
서비스 무엇을 읽는가 답하는 질문 문제문의 신호
Amazon GuardDuty VPC 플로우 로그, CloudTrail 관리 이벤트와 S3 데이터 이벤트, DNS 로그, EKS 감사 로그, EBS 볼륨 데이터, 컨테이너·인스턴스 런타임 활동 지금 이상한 행위가 일어나고 있는가 "악성 IP와 통신", "비정상적인 API 호출", "암호화폐 채굴", "손상된 자격 증명"
Amazon Inspector Amazon EC2 인스턴스, Amazon ECR 이미지, AWS Lambda 함수의 소프트웨어 구성 알려진 취약점이 있는가 "CVE", "패치되지 않은 소프트웨어", "컨테이너 이미지 스캔", "지속적인 취약점 스캔"
Amazon Macie Amazon S3 객체의 내용 민감 데이터가 어디에 있는가 "개인 식별 정보(PII)", "신용카드 번호가 저장되어 있는지", "어느 버킷에 민감 데이터가"
AWS Security Hub 위 서비스들과 서드파티 제품의 결과(finding) 전체 보안 상태가 표준에 맞는가 "여러 계정의 보안 결과를 한곳에서", "모범 사례 표준 대비 점검", "규정 준수 점수"

AWS WAF와 AWS Shield — 규칙인가 디도스인가

둘 다 "웹을 보호한다"고 설명되지만 막는 대상이 다릅니다. AWS WAF는 요청 하나하나의 내용을 보고, AWS Shield는 트래픽의 양과 형태를 봅니다.

AWS WAF · AWS Shield · AWS Network Firewall의 계층과 용도
서비스 무엇을 보는가 어디에 붙이는가 고르는 신호
AWS WAF HTTP 요청의 내용 — 경로 · 헤더 · 쿼리 문자열 · 본문 · 출발지 IP · 요청 속도 웹 ACL을 Amazon CloudFront 배포, Application Load Balancer, Amazon API Gateway 등 요청을 받는 지점에 연결합니다 "SQL 삽입", "교차 사이트 스크립팅", "특정 국가 차단", "IP당 요청 속도 제한", "봇 차단"
AWS Shield Standard 네트워크·전송 계층의 대량 트래픽 추가 설정 없이 모든 고객에게 기본 제공됩니다 "기본적인 디도스 방어는 이미 되어 있는가"
AWS Shield Advanced 더 정교한 디도스 공격과 애플리케이션 계층 공격 보호할 리소스를 등록하는 유료 구독입니다 "대응 팀 지원", "공격으로 늘어난 요금 보전", "상시 디도스 대응 체계"
AWS Network Firewall VPC를 드나드는 네트워크 트래픽 전반 VPC의 방화벽 서브넷에 배치하고 라우팅으로 트래픽을 통과시킵니다 "HTTP뿐 아니라 모든 프로토콜", "도메인 허용 목록", "침입 탐지 규칙을 VPC 수준에서"

WAF와 CloudFront·Route 53을 엮은 엣지 계층 전체 구성은 14장 엣지와 DNS에서 다룹니다. 이 장에서는 어느 계층의 무엇을 막는 장치인가만 확실히 해 둡니다.

애플리케이션 사용자와 디렉터리

2장에서 정리한 세 갈래 — 직원이면 AWS IAM Identity Center, 앱 사용자면 Amazon Cognito, 사람이 아니면 IAM 역할 — 중 두 번째와 그 주변을 여기서 마무리합니다.

Amazon Cognito — 사용자 풀과 자격 증명 풀

Cognito는 이름이 하나지만 서로 다른 일을 하는 두 개의 구성 요소입니다. 이 둘을 뭉뚱그려 이해하면 문항에서 반드시 걸립니다.

Amazon Cognito 사용자 풀과 자격 증명 풀의 2단 구조 위에서 아래로 내려가는 두 단계 흐름입니다. 1단계는 인증입니다. 최종 사용자가 Amazon Cognito 사용자 풀에 로그인하면 사용자 풀이 사용자 디렉터리 역할을 하며 MFA 와 소셜 로그인, SAML 연동을 처리하고, 인증에 성공하면 ID 토큰과 액세스 토큰을 발급합니다. 앱이 자기 백엔드 API 만 호출한다면 여기서 흐름이 끝납니다. 오른쪽으로 갈라진 가지가 그 경우입니다. 2단계는 자격 증명 교환입니다. 앱이 AWS API 를 직접 호출해야 할 때만 필요합니다. 1단계에서 받은 토큰을 Amazon Cognito 자격 증명 풀에 넘기면 자격 증명 풀이 토큰을 검증하고 IAM 역할에 매핑해 AWS Security Token Service 의 임시 AWS 자격 증명을 돌려줍니다. 그 자격 증명으로 비로소 Amazon S3 나 DynamoDB 를 직접 호출할 수 있습니다. 결론은 사용자 풀이 인증을 담당하고 자격 증명 풀이 AWS 자격 증명 교환을 담당하는 서로 다른 역할이라는 점입니다. 1단계 사용자를 인증하고 토큰을 발급합니다 2단계 토큰을 임시 AWS 자격 증명으로 바꿉니다 AWS API 를 직접 호출할 때만 필요 최종 사용자 · 클라이언트 앱 Amazon Cognito 사용자 풀 사용자 디렉터리 · 로그인 · MFA 소셜 로그인 · SAML · OIDC 연동 ID 토큰 · 액세스 토큰 JWT — 아직 AWS 자격 증명이 아닙니다 앱 자체 API 여기서 끝납니다 AWS API 를 직접 호출해야 할 때만 Amazon Cognito 자격 증명 풀 토큰 검증 후 IAM 역할에 매핑 인증됨 · 인증 안 됨 두 역할 AWS STS 임시 자격 증명 만료 시각이 있는 액세스 키 · 세션 토큰 Amazon S3 · DynamoDB 직접 호출 사용자 풀은 인증하고, 자격 증명 풀은 AWS 자격 증명으로 바꿉니다
Amazon Cognito의 2단 구조 — 사용자 풀이 사용자를 인증하고 토큰을 발급하면, 자격 증명 풀이 그 토큰을 받아 AWS Security Token Service의 임시 AWS 자격 증명으로 교환합니다. 앱이 AWS API를 직접 호출해야 할 때만 두 번째 단계가 필요합니다
Cognito 사용자 풀과 자격 증명 풀의 역할 구분
항목 사용자 풀(User Pool) 자격 증명 풀(Identity Pool)
하는 일 인증 — 가입 · 로그인 · MFA · 소셜 로그인 연동을 처리하고 토큰을 발급합니다 권한 부여 — 토큰을 받아 임시 AWS 자격 증명으로 바꿉니다
결과물 JSON 웹 토큰 IAM 역할을 맡은 임시 자격 증명
필요한 상황 앱에 로그인 기능이 필요하다 앱이 Amazon S3에 직접 업로드하는 것처럼 AWS API를 직접 호출해야 한다
게스트 접근 해당 없음 인증되지 않은 사용자에게도 제한된 역할을 줄 수 있습니다

AWS Directory Service

Microsoft Active Directory가 관련된 요구는 Cognito도 IAM Identity Center도 아닌 AWS Directory Service로 갑니다. 대표 선택지는 세 가지입니다.

AWS Directory Service의 대표 선택지
유형 무엇인가 고르는 신호
AWS Managed Microsoft AD AWS가 운영하는 실제 Active Directory. 온프레미스 AD와 신뢰 관계를 맺을 수 있습니다 "AWS 안에서 도메인 조인", "그룹 정책", "Amazon FSx for Windows File Server와 연동"
AD Connector 디렉터리 정보를 복제하지 않고 온프레미스 AD로 요청을 전달하는 프록시 "기존 온프레미스 AD를 그대로 쓰고 사용자를 복제하지 않는다"
Simple AD 기본적인 디렉터리 기능만 제공하는 저비용 선택지 "소규모", "고급 AD 기능이 필요 없다"

여기서 갈림길은 사용자를 어디에 두는가입니다. AWS 안에 디렉터리를 두면 Managed Microsoft AD, 온프레미스에 그대로 두고 참조만 하면 AD Connector입니다.

흔한 오해

시험 포인트 정리

이 장의 주제는 전부 보안 아키텍처 설계(30%)에 속합니다.

확인 문제

이 장의 핵심을 확인하는 10문항입니다. 키보드만으로 완주할 수 있습니다 — 숫자키 1~5로 선택지를 고르고 Enter로 제출합니다.

학습용 유형 연결형과 순서 배열 문항이 섞여 있을 수 있습니다. 이 두 유형은 암기 확인에 효율이 좋아서 기본개념 확인 문제에만 넣었으며, 실제 SAA-C03 시험에는 출제되지 않습니다.

이어서 볼 곳

공식 문서 출처

이 장의 개념 서술과 API 동작은 모두 아래 문서에서 확인했습니다.