こんにちは。
今回は、AWSの暗号化・鍵管理サービスについて、それぞれの役割や違いを整理してみます。
まず整理
AWSには暗号化や認証情報を管理するサービスが複数ありますが、管理する対象は大きく3種類に分けられます。
AWSの暗号化・鍵管理
┌────────────┬──────────────┬──────────────┐
│ │ │
暗号鍵 シークレット SSL/TLS証明書
│ │ │
AWS KMS Secrets Manager ACM
CloudHSM Parameter Store
| 管理するもの | 主なサービス |
|---|---|
| 暗号鍵 | AWS KMS・AWS CloudHSM |
| パスワード・APIキー・シークレット | AWS Secrets Manager・Systems Manager Parameter Store |
| SSL/TLS証明書 | AWS Certificate Manager(ACM) |
AWS KMSとは
AWS Key Management Service(KMS)は、暗号鍵(暗号化キー)を安全に作成・管理するサービスです。
例えば、Amazon S3のデータを暗号化する場合は次のようになります。
Amazon S3
│
AWS KMS
│
暗号鍵で暗号化
AWSの多くのサービスと統合できるため、最も利用される鍵管理サービスです。
KMSで暗号化できる主なサービス
AWS KMSは多くのAWSサービスと統合されています。
例えば、
- Amazon S3
- Amazon EBS
- Amazon RDS
- Amazon DynamoDB
- Amazon EFS
- AWS Lambda(環境変数)
- AWS Secrets Manager
などの暗号化に利用できます。
KMSキーの種類
| 種類 | 内容 |
|---|---|
| AWS管理キー | AWSが管理するキー |
| カスタマー管理キー(Customer Managed Key・旧称:CMK) | ユーザーが管理するキー |
| インポートキー | 外部で作成したキーを取り込む |
細かなアクセス制御やローテーション設定を行いたい場合は、カスタマー管理キーを利用します。
AWS公式ドキュメントでは現在、「Customer Managed Key(カスタマー管理キー)」という表現が使われています。以前はCMKという略称が広く使われていました。
また、AWS KMSには、
- Envelope Encryption(封筒暗号化)
- キーポリシー
- グラント(Grant)
- マルチリージョンキー
など重要な機能があります。
AWS CloudHSM
AWS CloudHSMは、クラウド上でハードウェアセキュリティモジュール(HSM)を利用できるサービスです。
アプリケーション
│
AWS CloudHSM
│
秘密鍵
金融機関や政府機関など、高いセキュリティ要件が求められるシステムで利用されます。
KMSとの違い
| 項目 | AWS KMS | AWS CloudHSM |
|---|---|---|
| 鍵管理 | AWSが管理 | ユーザーが管理 |
| 運用 | 簡単 | やや複雑 |
| コスト | 比較的安価 | 高い |
| FIPS対応 | HSMで保護(FIPS 140-2 Level 2相当) | FIPS 140-2 Level 3対応 |
KMSも内部ではHSMを利用していますが、その運用はAWSが管理しています。
一方、CloudHSMではユーザー自身がHSMを管理するため、より厳しいコンプライアンス要件にも対応できます。
AWS Secrets Manager
AWS Secrets Managerは、パスワードやAPIキーなどのシークレット情報を安全に管理するサービスです。
保存できる情報の例
- データベースのパスワード
- APIキー
- OAuthトークン
- アクセストークン
最大の特徴
Secrets Manager最大の特徴は、シークレットの自動ローテーションです。
Secrets Manager
│
ローテーション開始
│
▼
AWS Lambda
│
▼
Amazon RDS
│
新しいパスワードを設定
│
▼
Secrets Managerへ保存
例えばRDSでは、Lambdaと連携してパスワードの変更を自動化できます。
Systems Manager Parameter Store
Parameter Storeも設定値やシークレット情報を保存できるサービスです。
Secrets Managerとの違いを整理すると次のようになります。
| 項目 | Parameter Store(Standard) | Parameter Store(Advanced) | AWS Secrets Manager |
|---|---|---|---|
| 基本料金 | 無料 | 有料 | 有料 |
| 主な用途 | 設定値・環境変数 | 大規模設定・高度な管理 | パスワード・APIキー |
| SecureString | ○ | ○ | ○ |
| 自動ローテーション | × | × | ○ |
| クロスアカウントアクセス | △(構成による) | △(構成による) | ○(リソースベースポリシーを利用) |
Parameter StoreにはStandard(無料)とAdvanced(有料) の2つのティアがあります。
一般的な設定値や環境変数であればStandardで十分ですが、大量のパラメータや高度な管理機能が必要な場合はAdvancedを利用します。
一方、Secrets ManagerはデータベースのパスワードやAPIキーなどの機密情報を管理することを目的としており、自動ローテーションやクロスアカウントアクセスなどの高度な機能を利用できます。
AWS Certificate Manager(ACM)
AWS Certificate Manager(ACM)は、SSL/TLS証明書を発行・管理するサービスです。
例えば、
HTTPS通信
│
ACM
│
Application Load Balancer
のように利用できます。
証明書の更新も自動で行われるため、更新忘れによるサービス停止を防ぐことができます。
ACM利用時の注意点
ACMで発行した公開証明書は、
- Application Load Balancer
- Amazon CloudFront
- Amazon API Gateway
などのAWSサービスで利用できます。
また、Amazon CloudFrontでACM証明書を利用する場合は、必ず米国東部(バージニア北部:us-east-1)リージョンで証明書を発行またはインポートする必要があります。
さらに、ACMで発行した公開証明書の秘密鍵は取得できないため、EC2へ直接インストールすることはできません。
EC2で利用する場合は、
- 外部で取得した証明書をインポートする
- AWS Private CAで発行する
などの方法を利用します。
サービスの使い分け
| 保存・管理したいもの | サービス |
|---|---|
| 暗号鍵 | AWS KMS |
| HSMによる鍵管理 | AWS CloudHSM |
| データベースパスワード | AWS Secrets Manager |
| APIキー | AWS Secrets Manager |
| アプリケーション設定値 | Systems Manager Parameter Store |
| SSL/TLS証明書 | AWS Certificate Manager |
まとめ
AWSには暗号化や認証情報を管理するためのサービスが数多くありますが、それぞれ役割が異なります。
- AWS KMS:暗号鍵を管理する
- AWS CloudHSM:専有HSMで暗号鍵を管理する
- AWS Secrets Manager:パスワードやAPIキーなどのシークレット情報を管理する
- Systems Manager Parameter Store:設定値や環境変数を管理する
- AWS Certificate Manager(ACM):SSL/TLS証明書を管理する