Amazon DEA-C01: データセキュリティ、ガバナンス、コンプライアンス — 学習ガイド
こちらの一部です: Amazon Data Engineer Associate DEA-C01 — 学習ガイド. 検証済みの解答で練習: Amazon試験ハブ, または時間制限付き模擬試験に挑戦: ExamRoll.io.
このドメインでは、分析を可能にしながら、データを保護し、監査可能で、コンプライアンスを遵守した状態に保つためのコントロール、サービス、および運用パターンを扱います。データエンジニアは、分析ワークフローがPIIを公開したり、サービス統合を壊したりすることなく実行されるように、暗号化、アクセス制御、検出、マスキングを設計する必要があります。以下のセクションでは、S3/Redshiftの暗号化、KMS、IAMとリソースポリシー、Lake Formationのきめ細かなアクセス制御、Macieによる検出、VPCエンドポイントなどのネットワーク制御といった具体的なAWSサービスと設定に焦点を当て、パイプラインを設計する際に使用する決定基準についても解説します。
データサービスにおける保管時および転送中の暗号化
すべてのAWSサービスエンドポイントとクライアントSDKでTLSを使用して転送中のデータを暗号化します。これは、サービスエンドポイント、ALB、API Gateway、およびS3バケットポリシーでHTTPSを要求することで強制します。S3での保管時の暗号化には、SSE-S3、SSE-KMS、SSE-C、またはクライアントサイド暗号化の中から、以下のトレードオフとCLI/コンソールパターンを考慮して選択します。
- SSE-S3 (AWSが管理するAES-256): 最もシンプルです。バケットのデフォルトとして有効にするには、
undefined
を使用します。
- SSE-KMS (AWS KMSキー): キーローテーション、IAMおよびKMSキーポリシー、CloudTrailによる監査をサポートします。SSE-KMSでバケットのデフォルトを設定し、
--sse-kms-key-idを指定します。サービスとプリンシパルには、IAMアクセス許可とKMSキーポリシーの両方でアクセス権を付与する必要があります(下記のKMSキーポリシーの注意点を参照)。 - SSE-C (顧客提供のキー): リクエストごとに顧客がキーを提供します。KMSは使用しません。キーの転送とキーが漏洩した場合の対応に運用上の複雑さが伴います。
- クライアントサイド暗号化: アップロード前にAWS Encryption SDKまたはクライアントライブラリを使用してエンベロープ暗号化で暗号化します。キーはクライアントまたはカスタムのKMS使用方法によって管理されます。平文のキーマテリアルを完全に管理する必要がある場合に使用します。
決定基準:
- 運用オーバーヘッドが低く、顧客管理キーが不要な場合はSSE-S3を使用します。
- 監査性、キーローテーション、およびアカウントやサービス間で暗号化されたスナップショットを共有する場合はSSE-KMSを使用します。
- AWSが平文またはキーマテリアルにアクセスできないようにする必要がある場合は、SSE-Cまたはクライアントサイド暗号化を使用します。
Redshiftの暗号化: クラスター作成時に--encryptedと--kms-key-idを指定するか、コンソール経由で暗号化を有効にします。暗号化されていないクラスターで暗号化をインプレースで有効にすることはできません。既存のクラスターのスナップショットを暗号化し、暗号化されたクラスターにリストアするには、aws redshift create-clusterまたはRestoreFromClusterSnapshotワークフローで--kms-key-idを指定して使用します。KMSキーポリシーでは、Redshiftがキーを使用すること(kms:Encrypt, kms:Decrypt, kms:GenerateDataKey)を明示的に許可する必要があります。
すべてのKMSで保護されたサービスについて、転送中のTLSを確保し、ログやスナップショットでの平文の露出を制限してください。
データアクセスのためのIAMポリシーとリソースベースのポリシー
IAMアイデンティティポリシーとリソースベースのポリシー(S3バケットポリシー、KMSキーポリシー、VPCエンドポイントポリシー)が連携してアクセスを決定します。具体的なアプローチは次のとおりです。
- コンピューティング/サービスプリンシパル(EMR, Glue, Redshift, Lambda)にはIAMロールを使用し、必要なS3、Glue、Redshift、KMSのアクションを許可する最小権限のポリシーをアタッチします。
- リソースベースのポリシーを使用して、どのプリンシパルやVPCエンドポイントがS3バケットやAPIにアクセスできるかを制限します。DenyはAllowを上書きするため、明示的なDenyステートメントは慎重に適用します。
- VPCに制限されたアクセスの場合、S3用のゲートウェイVPCエンドポイントと、Glue、KMS、Secrets Manager用のインターフェイスエンドポイントを作成し、エンドポイントポリシーでアクセスを制御します。
CLI/コンソールパターン:
- ゲートウェイエンドポイントの作成:
undefined
- Glue用インターフェイスエンドポイントの作成:
undefined
決定基準:
- アカウント間の制約を強制したり、特定のVPCエンドポイントからのトラフィックを要求したりする場合は、リソースポリシーを使用します。
- アイデンティティ中心のアクセス許可にはIAMを使用し、サービスがキーを使用することを承認するためにはKMSキーポリシーを使用します。IAMだけではKMSの使用を許可するには不十分です。
Lake Formationのきめ細かなアクセス許可
Lake Formationは、Glueデータカタログ上でデータレイクのアクセス制御を一元化し、AthenaおよびGlueジョブに対して列レベルおよび行レベルのセキュリティを提供します。主なパターンは次のとおりです。
- S3のロケーションをLake Formationにデータレイクのロケーションとして登録し、それらのロケーションを読み書きするロールに
DATA_LOCATION_ACCESSを付与します。 - Lake Formationコンソールまたは
aws lakeformation grant-permissionsを介して、テーブルレベルおよび列レベルのアクセス許可を付与します。列レベルの付与では、列リストパラメータを使用し、データカタログを使用するAthenaおよびGlueのクエリに影響します。 - 行レベルのセキュリティについては、テーブルにLF-tagsまたは行フィルターを定義し、Athenaから返されるデータに述語を適用するポリシーをアタッチします。行レベルのフィルターは、クエリ計画中にLake Formationサービスによって評価されます。
運用上の詳細:
- Lake Formationのアクセス許可とIAMのアクセス許可の両方が評価され、最も制限の厳しい結果が適用されます。ジョブがIAMロールによるS3アクセスとLake Formationによる許可の両方を持つようにしてください。
- Athenaを使用する場合、ワークグループがGlueデータカタログを使用するように設定し、クエリ結果のS3ロケーションに適切なLFアクセス権を設定します。
決定基準:
- 下流のアナリストから機密性の高い列を隠す必要がある場合は、Lake Formationの列レベルの制御を使用します。
- プリンシパルごとに行の述語で可視性を制限する必要があるマルチテナントデータセットには、行レベルのポリシーを使用します。
- 粗粒度の強制(バケット/オブジェクトレベル)には引き続きIAMおよびS3バケットポリシーを使用し、カタログ駆動のきめ細かな強制にはLake Formationを使用します。
データマスキング、トークン化、PIIの取り扱い
Amazon Macieを使用してS3バケットをスキャンし、マネージドデータ識別子を使って分類ジョブを実行することでPIIを検出します。MacieはPIIの自動検出とアラートを提供し、検出結果はSecurity HubやCloudWatch Eventsにルーティングして下流のワークフローに連携できます。Macieジョブは、コンソールまたはaws macie2 create-classification-jobで設定し、S3バケットのスコープを選択して、マネージドデータ識別子を選びます。
マスキングとトークン化について:
- AWS Glueの変換(Glue ETL PySpark)またはAWS Lambdaを使用して、取り込み中に決定論的またはフォーマットを維持するマスキング/トークン化を適用します。一貫した処理のために、AWS Glue Studioのジョブブックマークとジョブパラメータの利用を検討します。
- トークンが可逆である必要があるトークン化には、KMSでバックアップされたHSMまたはサードパーティのトークン化サービスを使用します。トークンマップはKMSで暗号化されたセキュアなDynamoDBテーブルに保存し、認可されたサービスにアクセスを制限します。
- 不可逆なマスキングには、Secrets Managerからのセキュアなソルトを使用して一方向ハッシュ(ソルト付き)を適用し、結合(join)を壊さないようにソルトを慎重にローテーションします。
ネットワーキングとプライベートトラフィック:
- GlueおよびSecrets ManagerにはS3ゲートウェイエンドポイントとインターフェイスエンドポイントを使用し、データトラフィックをAWSネットワーク内に留め、パブリックインターネットへの露出を避けます。
- VPCエンドポイントポリシーとS3バケットポリシーを組み合わせて、エンドポイントプリンシパルからのトラフィックにアクセスを制限します。
よくある落とし穴と判断基準
- 既存の暗号化されていないRedshiftクラスターで暗号化を有効にすることはできません。暗号化されたクラスターを作成するには、
--kms-key-idを指定してスナップショットから新しいクラスターに復元します。 - KMSキーポリシーでは、AWSデータサービスのプリンシパル(例:
glue.amazonaws.com、redshift.amazonaws.com)にGenerateDataKey/Decryptの権限を明示的に付与する必要があります。IAMロールの権限だけでは不十分です。 - Lake FormationとIAMの権限は両方評価されます。どちらかがアクセスを拒否するか、必要な権限がない場合、アクセスはブロックされます。IAMロールのS3アクセス権とLake Formationのテーブル/列権限の両方を付与してください。
- 明示的な
Denyを含むS3バケットポリシーは、IAMのAllowを上書きします。サービスロールやクロスアカウントアクセスを意図せずブロックしているDenyステートメントがないか、バケットポリシーを監査してください。 - VPCエンドポイントポリシーやエンドポイントの設定ミスは、サービスへのトラフィックをサイレントにブロックする可能性があります。ゲートウェイエンドポイントの場合はエンドポイントプリンシパルとルートテーブルの関連付けを、インターフェイスエンドポイントの場合はセキュリティグループを検証してください。
- MacieはS3への読み取りアクセスと適切なバケットポリシーを必要とします。Macieのサービスプリンシパルが許可されていることを確認するか、必要な権限を持つロールからスキャンを実行してください。
実践的な問題:ユースケースシナリオ
Acme Health Analytics社は、患者のCSVをS3データレイクに保存しており、アナリストが集計クエリを実行できる能力を維持しつつ、非識別化されたフィールドにアクセスできるようにする必要があります。トラフィックは決してパブリックインターネットを経由してはなりません。
- S3データレイクの場所をLake Formationに登録し、専用のデータレイク管理者ロールを作成します。
- SSE-KMSでバケットのデフォルト暗号化を設定し、キーポリシーでGlue、Athena、RedshiftのサービスプリンシパルおよびアナリストのIAMロールに明示的にアクセスを許可するKMSキーを作成します。
- Lake Formationを使用してアナリストにテーブルレベルの
SELECT権限を付与しますが、PIIを含む列には列レベルの拒否を適用し、マルチテナントのセグメンテーションが必要な場合は行レベルのフィルターを作成します。 - Macieの分類ジョブを実行してバケット内に残っているPIIを発見し、Glue ETLジョブでマスキング/トークン化することで修正します。可逆トークンにはクライアントサイドまたはトークン化パターンを使用し、不可逆マスキングにはハッシュを使用します。
- S3ゲートウェイVPCエンドポイントと、GlueおよびSecrets Manager用のインターフェイスエンドポイントを作成します。エンドポイントポリシーを適用してVPCトラフィックへのアクセスを制限し、エンドポイントプリンシパルのみを許可するようにS3バケットポリシーを調整します。
AWSのベストプラクティスの論理的根拠:KMSによる暗号化、Lake Formationによるきめ細かなカタログ制御、プライベートVPCエンドポイントを組み合わせて多層防御を強制します。暗号化は保管中のデータを保護し、Lake Formationはどの列/行が可視かを制御し、VPCエンドポイントはパブリックネットワークへの露出を回避し、KMSポリシーはサービスが実際にデータを復号できることを保証します。
← データクエリと分析 · すべてのドメイン · データパイプラインの監視とトラブルシューティング →
これらの問題を練習する → · ExamRoll.ioで時間制限付き練習 →
Pass the whole exam — not just this question
You found this answer. Get every verified question and explanation in one place, and save hours of prep. Free to start.
試験に合格する →