KMS, ACM и шаблоны шифрования
Управляйте ключами шифрования с помощью AWS KMS, выпускайте и обновляйте сертификаты TLS с помощью ACM и выбирайте между шифрованием на стороне клиента, сервера и при передаче.
«KMS, ACM и шаблоны шифрования» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Шифрование в AWS: обзор
Шифрование — это базовый механизм безопасности, который защищает конфиденциальность данных, даже если носитель данных скомпрометирован или доступ получен иным способом. AWS поддерживает шифрование данных в состоянии покоя (хранящихся в базах данных, S3 и EBS) и при передаче (перемещаемых по сетям). Основные сервисы: AWS Key Management Service (KMS) управляет ключами шифрования для данных в состоянии покоя. AWS Certificate Manager (ACM) выпускает и администрирует сертификаты TLS для шифрования данных при передаче. Понимание того, когда и как применять каждый из них, необходимо для предметной области Security Architecture экзамена SAA-C03.
# Encryption coverage on AWS:
# At rest (KMS):
# S3, EBS, RDS, DynamoDB, EFS, SQS,
# Lambda env vars, Secrets Manager, SSM Parameter Store
# In transit (ACM/TLS):
# ALB listeners (HTTPS), API Gateway, CloudFront,
# Direct Connect, VPN, inter-service communication
# Both:
# S3 Server-Side Encryption + HTTPS only policyAWS KMS: сервис управления ключами
AWS KMS — это полностью управляемый сервис для создания и контроля ключей шифрования. KMS использует Hardware Security Modules (HSMs) для защиты ключей: ключевой материал никогда не покидает HSM в незашифрованном виде. KMS интегрируется с большинством сервисов AWS для серверного шифрования. Типы ключей: AWS Managed Keys (бесплатные, автоматически меняются ежегодно, прямой контроль над ними невозможен) и Customer Managed Keys (CMK) ($1 в месяц за каждый ключ; Вы управляете ротацией, политикой ключа и удалением). Custom Key Store использует собственный кластер CloudHSM для выполнения требований соответствия, предусматривающих выделенные HSM.
# Create a Customer Managed Key (CMK)
aws kms create-key \
--description 'Production database encryption key' \
--key-usage ENCRYPT_DECRYPT \
--origin AWS_KMS \
--tags TagKey=Purpose,TagValue=RDS-Encryption
# Create an alias for the key
aws kms create-alias \
--alias-name alias/prod-db-key \
--target-key-id arn:aws:kms:us-east-1:123:key/abc-def
# CMK costs: $1/month + $0.03 per 10,000 API callsПолитики ключей KMS и разрешения
У каждого ключа KMS есть политика ключа — политика на основе ресурса, которая определяет, кто может использовать ключ и управлять им. В отличие от политик IAM, основанных на удостоверениях, политики ключей обязательны: политика ключа должна явно предоставлять доступ, чтобы политики IAM вступили в силу. Рекомендуется разделять администрирование ключа (кто может управлять ключом) и использование ключа (какие сервисы и роли могут выполнять шифрование и расшифровку). Используйте разрешения ключа для временного делегирования доступа — например, предоставьте кластеру EMR временное право использовать ключ KMS для задания, не изменяя политику ключа.
# KMS key policy: grant RDS and admin access
{
'Statement': [
{
'Sid': 'Enable root account full access',
'Principal': {'AWS': 'arn:aws:iam::123:root'},
'Action': 'kms:*',
'Effect': 'Allow'
},
{
'Sid': 'Allow RDS to use this key',
'Principal': {'Service': 'rds.amazonaws.com'},
'Action': ['kms:Encrypt','kms:Decrypt','kms:GenerateDataKey'],
'Effect': 'Allow'
}
]
}Конвертное шифрование KMS
KMS использует конвертное шифрование для эффективной защиты больших объёмов данных. Невозможно напрямую зашифровать с помощью ключа KMS более 4 КБ. Вместо этого KMS создаёт Data Encryption Key (DEK) — случайный ключ, которым Ваше приложение локально шифрует фактические данные. Затем DEK шифруется ключом KMS (Key Encryption Key). Зашифрованный DEK хранится рядом с зашифрованными данными. Для расшифровки сначала нужно вызвать KMS, чтобы расшифровать DEK, а затем локально использовать DEK в открытом виде для расшифровки данных. Именно так устроено шифрование S3, EBS и RDS.
# Generate a Data Key (for envelope encryption)
aws kms generate-data-key \
--key-id alias/my-key \
--key-spec AES_256
# Response contains:
# Plaintext: base64-encoded DEK (use to encrypt data locally)
# CiphertextBlob: KMS-encrypted DEK (store alongside data)
# To decrypt:
# 1. Call kms:Decrypt(CiphertextBlob) -> plaintext DEK
# 2. Use plaintext DEK to decrypt data locally
# 3. Zeroize plaintext DEK from memory
aws kms decrypt --ciphertext-blob fileb://encrypted-dek.binРотация ключей KMS
Ротация ключей — рекомендуемая практика безопасности, при которой ключевой криптографический материал периодически заменяется, что ограничивает период воздействия в случае компрометации ключа. Для Customer Managed Keys можно включить автоматическую ежегодную ротацию: KMS создаёт новый ключевой материал и использует его для новых операций шифрования, сохраняя старый материал для расшифровки существующих данных. AWS Managed Keys ротируются автоматически каждый год. Импортированный ключевой материал НЕ поддерживает автоматическую ротацию (ротацию необходимо выполнять вручную). После ротации новые операции KMS автоматически используют новый ключевой материал, и изменения в приложении не требуются.
# Enable automatic annual key rotation
aws kms enable-key-rotation \
--key-id alias/prod-db-key
# Verify rotation is enabled
aws kms get-key-rotation-status \
--key-id alias/prod-db-key
# Manual rotation (for imported key material):
# 1. Create a new CMK
# 2. Update all services to use new key
# 3. Re-encrypt existing data with new key
# 4. Schedule old key for deletion (minimum 7-day waiting period)Варианты серверного шифрования S3
S3 поддерживает три варианта серверного шифрования: SSE-S3 — S3 управляет ключами с использованием AES-256, бесплатно, минимальный уровень контроля. SSE-KMS — использует ключ KMS (управляемый AWS или CMK), предоставляет журнал аудита использования ключа в CloudTrail, поддерживает политики ключей и оплачивается за каждый вызов API KMS. SSE-C — Вы предоставляете ключевой материал и управляете им при каждом запросе; S3 никогда не хранит ключ. Используйте SSE-KMS, когда необходимо контролировать, кто и когда использовал ключ. Используйте SSE-S3 для данных низкой чувствительности, когда важны простота и стоимость. Принудительно включайте шифрование с помощью политики bucket, которая запрещает PutObject без шифрования.
# Enforce SSE-KMS on all new S3 objects
aws s3api put-bucket-policy \
--bucket my-secure-bucket \
--policy '{
"Statement": [{
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::my-secure-bucket/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
}]
}'
# Set default encryption for bucket
aws s3api put-bucket-encryption \
--bucket my-secure-bucket \
--server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms","KMSMasterKeyID":"alias/my-key"}}]}'AWS Certificate Manager (ACM)
AWS Certificate Manager (ACM) бесплатно выпускает, администрирует и автоматически продлевает сертификаты SSL/TLS для сервисов AWS. Сертификаты ACM можно использовать с ALB, NLB, CloudFront, API Gateway и AppSync. ACM автоматически управляет жизненным циклом сертификатов: продлевает их за 60 дней до истечения срока и прозрачно устанавливает продление. Вы можете запросить сертификаты для принадлежащих Вам доменов (с подтверждением через DNS или электронную почту) либо импортировать сертификаты сторонних центров сертификации. Сертификаты ACM НЕ доступны для скачивания — они привязаны к сервису AWS, с которым связаны.
# Request a public ACM certificate
aws acm request-certificate \
--domain-name app.example.com \
--subject-alternative-names '*.example.com' \
--validation-method DNS
# ACM returns a CNAME record to add to Route 53
# Add the CNAME -> ACM validates domain ownership
# Certificate is issued and auto-renews annually
# Attach to ALB listener (HTTPS:443)
aws elbv2 create-listener \
--load-balancer-arn <ALB-ARN> \
--protocol HTTPS --port 443 \
--certificates CertificateArn=arn:aws:acm:us-east-1:123:certificate/abc \
--default-actions Type=forward,TargetGroupArn=<TG-ARN>ACM Private Certificate Authority
ACM Private CA (Certificate Authority) позволяет создавать полностью управляемую иерархию частных CA для выпуска сертификатов внутренним ресурсам — экземплярам EC2, контейнерам, внутренним API и устройствам IoT. В отличие от общедоступных сертификатов ACM (используемых с сервисами, доступными из интернета), сертификаты частного CA можно выпускать для любого внутреннего имени хоста или IP-адреса. Используйте Private CA для взаимной аутентификации TLS (mTLS) между микросервисами, аутентификации на основе сертификатов для VPN и выполнения требований соответствия для внутренней PKI. Стоимость Private CA составляет 400 долларов в месяц за CA плюс 0,75 доллара за каждый выпущенный сертификат.
# Create ACM Private Certificate Authority
aws acm-pca create-certificate-authority \
--certificate-authority-type ROOT \
--certificate-authority-configuration '{
"KeyAlgorithm": "RSA_2048",
"SigningAlgorithm": "SHA256WITHRSA",
"Subject": {
"Country": "US",
"Organization": "Example Corp",
"CommonName": "Example Corp Internal CA"
}
}'
# Issue certificate from private CA
aws acm request-certificate \
--domain-name internal-service.example.internal \
--certificate-authority-arn arn:aws:acm-pca:us-east-1:123:certificate-authority/xxxШифрование EBS и RDS
Для шифрования томов EBS включите его во время создания тома (или скопируйте существующий том с включённым шифрованием). Все данные на томе, включая снимки, шифруются с помощью указанного вами ключа KMS. Шифрование EBS прозрачно для операционной системы — изменять приложения не требуется. Для шифрования RDS включите его при создании экземпляра базы данных; существующий незашифрованный экземпляр RDS нельзя зашифровать напрямую. Обходной путь: создайте зашифрованный снимок незашифрованного экземпляра, затем восстановите его в новый зашифрованный экземпляр. Зашифрованные снимки EBS и RDS остаются зашифрованными при копировании.
# Enable account-level EBS default encryption
aws ec2 enable-ebs-encryption-by-default
aws ec2 modify-ebs-default-kms-key-id \
--kms-key-id alias/prod-ebs-key
# Encrypt an existing unencrypted RDS instance:
# 1. Create unencrypted snapshot
aws rds create-db-snapshot \
--db-instance-identifier mydb \
--db-snapshot-identifier mydb-plain-snapshot
# 2. Copy snapshot with encryption
aws rds copy-db-snapshot \
--source-db-snapshot-identifier mydb-plain-snapshot \
--target-db-snapshot-identifier mydb-encrypted-snapshot \
--kms-key-id alias/prod-db-keyШифрование на стороне клиента и сервера
Для экзамена SAA-C03 важно понимать различие между шифрованием на стороне сервера и на стороне клиента. Шифрование на стороне сервера: AWS шифрует данные после их получения и расшифровывает перед передачей — между вашим приложением и AWS данные находятся в открытом виде. Шифрование на стороне клиента: вы шифруете данные перед отправкой в AWS — AWS хранит только шифротекст и никогда не видит открытые данные. Используйте шифрование на стороне клиента для данных с максимальным уровнем конфиденциальности, если вы не можете доверять поставщику облачных услуг обработку открытых данных, например для медицинских записей или финансовых данных, подпадающих под строгие нормативные требования.
# Client-side encryption with AWS Encryption SDK
# (conceptual Python example)
# 1. Application encrypts data locally using KMS DEK
# from aws_encryption_sdk import KmsKeyProvider, encrypt
# key_provider = KmsKeyProvider(key_ids=['alias/my-key'])
# ciphertext, _ = encrypt(
# source=b'Sensitive patient data',
# key_provider=key_provider
# )
# 2. Send ciphertext to S3
# s3.put_object(Bucket='hipaa-data', Key='record.enc', Body=ciphertext)
# AWS only stores ciphertext - cannot decrypt without your key policyМежаккаунтный доступ к KMS
Ключами KMS можно делиться между аккаунтами AWS в сценариях межаккаунтного шифрования. Например, если приложение Account A записывает зашифрованные данные в корзину S3, принадлежащую Account B, ключ KMS Account A должен разрешать участнику Account B использовать его. Настройте политику ключа KMS в Account A, чтобы предоставить межаккаунтный доступ, затем создайте политику IAM в Account B, разрешающую роли использовать ключ Account A. Этот подход широко применяется в архитектурах обмена данными и многоконтурных архитектурах, где центральный аккаунт управляет ключами шифрования.
# KMS key policy: allow cross-account access
# (in Account A's key policy)
{
'Sid': 'Allow Account B to use this key',
'Effect': 'Allow',
'Principal': {
'AWS': 'arn:aws:iam::999999999999:root'
},
'Action': [
'kms:Encrypt',
'kms:Decrypt',
'kms:ReEncrypt*',
'kms:GenerateDataKey*',
'kms:DescribeKey'
],
'Resource': '*'
}
# Account B IAM policy also needed to allow the role to use itБыстрая проверка
Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03) из этого урока.
Итоги урока
В этом уроке вы узнали, что KMS управляет ключами шифрования с защитой HSM и поддерживает CMK для детального управления доступом и ведения журналов аудита, ACM выпускает и автоматически продлевает сертификаты TLS для сервисов AWS бесплатно, а шифрование можно применять на стороне сервера (KMS) или клиента; для рабочих нагрузок, созданных средствами AWS, чаще всего используется шифрование на стороне сервера. Принудительно включайте шифрование с помощью политик корзин, запрещающих операции без шифрования. Далее мы рассмотрим GuardDuty, Inspector и Macie.
Часто задаваемые вопросы
Урок «KMS, ACM и шаблоны шифрования» бесплатный?
Да — полный текст урока «KMS, ACM и шаблоны шифрования» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Чему я научусь в уроке «KMS, ACM и шаблоны шифрования»?
Управляйте ключами шифрования с помощью AWS KMS, выпускайте и обновляйте сертификаты TLS с помощью ACM и выбирайте между шифрованием на стороне клиента, сервера и при передаче. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?
Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «KMS, ACM и шаблоны шифрования»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?
Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- KMS, ACM и шаблоны шифрования
- GuardDuty, Inspector и Macie
- Secrets Manager и Parameter Store
- WAF, Shield и Network Firewall