Amazonレッドシフト は超並列処理 (MPP) の完全マネージド型のペタバイト規模のデータ ウェアハウスであり、既存のビジネス インテリジェンス ツールを使用してすべてのデータを簡単かつ費用対効果の高い方法で分析できます。
企業がデータ ウェアハウジング ソリューションを Amazon Redshift に合わせてモダナイズしている場合、個人を特定できる情報 (PII) や保護対象の医療情報 (PHI) などの機密データに追加のデータ保護メカニズムを実装することが一般的な要件です。厳格なデータ セキュリティとプライバシーの義務。 Amazon Redshift は、ロールベースのアクセス制御、行レベルのセキュリティ、列レベルのセキュリティ、および動的データ マスキングを、その他のデータベース セキュリティ機能とともに提供し、組織がきめ細かいデータ セキュリティを適用できるようにします。
セキュリティに敏感なアプリケーションでは、デフォルトのサーバー側の暗号化 (保存データの暗号化) に加えて、機密データをきめ細かく保護するために、列レベル (またはフィールド レベル) の暗号化が必要になることがよくあります。 つまり、機密データは常にディスク上で暗号化され、適切な権限を持つユーザーがデータの復号化を要求するまでメモリ内で暗号化されたままにする必要があります。 列レベルの暗号化は、特定のユーザーまたはアプリケーションのみがアクセスできるように、システム処理全体で機密データを保護する追加のセキュリティ レイヤーを提供します。 この暗号化により、データを必要としており、データを復号化するために必要な資格情報を持っている承認済みのプリンシパルのみが、データを復号化できるようになります。
この投稿では、Amazon Redshift で独自の列レベルの暗号化メカニズムを実装する方法を示します。 AWSグルー データを Amazon Redshift にロードする前に機密データを暗号化し、使用する AWSラムダ として ユーザー定義関数 (UDF) を Amazon Redshift で使用して、標準の SQL ステートメントを使用してデータを復号化します。 Lambda UDF は、Lambda でサポートされている任意のプログラミング言語 (Java、Go、PowerShell、Node.js、C#、Python、Ruby、カスタム ランタイムなど) で記述できます。 Lambda UDF は、SELECT、UPDATE、INSERT、DELETE などの任意の SQL ステートメント、およびスカラー関数が許可されている SQL ステートメントの任意の句で使用できます。
ソリューションの概要
次の図は、ソリューション アーキテクチャを示しています。
このアーキテクチャをセットアップする方法を説明するために、次の手順を説明します。
- 合成 PII データを含むサンプル データ ファイルを Amazon シンプル ストレージ サービス (Amazon S3)バケット。
- サンプルの 256 ビット データ暗号化キーが生成され、安全に保存されます。 AWSシークレットマネージャー.
- AWS Glue ジョブは、S3 バケットからデータ ファイルを読み取り、Secrets Manager からデータ暗号化キーを取得し、PII 列のデータ暗号化を実行し、処理されたデータセットを Amazon Redshift テーブルにロードします。
- Secrets Manager から同じデータ暗号化キーを参照する Lambda 関数を作成し、受信したペイロード データのデータ復号化ロジックを実装します。
- Lambda 関数は、 ラムダ UDF 適切な AWS IDおよびアクセス管理 (IAM) Amazon Redshift クラスターが引き受けることを承認されているロール。
- 以下を使用してサンプルクエリを発行することにより、データ復号化機能を検証できます。 AmazonRedshiftクエリエディターv2.0. 必要に応じて、独自の SQL クライアントまたはビジネス インテリジェンス ツールでテストすることもできます。
前提条件
ソリューションをデプロイするには、次の前提条件を満たしていることを確認してください。
- 一つ持っている AWSアカウント. この投稿では、次を使用して必要な AWS リソースを構成します。 AWS CloudFormation セクションに
us-east-2
領域。 - Amazon S3、AWS Glue、Amazon Redshift、Secrets Manager、Lambda、および AWS クラウド9.
AWSCloudFormationを使用してソリューションをデプロイする
次の手順を実行して、CloudFormation テンプレートを使用して必要な AWS リソースをプロビジョニングします。
- AWSアカウントにサインインします。
- 選択する 発射スタック:
- AWS リージョンに移動します (たとえば、
us-east-2
). - スタック名、スタックの名前を入力するか、デフォルトのままにします (
aws-blog-redshift-column-level-encryption
). - RedshiftMasterユーザー名、Amazon Redshift クラスターの管理者ユーザー アカウントのユーザー名を入力するか、デフォルトのままにします (
master
). - Redshiftマスターユーザーのパスワードで、Amazon Redshift クラスターの管理者ユーザー アカウントの強力なパスワードを入力します。
- 選択 AWS CloudFormationがIAMリソースを作成する可能性があることを認めます.
- 選択する スタックを作成.
CloudFormation スタックの作成プロセスが完了するまでに約 5 ~ 10 分かかります。
- スタックの作成が完了すると、スタック上に 出力 タブで、次の値を記録します。
AWSCloud9IDE
AmazonS3BucketForDataUpload
IAMRoleForRedshiftLambdaUDF
LambdaFunctionName
サンプル データ ファイルを Amazon S3 にアップロードする
列レベルの暗号化機能をテストするには、 合成データのサンプル によって生成されます モッカルー. サンプル データセットには、合成 PII と、電話番号、電子メール アドレス、クレジット カード番号などの機密フィールドが含まれています。 この投稿では、クレジット カード番号フィールドを暗号化する方法を示しますが、独自の要件に応じて他の PII フィールドに同じ方法を適用できます。
CloudFormation スタックのセットアップ中に、AWS Cloud9 インスタンスがプロビジョニングされます。 AWS Cloud9 コンソールから、またはキーを使用して CloudFormation スタック出力から取得した URL にアクセスして、インスタンスにアクセスできます。 AWSCloud9IDE
.
AWS Cloud9 ターミナルで、次のコマンドを実行してサンプル データセットを S3 バケットにコピーします。
シークレットを生成し、Secrets Manager を使用して保護します
データ暗号化キーとして使用する 256 ビットのシークレットを生成します。 次の手順を完了します。
- AWS Cloud9 環境で新しいファイルを作成します。
- 次のコード スニペットを入力します。 私たちは、 暗号 パッケージを使用してシークレットを作成し、 AWS SDK for Python(Boto3) Secrets Manager でシークレット値を安全に保存するには:
- ファイル名を付けてファイルを保存します
generate_secret.py
(またはで終わる任意の名前.py
). - 以下を実行して、必要なパッケージをインストールします。
pip install
ターミナルでのコマンド: - 次のコマンドを使用して Python スクリプトを実行し、シークレットを生成します。
Amazon Redshift でターゲット テーブルを作成する
CloudFormation スタックのセットアップ中に、単一ノードの Amazon Redshift クラスターがプロビジョニングされます。 暗号化された PII 列を含むデータセットを格納するためのターゲット テーブルを作成するには、次の手順を実行します。
- Amazon Redshift コンソールで、プロビジョニングされたクラスターのリストに移動し、クラスターを選択します。
- クラスタに接続するには、 クエリデータ ドロップダウンメニュー、選択 クエリエディタv2でのクエリ.
- Amazon Redshift Query Editor V2 を初めて使用する場合は、[デフォルト設定] を選択して受け入れます。 アカウントを構成する.
- クラスターに接続するには、クラスター名を選択します。
- データベース、 入る
demodb
. - ユーザー名、 入る
master
. - パスワード 、 パスワードを入力してください。
CloudFormation の設定に従って、ユーザー名とパスワードを変更する必要がある場合があります。
ベスト プラクティスとして、可能な限り小さい列サイズを使用することをお勧めします。特定のユース ケースごとに、これらのテーブル定義を変更する必要がある場合があります。 必要以上に大きな列を作成すると、データ テーブルのサイズに影響を与え、クエリのパフォーマンスに影響を与えます。
AWS Glue でソースと宛先の Data Catalog テーブルを作成する
CloudFormation スタックは、3 つの AWS Glue データ クローラーをプロビジョニングしました。XNUMX つは Amazon SXNUMX データ ソース用で、もう XNUMX つは Amazon Redshift データ ソース用です。 クローラーを実行するには、次の手順を実行します。
- AWS Glue コンソールで、選択します Crawlers ナビゲーションペインに表示されます。
- という名前のクローラーを選択します
glue-s3-crawler
、を選択します クローラーを実行する クローラー ジョブをトリガーします。 - という名前のクローラーを選択します
glue-redshift-crawler
、を選択します クローラーを実行する.
クローラーが完成したら、 テーブル類 結果を確認するためのページ。 の下に登録された XNUMX つのテーブルが表示されます。 demodb
データベース。
AWS Glue ETL ジョブを作成してデータ暗号化を実行する
CloudFormation スタックのセットアップの一部として AWS Glue ジョブがプロビジョニングされますが、抽出、変換、ロード (ETL) スクリプトは作成されていません。 ETL スクリプトを作成し、 /glue-script
AWS Glue ジョブを実行するために、プロビジョニングされた S3 バケットの下のフォルダ。
- AWS Cloud9 コンソールを使用するか、キーを使用して CloudFormation スタック出力から取得した URL にアクセスして、AWS Cloud9 環境に戻ります。
AWSCloud9IDE
.
私たちは、使用 悪口 AES-SIV 暗号化アルゴリズムを使用して決定論的暗号化を実装するためのパッケージです。これは、任意のプレーン テキスト値に対して、生成された暗号化された値が常に同じであることを意味します。 この暗号化アプローチを使用する利点は、ポイント ルックアップ、等価結合、グループ化、および暗号化された列のインデックス作成が可能になることです。 ただし、決定論的暗号化を性別、ブール値、ステータス フラグなどのカーディナリティの低いデータに適用する場合は、潜在的なセキュリティへの影響にも注意する必要があります。
- AWS Cloud9 環境で新しいファイルを作成し、次のコード スニペットを入力します。
- スクリプトをファイル名で保存します
pii-data-encryption.py
. - 次のコマンドを実行して、スクリプトを目的の S3 バケットの場所にコピーします。
- スクリプトが正常にアップロードされたことを確認するには、 Jobs > Create New Job AWS Glue コンソールのページ。次の名前のジョブを見つけることができるはずです。
pii-data-encryption-job
. - 選択する ラン AWS Glue ジョブをトリガーします。まず、AWS Glue データ カタログに登録されている S3 バケットからソース データを読み取り、次に列マッピングを適用してデータを期待されるデータ型に変換し、続いて PII フィールドの暗号化を実行し、最後に暗号化されたデータをターゲット Redshift テーブルに追加します。 このサンプル データセットでは、プロセス全体が 5 分以内に完了するはずです。に切り替えることができます Active Runs タブでジョブのステータスを監視します。
データ復号化を実行するように Lambda 関数を設定する
CloudFormation スタックのセットアップ中に、データ復号ロジックを備えた Lambda 関数がデプロイされます。 関数は Lambda コンソールで見つけることができます。
以下は、Lambda 関数で使用される Python コードです。
Lambda 関数を独自にデプロイする場合は、必ず 悪口 あなたのパッケージ 展開パッケージ.
Amazon Redshift で Lambda UDF を登録する
Lambda で定義されたカスタム関数を SQL クエリの一部として使用する Lambda UDF を作成できます。 Lambda UDF は Lambda で管理され、アクセス権限を制御して、Amazon Redshift でこれらの UDF を呼び出すことができます。
- Amazon Redshift Query Editor V2 に戻り、Lambda UDF を登録します。
-
CREATE EXTERNAL FUNCTION
コマンドを実行し、Amazon Redshift クラスターが引き受けて Lambda を呼び出すことが承認されている IAM ロールを提供します。
CloudFormation スタックで Lambda 名と Amazon Redshift IAM ロールを見つけることができます 出力 タブ:
LambdaFunctionName
IAMRoleForRedshiftLambdaUDF
Amazon Redshift で列レベルの暗号化機能を検証する
デフォルトでは、新しい Lambda UDF を実行する権限が付与されています PUBLIC
. 新しく作成した UDF の使用を制限するには、 PUBLIC
次に、特定のユーザーまたはグループに権限を付与します。 Lambda UDF のセキュリティと権限の詳細については、次を参照してください。 Lambda UDF のセキュリティと権限の管理.
あなたは superuser
または持っている sys:secadmin
次の SQL ステートメントを実行するロール:
まず、実行します SELECT
非常に機密性の高いデータ フィールド、この場合は registered_credit_card
列は、Amazon Redshift テーブルで暗号化されるようになりました。
Lambda UDF を使用する権限が付与されていない通常のデータベース ユーザーの場合、Lambda UDF を使用しようとすると、権限が拒否されたというエラーが表示されます。 pii_decrypt()
関数:
データの復号化に Lambda UDF を使用する権限を付与された特権データベース ユーザーは、 pii_decrypt()
関数:
オリジナル registered_credit_card
に示すように、値を正常に取得できます。 decrypted_credit_card
コラム。
清掃
今後料金が発生しないようにするには、この投稿の一部として作成したすべての AWS リソースを必ずクリーンアップしてください。
CloudFormation スタックは、AWS CloudFormation コンソールまたは AWSコマンドラインインターフェイス (AWS CLI)。 デフォルトのスタック名は aws-blog-redshift-column-level-encryption
.
まとめ
この投稿では、Amazon Redshift にカスタムの列レベルの暗号化ソリューションを実装する方法を示しました。これにより、クラウド データ ウェアハウスに保存された機密データに追加の保護レイヤーが提供されます。 CloudFormation テンプレートを使用すると、特定のビジネス シナリオに合わせてさらにカスタマイズできるデータ パイプラインを簡単にセットアップできます。 また、AWS Glue ETL コードを変更して、複数のデータ フィールドを同時に暗号化したり、異なる列に異なるデータ暗号化キーを使用してデータ セキュリティを強化したりすることもできます。 このソリューションを使用すると、人間のアクターがデータ ウェアハウスにプレーン テキストで格納されている機密データにアクセスできる機会を制限できます。
このソリューションとソースコードの詳細については、次のWebサイトをご覧ください。 GitHubリポジトリ. Amazon Redshift UDF を使用してさまざまなビジネス上の問題を解決する方法の詳細については、次を参照してください。 ユーザー定義関数 (UDF) の使用例 および Amazon Redshift UDF.
著者について
アーロンチョン は、アマゾン ウェブ サービス香港のエンタープライズ ソリューション アーキテクトです。 彼はデータ分析ドメインを専門としており、幅広い顧客と協力してビッグデータ分析プラットフォームを構築し、データ エンジニアリング プラクティスを最新化し、AI/ML の民主化を提唱しています。
- SEO を活用したコンテンツと PR 配信。 今日増幅されます。
- Platoblockchain。 Web3メタバースインテリジェンス。 知識の増幅。 こちらからアクセスしてください。
- 情報源: https://aws.amazon.com/blogs/big-data/implement-column-level-encryption-to-protect-sensitive-data-in-amazon-redshift-with-aws-glue-and-aws-lambda-user-defined-functions/
- :は
- $UP
- 10
- 100
- 107
- 28
- 67
- 7
- 8
- 9
- a
- アーロン・P・コーエン
- できる
- 私たちについて
- 同意
- アクセス
- 従った
- 認める
- 俳優
- NEW
- 住所
- 管理人
- 支持者
- AES
- 影響を及ぼす
- AI / ML
- アルゴリズム
- すべて
- 常に
- Amazon
- Amazon Webサービス
- 分析論
- 分析します
- および
- 申し込む
- 適用
- アプローチ
- 建築
- です
- 引数
- 引数
- 周りに
- AS
- At
- 承認
- 避ける
- AWS
- AWS クラウド9
- AWS CloudFormation
- AWSグルー
- AWSラムダ
- バック
- BE
- になる
- 恩恵
- BEST
- ビッグ
- ビッグデータ
- ビルド
- ビジネス
- ビジネス・インテリジェンス
- ビジネス
- (Comma Separated Values) ボタンをクリックして、各々のジョブ実行の詳細(開始/停止時間、変数値など)のCSVファイルをダウンロードします。
- by
- コール
- 缶
- カード
- 場合
- カタログ
- 一定
- 変化する
- 課金
- 選択する
- 選択する
- クライアント
- クラウド
- Cloud9
- クラスタ
- コード
- コラム
- コラム
- コマンドと
- コンプリート
- 記入済みの
- 完了
- お問合せ
- 接続
- 領事
- 含まれています
- コンテキスト
- コントロール
- コスト効率の良い
- クローラー
- 作ります
- 作成した
- 作成
- 創造
- Credentials
- クレジット
- クレジットカード
- 暗号
- カスタム
- Customers
- カスタマイズ
- データ
- データ分析
- データ保護
- データセキュリティ
- データのセキュリティとプライバシー
- データウェアハウス
- データベース
- 解読する
- デフォルト
- 定義済みの
- 実証します
- 実証
- 展開します
- 展開
- デスティネーション
- 異なります
- ドメイン
- ダウンロード
- 間に
- ダイナミック
- 簡単に
- エディタ
- どちら
- enable
- では使用できません
- 暗号化
- エンジニアリング
- 強化された
- 確実に
- 入力します
- Enterprise
- エンタープライズ・ソリューション
- 環境
- 平等
- エラー
- 特に
- エーテル(ETH)
- イベント
- 例
- 除く
- 実行します
- 既存の
- 予想される
- 外部
- エキス
- Failed:
- 特徴
- フィールド
- フィールズ
- File
- 最後に
- もう完成させ、ワークスペースに掲示しましたか?
- 名
- 初回
- フラグ
- 続いて
- フォロー中
- から
- 完全に
- function
- 機能性
- 機能
- さらに
- 未来
- 性別
- 生成する
- 生成された
- 与えられた
- 与える
- Go
- 助成金
- 付与された
- グループの
- 持ってる
- 健康
- 健康情報
- 非常に
- ホン
- 香港
- 認定条件
- How To
- しかしながら
- HTML
- HTTP
- HTTPS
- 人間
- IAM
- ID
- アイデンティティ
- 影響
- 実装する
- 実装
- import
- in
- その他の
- include
- 含めて
- 産業
- info
- 情報
- install
- インテリジェンス
- 問題
- 発行
- IT
- Java
- ジョブ
- ジョイン
- JPG
- JSON
- キー
- キー
- 香港
- ESL, ビジネスESL <br> 中国語/フランス語、その他
- より大きい
- 起動する
- 層
- LEARN
- コメントを残す
- LIMIT
- LINE
- リスト
- 負荷
- ローディング
- 負荷
- 場所
- 長い
- make
- 作る
- 管理します
- マネージド
- マネージャー
- 委任
- 大規模
- マックス
- 手段
- メカニズム
- メモリ
- メニュー
- 方法
- かもしれない
- 分
- 近代化します
- 修正する
- モニター
- 他には?
- の試合に
- 名
- 名前付き
- すなわち
- ナビゲート
- ナビゲーション
- 必要
- 必要
- 新作
- Node.js
- 数
- 得
- 機会
- of
- on
- ONE
- 注文
- 組織
- オリジナル
- OS
- その他
- 出力
- 自分の
- パッケージ
- パッケージ
- ページ
- ペイン
- 並列シミュレーションの設定
- 部
- パスワード
- 実行する
- パフォーマンス
- 実行
- 実行する
- 許可
- パーミッション
- 個人的に
- 電話
- 敬虔な
- パイプライン
- シンプルスタイル
- プラットフォーム
- プラトン
- プラトンデータインテリジェンス
- プラトデータ
- ポイント
- 可能
- ポスト
- 潜在的な
- PowerShellの
- 練習
- プラクティス
- 前提条件
- プライバシー
- 特権を持つ
- 特権
- 問題
- プロセス
- 処理
- プログラミング
- プログラミング言語
- 適切な
- 守る
- 保護された
- 保護
- 提供します
- は、大阪で
- 公共
- Python
- 範囲
- 読む
- 受け
- 推奨する
- 記録
- 地域
- 登録
- 登録された
- レギュラー
- 規制
- 規制産業
- 残る
- replace
- 要求
- 必要とする
- の提出が必要です
- 要件
- 要件
- リソース
- 応答
- REST
- 制限する
- 結果
- return
- 収益
- 職種
- ラン
- ランニング
- 同じ
- サンプル データセット
- Save
- SC
- シナリオ
- SDDK
- 秘密
- 安全に
- しっかりと
- セキュリティ
- 敏感な
- サービス
- セッション
- セッションに
- 設定
- 設定
- すべき
- 示す
- 簡単な拡張で
- サイズ
- 最小
- So
- 溶液
- ソリューション
- 解決する
- ソース
- ソースコード
- スパーク
- 専門にする
- 特定の
- SQL
- 安定した
- スタック
- 標準
- ステートメント
- 文
- Status:
- ステップ
- ストレージ利用料
- 店舗
- 保存され
- 厳格な
- 文字列
- 強い
- 成功
- 首尾よく
- そのような
- サポート
- スイッチ
- 合成
- 合成データ
- テーブル
- 取り
- ターゲット
- template
- ターミナル
- test
- それ
- ソース
- アプリ環境に合わせて
- ボーマン
- 介して
- 全体
- 時間
- 〜へ
- 豊富なツール群
- top
- 最適化の適用
- トリガー
- true
- 下
- アップデイト
- アップロード
- URL
- 使用法
- つかいます
- 使用事例
- ユーザー
- users
- 検証
- 値
- 価値観
- 確認する
- 、
- 倉庫
- 倉庫保管
- 仕方..
- ウェブ
- Webサービス
- which
- 誰
- ワイド
- 広い範囲
- 意志
- 以内
- 無し
- 言葉
- 作品
- 書かれた
- あなたの
- ゼファーネット