Amazon Data Firehoseによる暗号化データパイプライン ── 転送中と保管中の暗号化によるセキュアなデータ分析基盤

目次

概要

機密性の高いデータをオンプレミスから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-S3Amazon S3がキーを管理追加設定不要。デフォルトで有効。キーの管理をAWSに委任
SSE-KMSAWS 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)→ AthenaTLSSSE-S3/SSE-KMSSQLはい転送中・保管中の暗号化を満たし、サーバーレスで分析可能
S3(SSE-KMS)→ Amazon Macie → Athena–SSE-KMSSQLいいえMacieは機密データの検出サービスであり、データの取り込み・転送の仕組みではない
Kinesis Data Streams → KCL → S3 → AthenaTLSSSE-S3/SSE-KMSSQLいいえData Streamsはリアルタイム処理向けで、コンシューマ(KCL)の管理が必要。S3への配信にはカスタムアプリケーションの構築が必要
Transfer Family(FTPS)→ S3 → Glue → QuickSightFTPSSSE-S3/SSE-KMSBIいいえ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バケットを検出する」「機密データが意図せず保存されていないかを調査する」といったセキュリティ監査の用途で使用します。データパイプラインの暗号化要件を満たす構成要素ではない点に注意が必要です。

フリーランス案件
クラウドおさる
クラウドキャリアフリーランス

AWS の実務経験があるなら、単価を上げにいく

AWS に特化したフリーランスエージェントです。以下は取り扱い案件の一例です。設計・SRE・セキュリティ・生成 AI の領域で、専門を掛け合わせるほど単価が上がります。

横にスクロールできます。掲載時点の情報のため、募集が終了している場合があります。条件の近い案件をご紹介しますので、お気軽にご相談ください。

実践

ここでは、Amazon Data FirehoseでデータをS3に配信し、Athenaでクエリ分析するまでの暗号化データパイプラインをコンソールで構築します。

前提条件

  • リージョン: ap-northeast-1(東京)
リソース種別リソース名用途
S3バケットfirehose-encrypted-pipeline-<アカウントID>Firehoseの配信先(暗号化保存)
Firehose ストリームencrypted-pipeline-streamデータの取り込みとS3への配信
Athenaデータベースfirehose_labテーブルを置くデータベース
Athenaテーブルprescription_dataS3データのクエリ分析

手順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)」
  • バケットキー: 「有効にする」
  • オブジェクト所有者・ブロックパブリックアクセス・バージョニングなど、その他の項目はデフォルトのままにします。
S3バケット作成画面 ── バケットタイプ・バケット名前空間・バケット名の入力と、デフォルトの暗号化がSSE-S3になっている状態
S3バケット作成画面 ── バケットタイプ・バケット名前空間・バケット名の入力と、デフォルトの暗号化がSSE-S3になっている状態
  • ページ下部の「バケットを作成」をクリックします。

作成に成功すると、そのまま作成したバケットの詳細画面が開きます。

S3バケット作成完了画面(作成成功のメッセージとバケット名が表示されている状態)
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 ストリームの作成後に変更できません。

Firehose ストリーム作成画面 ── ソース(Direct PUT)、送信先(Amazon S3)、ストリーム名が設定されている状態
Firehose ストリーム作成画面 ── ソース(Direct PUT)、送信先(Amazon S3)、ストリーム名が設定されている状態
  • 「送信先の設定」セクションで以下を設定します。
  • 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バケット・改行の区切り文字(有効)・プレフィックスの入力が完了している状態
送信先の設定 ── S3バケット・改行の区切り文字(有効)・プレフィックスの入力が完了している状態
  • 「バッファのヒント、圧縮、ファイル拡張子、暗号化」セクションを展開し、「S3 バッファのヒント」で以下を設定します。
  • 1. バッファサイズ: 1 MiB(デフォルトは 5 MiB。テスト用に最小値へ変更)
  • 2. バッファ間隔: 60 秒(デフォルトは 300 秒。テスト用に短縮)
  • データレコードの圧縮・ファイル拡張子・サーバー側の暗号化はデフォルトのままにします。
バッファのヒント ── バッファサイズ1MiB・バッファ間隔60秒に変更した状態
バッファのヒント ── バッファサイズ1MiB・バッファ間隔60秒に変更した状態
  • ページ下部の「Firehose ストリームを作成」をクリックします。

Data Firehoseはストリーム作成時にIAMロール(KinesisFirehoseServiceRole-...)を自動生成します。このロールには、配信先のS3バケットへの書き込み権限が含まれます。

  • 「ステータス」が「作成中」から「アクティブ」になるまで待ちます(数分かかります)。
Firehose ストリームの詳細画面(ステータスが「アクティブ」になっている状態)
Firehose ストリームの詳細画面(ステータスが「アクティブ」になっている状態)

手順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)」になっていることを確認します。
S3オブジェクトのプロパティ画面 ── サーバー側の暗号化設定がSSE-S3になっていることが確認できる状態
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で作成したバケット名に置き換えてください。

Athenaクエリエディタでテーブル作成SQLを実行した画面(「クエリは成功しました。」と表示されている状態)
Athenaクエリエディタでテーブル作成SQLを実行した画面(「クエリは成功しました。」と表示されている状態)

クエリの実行

  • 以下のSQLを実行して、配信されたデータを確認します。
SELECT * FROM firehose_lab.prescription_data LIMIT 10;
AthenaでSELECTクエリを実行した結果 ── S3上の暗号化データに対してクエリが正常に実行され、デモデータのレコードが表示されている状態
AthenaでSELECTクエリを実行した結果 ── S3上の暗号化データに対してクエリが正常に実行され、デモデータのレコードが表示されている状態

クエリ結果が表示されれば、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の組み合わせが最もシンプルかつ要件を満たす構成であることを把握しておくことが重要です。

参照先

フリーランス案件
クラウドおさる
クラウドキャリアフリーランス

AWS の実務経験があるなら、単価を上げにいく

AWS に特化したフリーランスエージェントです。以下は取り扱い案件の一例です。設計・SRE・セキュリティ・生成 AI の領域で、専門を掛け合わせるほど単価が上がります。

横にスクロールできます。掲載時点の情報のため、募集が終了している場合があります。条件の近い案件をご紹介しますので、お気軽にご相談ください。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社ジェニュイン(https://genuine-pt.jp)の代表取締役.

2018年〜インフラエンジニアとしてキャリアをスタートし、オンプレミスのネットワーク・サーバ環境で3年半、クラウド環境で4年半の8年間エンジニアとして従事。
2021年に佐藤氏の創業した株式会社Luxyを引き継ぎ、代表に就任。
その後アガルートグループ内の株式会社ジェニュインと合併。
合併後同社代表に就任。

目次