DEA / ドメイン4 データセキュリティとガバナンス
重要な内容
AWS KMS とデータの暗号化
データパイプラインのデータは、 に置かれ、 や で処理され、 に載り、アカウントをまたいで共有されます。どの段階でも暗号化が切れないようにするのがデータエンジニアの仕事です。 DEA では、 のキーで保存データを暗号化・復号すること、アカウントの境界を越えて暗号化したデータを使わせること、転送中または転送前に暗号化することが問われます。
Point
- KMS = Key Management Service の略で、暗号化に使うキーを作成・管理・利用するサービスです。
- SSE = Server-Side Encryption (サーバー側暗号化) の略です。S3 などが保存時に暗号化します。
- TLS = Transport Layer Security の略で、通信を暗号化する仕組みです (HTTPS の土台)。
- エンベロープ暗号化は、データをデータキーで暗号化し、そのデータキーを KMS キーで暗号化する方式です。
- 和訳
- Envelope: 封筒
- In transit: 輸送中の
- Weblio英和辞書「envelope」
概要
暗号化は、データの状態に合わせて3つに分けて考えます。
| 状態 | 守る手段 | 例 |
|---|---|---|
| 保存時 (at rest) | サーバー側暗号化 ( のキーなど) | の 、 のクラスター暗号化 |
| 転送中 (in transit) | の 呼び出し、 の 接続 | |
| 転送前 (クライアント側) | 送る前に自分で暗号化 | AWS Encryption 、S3 の暗号化クライアント |
主要技術
①KMS キーとキーポリシー
| キーの種類 | 管理者 | 判断ポイント |
|---|---|---|
| AWS 所有のキー | AWS | 利用者からは見えません。監査や権限の制御はできません。 |
AWS マネージドキー (aws/s3 など) | AWS がサービスごとに作成 | 手軽ですが、キーポリシーを変えられず、別アカウントへ使わせることができません。 |
| 利用者 | キーポリシー、ローテーション、無効化、削除を自分で管理します。アカウントをまたぐ場合や監査の要件がある場合に選びます。 |
のキーを使うには、キーポリシーでの許可が必須です。キーポリシーでアカウントに委ねる記述 (アカウントのルートを Principal にする) があれば、 ポリシーでも許可を付けられます。
| 操作 | 内容 |
|---|---|
| 自動ローテーション | カスタマー管理キーで有効にできます。既定は365日ごとで、90〜2,560日の範囲で指定できます。古い鍵素材は残るため、過去のデータも復号できます。 |
| 無効化・削除 | 削除は7〜30日の待機期間を経て実行されます。削除したキーで暗号化したデータは復号できなくなります。 |
| 監査 | KMS の 呼び出し (Encrypt、Decrypt、GenerateDataKey) は に記録されます。 |
大きなデータは KMS に直接送らず、GenerateDataKey で得たで暗号化し、暗号化したデータキーをデータと一緒に保存します (エンベロープ暗号化)。 や はこれを内部で行います。
②S3 の暗号化方式 ⚠️ 頻出
| 方式 | キーの管理 | 判断ポイント |
|---|---|---|
| が管理 | すべてのの既定の暗号化です。追加の設定や の費用はかかりません。 | |
| KMS のキー | キーの権限で読める人を絞り、 でキーの利用を監査したい場合です。読む人に kms:Decrypt が必要です。 | |
| DSSE-KMS | KMS のキーで二重に暗号化 | 二層の暗号化を求める規制に対応する場合です。 |
| 利用者が毎回キーを渡す | 2026年4月から、新しいバケットでは既定で使えなくなりました。使うには明示的に有効にする必要があります。AWS のサービスはこの方式のデータを扱えません。 | |
| クライアント側暗号化 | アプリケーション | AWS に平文を渡したくない場合です。 |
SSE-KMS でオブジェクトが大量にあると、KMS の 呼び出しが増えて費用やの問題になります。S3 バケットキーを有効にすると、バケット単位のキーでを作るため、KMS への呼び出しを大きく減らせます。
暗号化を強制したい場合は、既定の暗号化を SSE-KMS に設定し、バケットポリシーで別の方式や別のキーを指定したアップロードを拒否します (s3:x-amz-server-side-encryption、s3:x-amz-server-side-encryption-aws-kms-key-id の条件キー)。
③分析サービスの暗号化
| サービス | 押さえること | |
|---|---|---|
| クラスター・Serverless の名前空間を で暗号化します。 | 新しいプロビジョンドクラスターは既定で暗号化されます (キーを指定しなければ AWS 所有のキー)。にすると、キーの権限で監査や制御ができます。 | |
| Data Catalog の暗号化 (メタデータと接続のパスワード) と、セキュリティ設定 (ジョブが書く のデータ、 Logs、) を設定します。 | セキュリティ設定はジョブ・に付けます。ジョブのロールにキーの利用権限が必要です。 | |
| セキュリティ設定で、S3 () のデータの暗号化、ローカルディスクの暗号化、を指定します。 | クラスター作成時にセキュリティ設定を指定します。 | |
| クエリ結果の暗号化 (、、CSE-KMS) をワークグループで強制できます。 | 元のデータが暗号化されていれば、クエリする人にもキーの権限が必要です。 | |
| / | KMS によるサーバー側暗号化を有効にできます。 | プロデューサー・コンシューマーにキーの権限が必要です。 |
| / | 作成時に暗号化を有効にします。 | 既存の暗号化されていない DB は、を暗号化してコピーし、そこから復元します。 |
| 常に暗号化されます。キーの種類 (AWS 所有、AWS マネージド、カスタマー管理) を選びます。 | 監査やキーの管理が必要ならカスタマー管理キーです。 |
④アカウントの境界を越えた暗号化 ⚠️ 頻出
別のアカウントの主体が、 で暗号化したデータを読むには、データへの権限とキーへの権限の両方が要ります。
| 設定する場所 | 内容 |
|---|---|
| 提供側のキーポリシー | 利用側のアカウント (またはロール) に kms:Decrypt などを許可します。 |
| 利用側の ポリシー | 自分のロールに、提供側のキーの ARN への kms:Decrypt を許可します。 |
| 提供側のリソースのポリシー | のポリシーなどで利用側を許可します。 |
| 場面 | 押さえること |
|---|---|
| 暗号化した ・ のを共有 | AWS マネージドキーで暗号化したものは共有できません。で暗号化し、キーも共有します。 |
| S3 の・クロスの | レプリケーションのロールに、元のキーでの復号と、宛先のキーでの暗号化の権限が要ります。 |
| (アカウントをまたぐ) | 提供側と利用側の両方が暗号化されている必要があります。同じキーである必要はありません。 |
| のクロスアカウント共有 | 元データが なら、Lake Formation に登録したロールがキーを使えるようにします。 |
| 期間限定・委任の使用 | グラントで、特定の主体にキーの使用を一時的に委ねられます。 |
⑤転送中・転送前の暗号化
| 手段 | 内容 |
|---|---|
aws:SecureTransport 条件 | ポリシーで aws:SecureTransport が false のリクエストを Deny し、 以外の通信を拒否します。 |
の require_ssl | パラメータグループで 接続を必須にします。新しいクラスターの既定のパラメータグループでは有効です。 |
| の SSL | 接続で SSL 接続を必須にし、 などへの通信を暗号化します。 |
| の | セキュリティ設定でノード間・ のなどの通信を で暗号化します。 |
| クライアント側暗号化 | AWS Encryption や の暗号化クライアントで、送る前に暗号化します。AWS 側で平文を扱わせたくない場合に使います。 |
試験対策
暗号化の問題では、まず「どの状態のデータか (保存時、転送中、送る前)」を決め、次に「誰がキーを管理・監査する必要があるか」で のキーの種類を選びます。 アカウントをまたぐなら、とキーポリシーの許可が前提です。
①判断マトリクス
| 問題文のキーワード | 選ぶもの | 理由 |
|---|---|---|
| 追加の費用や運用なしで を暗号化 | (既定) | すべてので既定です。 |
| キーの利用を監査し、読める人を絞りたい | + | キーポリシーと で制御・監査します。 |
| 規制で二層の暗号化が必要 | DSSE- | 二重の暗号化を行います。 |
| SSE-KMS の KMS 呼び出しの費用・ | S3 バケットキー | KMS への呼び出しを減らします。 |
| 暗号化されていないアップロードを拒否 | 既定の暗号化 + バケットポリシーの条件キーで Deny | 方式やキーを強制します。 |
| 以外のアクセスを拒否 | aws:SecureTransport が false を Deny | を強制します。 |
| 別アカウントが暗号化された S3 データを読めない | 提供側のキーポリシーで許可 + 利用側の で kms:Decrypt | データとキーの両方の許可が必要です。 |
| 暗号化を別アカウントへ共有 | カスタマー管理キーで暗号化し、キーも共有 | AWS マネージドキーは共有できません。 |
| 既存の暗号化なしの を暗号化 | スナップショットを暗号化してコピーし、復元 | 既存のインスタンスはその場で暗号化できません。 |
| ジョブの出力とログを暗号化 | Glue のセキュリティ設定 | S3・ Logs・ブックマークを暗号化します。 |
| AWS に平文を渡したくない | クライアント側暗号化 | 送る前に暗号化します。 |
| への接続を必ず暗号化 | require_ssl を true | 以外の接続を拒否します。 |
②よくある誤答
- の権限だけで のオブジェクトを読めると考えること。
kms:Decryptとキーポリシーの許可も必要です。 - AWS マネージドキーをキーポリシーで別アカウントに許可できると考えること。変更できないため、を使います。
- キーのローテーションで過去のデータが読めなくなると考えること。古い鍵素材は残ります。
- で大きなファイルを直接暗号化すると考えること。によるエンベロープ暗号化です。
- を新しいですぐ使えると考えること。現在は既定で無効です。
参考文献
- AWS Key Management Service concepts
- Key policies in AWS KMS
- Allowing users in other accounts to use a KMS key
- Protecting data with server-side encryption (Amazon S3)
- Using server-side encryption with customer-provided keys (SSE-C)
- Reducing the cost of SSE-KMS with Amazon S3 Bucket Keys
- Amazon Redshift database encryption
- Encrypting data written by AWS Glue
- Encrypt data at rest and in transit with Amazon EMR
- AWS Certified Data Engineer - Associate 試験ガイド