概要
機密性の高いデータをオンプレミスからAWSに移行して分析する場合、転送中の暗号化と保管中の暗号化の両方を満たすデータパイプラインの設計が求められます。たとえば、製薬会社が医療処方箋データをAWSに移行し、分析基盤で活用するケースでは、データが送信元からAWSに到達するまでの経路と、AWS上に保存された状態の両方で暗号化が必要です。
本記事では、Amazon Data Firehose(旧 Kinesis Data Firehose)によるTLS暗号化での転送、Amazon S3のサーバーサイド暗号化による保管中の暗号化、Amazon Athenaによるクエリ分析を組み合わせた暗号化データパイプラインを解説します。類似する構成パターンとの違いも比較し、要件に最適な選択肢を整理します。
Amazon Data Firehoseへのプライベートアクセスについては、Amazon Data Firehoseへのプライベートアクセス ── VPCエンドポイントとDirect Connectの組み合わせを参照してください。

この記事のメリット
- 転送中の暗号化と保管中の暗号化の違いを明確に理解できる
- Amazon Data Firehoseのデータ取り込みからS3への配信までの暗号化の仕組みを把握できる
- S3のサーバーサイド暗号化(SSE-S3、SSE-KMS)の特徴と使い分けを整理できる
- Firehose + S3 + Athenaの暗号化データパイプライン構成を実際にコンソールで構築できる
- SCS試験で「転送中と保管中の暗号化」を満たすデータパイプラインの設計問題に正確に答えられるようになる
執筆者とキャラクター紹介
執筆者:土肥(とひ)
株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。

クラウドおさる
クラウドおさるはじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。



基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。



猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。
技術解説
転送中の暗号化と保管中の暗号化
データの暗号化には、大きく2つの段階があります。
| 暗号化の種類 | 対象 | 目的 | 代表的な手段 |
|---|---|---|---|
| 転送中の暗号化(Encryption in Transit) | ネットワーク上を移動するデータ | 通信経路での盗聴・改ざんを防止 | TLS/SSL |
| 保管中の暗号化(Encryption at Rest) | ストレージに保存されたデータ | 不正アクセスやディスク盗難時のデータ保護 | SSE-S3、SSE-KMS、CSE |
機密データを扱う場合、どちらか一方ではなく両方の暗号化を組み合わせることが求められます。


Amazon Data Firehoseのデータ取り込みとTLS暗号化
Amazon Data Firehose(旧 Kinesis Data Firehose)は、ストリーミングデータをAWSのストレージやデータ分析サービスに配信するフルマネージドサービスです。データの取り込みから配信先への書き込みまでを自動で処理します。
Data Firehoseへのデータ送信は、HTTPS(TLS)エンドポイントを経由して行われます。これにより、送信元からData Firehoseまでの転送中の暗号化が自動的に適用されます。PutRecord APIやPutRecordBatch APIを呼び出す際のHTTPS通信がTLSで暗号化されるため、追加の設定なしで転送中の暗号化が実現されます。
Data Firehoseの主な特徴は以下の通りです。
- フルマネージド: サーバーのプロビジョニングや管理が不要
- 自動スケーリング: データ量に応じて自動的にスループットが調整される
- HTTPS(TLS)による転送中の暗号化: エンドポイントへの通信が標準でTLS暗号化される
- S3への配信時のサーバーサイド暗号化: 配信先のS3バケットで設定された暗号化が自動的に適用される
- データ変換: Lambda関数を使用したデータ変換や、Parquet/ORC形式への変換が可能
S3のサーバーサイド暗号化(SSE-S3、SSE-KMS)
Amazon S3はデフォルトでサーバーサイド暗号化(SSE-S3)が有効になっています。オブジェクトがS3に保存される際に自動的に暗号化され、取得時に自動的に復号されます。
| 暗号化方式 | キーの管理 | 特徴 |
|---|---|---|
| SSE-S3 | Amazon S3がキーを管理 | 追加設定不要。デフォルトで有効。キーの管理をAWSに委任 |
| SSE-KMS | AWS KMSがキーを管理 | キーポリシーによるアクセス制御、キーの使用履歴のCloudTrail記録、キーローテーションの制御が可能 |
SSE-S3はキーの管理をすべてAWSに委任するため、運用負荷が低い方式です。一方、SSE-KMSはAWS KMSで管理するカスタマーマネージドキーを使用でき、キーポリシーによる細かいアクセス制御やCloudTrailでのキー使用履歴の監査が可能です。
Data Firehoseから配信されたデータは、配信先のS3バケットに設定された暗号化方式で自動的に暗号化されます。
Amazon Athenaによるクエリ分析
Amazon Athenaは、S3に保存されたデータに対してSQLクエリを直接実行できるサーバーレスのクエリサービスです。S3にデータを格納した状態のまま、テーブル定義を作成してSQLでデータの分析が行えます。
Athenaの主な特徴は以下の通りです。
- サーバーレス: インフラのプロビジョニングが不要
- S3上のデータを直接クエリ: データの移動やロードが不要
- 暗号化データのクエリ: SSE-S3やSSE-KMSで暗号化されたS3データに対して透過的にクエリを実行できる
- 従量課金: スキャンしたデータ量に基づく課金
Athenaは暗号化されたS3バケットのデータに対して追加の設定なしでクエリを実行できるため、暗号化データパイプラインの分析レイヤーとして適しています。
選択肢の比較
機密データの転送・保管・分析に関して、以下の構成パターンが選択肢として挙がることがあります。
| 構成 | 転送中の暗号化 | 保管中の暗号化 | 分析 | 適切か | 理由 |
|---|---|---|---|---|---|
| Data Firehose(TLS)→ S3(SSE)→ Athena | TLS | SSE-S3/SSE-KMS | SQL | はい | 転送中・保管中の暗号化を満たし、サーバーレスで分析可能 |
| S3(SSE-KMS)→ Amazon Macie → Athena | – | SSE-KMS | SQL | いいえ | Macieは機密データの検出サービスであり、データの取り込み・転送の仕組みではない |
| Kinesis Data Streams → KCL → S3 → Athena | TLS | SSE-S3/SSE-KMS | SQL | いいえ | Data Streamsはリアルタイム処理向けで、コンシューマ(KCL)の管理が必要。S3への配信にはカスタムアプリケーションの構築が必要 |
| Transfer Family(FTPS)→ S3 → Glue → QuickSight | FTPS | SSE-S3/SSE-KMS | BI | いいえ | Transfer Familyはファイル転送プロトコル用。ストリーミングデータの取り込みには適さない。Glue+QuickSightはETL+BIの構成で要件に対してオーバースペック |
Amazon Macieとの違い
Amazon Macieは、S3バケット内の機密データ(個人識別情報、クレジットカード番号など)を機械学習とパターンマッチングで自動検出するサービスです。データの暗号化そのものを行うサービスではありません。
| サービス | 役割 | 暗号化への関与 |
|---|---|---|
| Amazon Data Firehose | データの取り込みと配信 | HTTPS(TLS)による転送中の暗号化を提供 |
| Amazon S3 | データの保管 | サーバーサイド暗号化(SSE-S3/SSE-KMS)を提供 |
| Amazon Macie | 機密データの検出・分類 | 暗号化は行わない。暗号化されていないバケットの発見に活用 |
Macieは「暗号化されていないS3バケットを検出する」「機密データが意図せず保存されていないかを調査する」といったセキュリティ監査の用途で使用します。データパイプラインの暗号化要件を満たす構成要素ではない点に注意が必要です。
実践
ここでは、Amazon Data FirehoseでデータをS3に配信し、Athenaでクエリ分析するまでの暗号化データパイプラインをコンソールで構築します。
前提条件
- リージョン:
ap-northeast-1(東京)
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| S3バケット | firehose-encrypted-pipeline-<アカウントID> | Firehoseの配信先(暗号化保存) |
| Firehose ストリーム | encrypted-pipeline-stream | データの取り込みとS3への配信 |
| Athenaデータベース | firehose_lab | テーブルを置くデータベース |
| Athenaテーブル | prescription_data | S3データのクエリ分析 |
手順1: 配信先S3バケットの作成
Data Firehoseの配信先となるS3バケットを作成します。S3はデフォルトでSSE-S3による暗号化が有効になっています。
- AWSマネジメントコンソールにログインし、右上のリージョンが「アジアパシフィック(東京) ap-northeast-1」であることを確認します。
- 上部の検索バーに
S3と入力し、表示された「S3」を選択します。 - 左側ナビゲーションの「汎用バケット」を選択し、「バケットを作成」をクリックします。
- 「一般的な設定」で以下を設定します。
- 1. バケットタイプ: 「汎用」を選択(デフォルト)
- 2. バケット名前空間: 「グローバル名前空間」を選択(デフォルト)
- 3. バケット名:
firehose-encrypted-pipeline-<アカウントID>(グローバル名前空間ではグローバルで一意である必要があるため、アカウントIDを付与します) - 「デフォルトの暗号化」セクションで以下がデフォルトのまま選択されていることを確認します。
- 暗号化タイプ: 「Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3)」
- バケットキー: 「有効にする」
- オブジェクト所有者・ブロックパブリックアクセス・バージョニングなど、その他の項目はデフォルトのままにします。


- ページ下部の「バケットを作成」をクリックします。
作成に成功すると、そのまま作成したバケットの詳細画面が開きます。


手順2: Firehose配信ストリームの作成
Amazon Data Firehoseの配信ストリームを作成します。ソースをDirect PUT、配信先をS3バケットに設定します。
- 上部の検索バーに
Firehoseと入力し、表示された「Amazon Data Firehose」を選択します。 - 「Firehose ストリームを作成」をクリックします。
- 「ソースと送信先を選択」で以下を設定します。ソースと送信先を選ぶと、下に残りの設定項目が展開されます。
- 1. ソース: 「Direct PUT」を選択
- 2. 送信先: 「Amazon S3」を選択
- 3. Firehose ストリーム名:
encrypted-pipeline-stream
ソースと送信先は、Firehose ストリームの作成後に変更できません。


- 「送信先の設定」セクションで以下を設定します。
- 1. S3 バケット: 手順1で作成した
s3://firehose-encrypted-pipeline-<アカウントID>を入力(「参照」から選択することもできます) - 2. 改行の区切り文字: 「有効」を選択(デフォルトは「有効ではありません」)
- 3. S3 バケットプレフィックス:
data/ - 4. S3 バケットエラー出力プレフィックス:
error/ - 「動的パーティショニング」は「有効ではありません」のままにします。
改行の区切り文字は必ず「有効」にします。 無効のままだと、Firehose は複数のJSONレコードを改行なしで連結して1つのオブジェクトに書き込みます。後の手順でAthenaが使うJSON SerDeは1行1レコードを前提とするため、無効のままだと1ファイルあたり先頭の1レコードしか読み取れません。


- 「バッファのヒント、圧縮、ファイル拡張子、暗号化」セクションを展開し、「S3 バッファのヒント」で以下を設定します。
- 1. バッファサイズ:
1MiB(デフォルトは5MiB。テスト用に最小値へ変更) - 2. バッファ間隔:
60秒(デフォルトは300秒。テスト用に短縮) - データレコードの圧縮・ファイル拡張子・サーバー側の暗号化はデフォルトのままにします。


- ページ下部の「Firehose ストリームを作成」をクリックします。
Data Firehoseはストリーム作成時にIAMロール(
KinesisFirehoseServiceRole-...)を自動生成します。このロールには、配信先のS3バケットへの書き込み権限が含まれます。
- 「ステータス」が「作成中」から「アクティブ」になるまで待ちます(数分かかります)。


手順3: テストデータの送信
作成したFirehose配信ストリームにテストデータを送信し、S3に配信されることを確認します。
- Firehose ストリームの詳細画面で「デモデータでテスト」セクションを展開します。
- 送信されるデモデータのサンプル(
TICKER_SYMBOL/SECTOR/CHANGE/PRICEを持つJSON)が表示されます。 - 「ステップ 1」の「デモデータの送信を開始」をクリックします。
- 2分ほど送信した後、「ステップ 2」の「デモデータの送信を停止」をクリックします。


デモデータはブラウザ上のスクリプトが送信します。送信中はこの画面のタブを開いたままにします。バッファ間隔(60秒)が経過するたびに、データがS3へ配信されます。
手順4: S3にデータが暗号化保存されていることの確認
Firehoseから配信されたデータがS3バケットに暗号化された状態で保存されていることを確認します。
- 上部の検索バーに
S3と入力し、表示された「S3」を選択します。 - バケット一覧から
firehose-encrypted-pipeline-<アカウントID>を選択します。 data/プレフィックス配下に年/月/日/時のフォルダ構造でオブジェクトが作成されていることを確認します(フォルダ名はUTCです)。- いずれかのオブジェクトを選択し、「プロパティ」タブを確認します。
- 「サーバー側の暗号化設定」セクションで、暗号化タイプが「Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3)」になっていることを確認します。


これにより、Data FirehoseからS3への配信にHTTPS(TLS)による転送中の暗号化が適用され、S3に保存されたデータにはSSE-S3による保管中の暗号化が適用されていることが確認できます。
手順5: Athenaでクエリ実行
S3に保存されたデータに対してAthenaでクエリを実行します。
Athenaの初期設定
- 上部の検索バーに
Athenaと入力し、表示された「Athena」を選択します。 - 「クエリエディタ」を開きます。クエリ結果の出力先が未設定の場合は、画面上部に設定を促すメッセージが表示されるので、「クエリ設定」タブから出力先のS3バケットを指定します。
- クエリ結果の場所:
s3://firehose-encrypted-pipeline-<アカウントID>/athena-results/ - 既にワークグループ
primaryにクエリ結果の場所が設定されている場合は、そのままで構いません。
データベースとテーブルの作成
- クエリエディタで以下のSQLを実行してデータベースを作成します。
CREATE DATABASE IF NOT EXISTS firehose_lab;- 次に、以下のSQLを実行してFirehoseが配信したデータ用のテーブルを作成します。デモデータはJSON形式のため、JSON SerDeを使用します。
CREATE EXTERNAL TABLE firehose_lab.prescription_data (
TICKER_SYMBOL string,
SECTOR string,
CHANGE double,
PRICE double
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://firehose-encrypted-pipeline-<アカウントID>/data/'
LOCATIONのバケット名は手順1で作成したバケット名に置き換えてください。


クエリの実行
- 以下のSQLを実行して、配信されたデータを確認します。
SELECT * FROM firehose_lab.prescription_data LIMIT 10;

クエリ結果が表示されれば、Data Firehose → S3 → Athenaの暗号化データパイプラインが正常に動作していることが確認できます。Athenaは暗号化されたS3データに対して透過的にクエリを実行するため、暗号化に関する追加設定は不要です。
まとめ
機密データの転送・保管・分析に必要な暗号化要件と、それを満たすサービスの対応を以下にまとめます。
| 要件 | 対応するサービス・機能 |
|---|---|
| 転送中の暗号化 | Amazon Data FirehoseのHTTPS(TLS)エンドポイント |
| 保管中の暗号化 | Amazon S3のサーバーサイド暗号化(SSE-S3 / SSE-KMS) |
| データの分析 | Amazon Athena(S3上の暗号化データに対してSQLクエリを実行) |
| 機密データの検出 | Amazon Macie(暗号化ではなく、機密データの自動検出に使用) |
Data Firehoseは、HTTPS(TLS)による転送中の暗号化が標準で適用され、配信先のS3バケットに設定されたサーバーサイド暗号化で保管中の暗号化も自動的に適用されます。フルマネージドのため、コンシューマアプリケーションの構築やサーバーの管理が不要です。
Kinesis Data Streamsはリアルタイム処理向けのサービスであり、S3への配信にはKCL(Kinesis Client Library)を使ったカスタムアプリケーションが必要です。Transfer Familyはファイル転送プロトコル(SFTP/FTPS/FTP)用のマネージドサーバーであり、ストリーミングデータの取り込みには適しません。
SCS試験では、「転送中と保管中の暗号化を満たすデータパイプライン」に対して、Data Firehose(TLS)+ S3(SSE)+ Athenaの組み合わせが最もシンプルかつ要件を満たす構成であることを把握しておくことが重要です。
参照先
- Amazon Data Firehose とは – Amazon Data Firehose
- Amazon Data Firehose でのデータ保護 – Amazon Data Firehose
- Amazon S3 でのサーバー側の暗号化を使用したデータの保護 – Amazon S3
- Amazon S3 マネージドキーによるサーバー側の暗号化(SSE-S3)の指定 – Amazon S3
- AWS KMS キーによるサーバー側の暗号化(SSE-KMS)の指定 – Amazon S3
- Amazon Athena とは – Amazon Athena
- Amazon Athena での暗号化 – Amazon Athena
- Amazon Macie とは – Amazon Macie












