AWSデータストアで機密データを保護するベストプラクティス!センシティブなデータの扱い方を解説します😎

AWSデータストアで機密データを保護するベストプラクティス!センシティブなデータの扱い方を解説します😎

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!

今回は、AWS データストアで機密データを保護するベストプラクティスについて、実装方法を交えて解説していきたいと思います。

エンジニアにとって、セキュリティ問題は十分すぎるほど気を配りたいポイントです。ぜひ最後までご覧ください。

想定する読者

  • AWS での機密データ保護のベストプラクティスについて知りたいヒト
  • 機密データ保護のためにすべきことを知りたいヒト

はじめに

AWS CAF の Security Perspective に則りデータ保護・実装方法について考えます

クラウド設計に必要な、さまざまなガイダンス・ベストプラクティスを提供するフレームワーク・AWS クラウド導入フレームワーク(AWS CAF)Security Perspectiveと呼ばれる、セキュリティ分野に関するベストプラクティスを備えています。

Security Perspective には、主に下記の内容が含まれています。

  • AWS Identity and Access Management(IAM)を使用したサービス・コンピュートリソースへのアクセス認可
  • 発見的コントロール(セキュリティ問題を事前に発見)
  • ネットワークのアクセスコントロールによるデータアクセスの厳格化
  • 機密データ保護(暗号化によるデータの保護・改ざん防止)
  • 運用面でのセキュリティインシデントへの素早い対応

その中でも機密データ保護は、データの保存形式、データへのアクセス権限について考えるのが最も近道と言われています。以下の3つの観点を意識しデータ保護について考えましょう。

  • データの分類とセキュリティゾーンのモデル化
  • 複数のセキュリティコントロールを階層化
  • 部門の切り離し

次章以降、上記の3点を詳しく説明していきます。

データの分類とセキュリティゾーンのモデル化

データの分類・セキュリティゾーンのモデル化により、データに対する適切なレベルのネットワークアクセスコントロール(アクセス経路)・アクセスポリシーコントロール(アクセス認可)を適用できます。それぞれについて詳しく見ていきましょう。

データの分類

まずは、さまざまな機密レベルのデータを正しく分類します。セキュリティゾーンのモデル化の際に、データの機密レベルに合ったセキュリティゾーンを定義するためです。

すべてのデータに対し厳格なセキュリティを設けた場合、開発効率の低下を招くため、機密レベルごとにデータを分類し見合ったセキュリティゾーン(セキュリティの厳格さのレベル)を設定します。

AWS では、データ分類方法のベストプラクティスとして下記が提唱されています。

  • 識別および分類を自動化する
  • データのライフサイクル管理を定義する

また、分類の際に基準にしたい具体的な事項の例として、下記があげられます。

  • 一般公開を想定しているか
  • 顧客個人識別情報 (PII) などの内部使用のみか
  • 知的財産に含まれるか
  • 法的な秘匿特権があるか
  • 機密性が高いなどの特記事項があるか

セキュリティゾーンのモデル化

次に、データにアクセスする方法と場所を検討します。セキュリティゾーンには下記の特性があります。

  • ネットワークの境界を設け、ネットワーク内部の資産を保護
  • セキュリティゾーンに出入りするネットワークフローを制御

IAM ポリシーの利用によって、AWS ネットワーク ACL(データベースへの不正なトラフィックをブロックする機能)を介したネットワーク間のアクセス制御を定義できます。

これによって機密データをセキュアゾーン(情報セキュリティ水準の高い環境)に配置し、外部からのアクセスを制限することで、機密データを守ることができます。

具体的なケースの例として、機密データを配置したセキュアゾーン上に、下記のようなゾーンがあることを想定します。

  • プライベート資産ゾーン(制限付き)(図:Internal(private)zone)
  • 一般公開資産ゾーン(図:External(public)zone)
引用:https://aws.amazon.com/jp/blogs/news/best-practices-for-securing-sensitive-data-in-aws-data-stores/

先述の AWS ネットワーク ACL を介したネットワークフローコントロールポリシーによって、セキュアゾーンへのアクセスを制限付きゾーンからのみに限定し、外部(一般公開資産の外部ゾーン)からのアクセスを防ぐことができます。

複数のセキュリティコントロールを階層化

あらゆるセキュリティに言えることですが、設置したセキュリティが悪意のある行為により突破された場合に備え、複数のセキュリティコントロールを階層化し何重にも施すのが望ましいです。

セキュリティを階層化する際は、以下の2つの階層について考えます。

  • セキュリティ問題を未然に防ぐ「予防的コントロール」
  • セキュリティ問題発生後に素早く対処する「発見的コントロール」

これらのセキュリティコントロールを階層化することで、例えば「予防的コントロール」を突破された際でも「発見的コントロール」によってセキュリティ問題に対応することができます。

予防的コントロール

AWS における予防的コントロールのユースケース、有効な AWS 製品を紹介します。

コンピュートリソースへの厳格なアクセス認可

AWS のリソースへのアクセスを制御するには、AWS Identity and Access Management(IAM)サービスが有効です。ダッシュボード内でリソースへのアクセスを随時確認・制御することで、リソースへのアクセスを安全に管理できます。

セキュリティに関するベストプラクティスを提案してくれたり、セキュリティに問題がある場合はセキュリティアラートとして表示してくれたりするので安心です。

また、CloudFormation で IAM デプロイするように構築することで、より簡単・厳格に各 AWS リソースへのアクセス認可を実現することが可能となります。IAM は AWS を利用するなら利用必須とも言えるサービスですので、ぜひCloudFormation でのデプロイに取り組んでみてください。

分散型サービス妨害 (DDOS) 攻撃保護

AWS Shield などのサービスと Amazon CloudFront などのコンテンツ配信ネットワークサービスを組み合わせることで、ボリューム攻撃からストレージを保護できます。

また、AWS Shield以下の AWS サービスに対し適用することが可能です。 AWS で Edge ロケーションにサーバーを立てる場合などもぜひ利用を検討してみてください。

  • Amazon CloudFront ディストリビューション
  • Amazon Route53 ホストゾーン
  • AWS GlobalAccelerator アクセラレーター
  • Application Load Balancer (ALB) アプリケーションバランサー
  • Elastic Load Balancing(ELB)ロードバランサー
  • Amazon Elastic Compute Cloud(Amazon EC2)ElasticIP アドレス

ネットワークの隔離

Virtual Private Cloud (VPC) 内に配置するコンピュートリソースをリストアップし、アクセス制限を施したプライベートサブネット、パブリックサブネットの適切なサブネットへの配置を検討します。特に、データを保持するリソース(RDS、EBS等)へのアクセスは厳格に物理的制限を行います。(パブリックからのアクセスは確実に遮断します)このあたりは一般的なネットワーク設計のユースケースに則り構築を行います。

AWS では上記のような一般的なネットワークの設計に加え、VPC コンポーネントと呼ばれる以下のようなサービスを組み合わせることで、ユースケースに応じてより厳格なアクセス制御を実現することができます。

ネットワークのユースケースについては話が尽きないですが、私たちは以下の思考フローで適切なネットワーク設計を目指しています。

  1. 誰がどこへアクセスしたいのかを要件定義
  2. AWS 構成図に起こし、開発チーム内でセキュリティホールをディスカッション
  3. CloudFormation で自動構築、構築ミスを可能な限り軽減
  4. 定期的にモニタリング、悪意のあるアクセスを検出・対策

アプリケーションレイヤーの脅威防止

アプリケーションを SQL インジェクションなどの脅威から保護できます。AWS WAF 等によって実現できます。

AWS WAF は以下のサービスに適用することが可能ですので、AWS で API サーバー・ロードバランサー等を立てる場合はぜひ利用を検討してみてください。

AWSサービス保護内容
Amazon CloudFrontエッジロケーションでリソースやコンテンツを保護するコンテンツ配信ネットワーク (CDN) の一部を保護。
Application Load Balancer (ALB)ALB の背後にあるオリジンウェブサーバーを保護。
Amazon API GatewayREST API への悪意のあるリクエストからコンピュートリソースを保護。
AWS AppSyncGraphQL API への悪意のあるリクエストからコンピュートリソースを保護。

データ保護(暗号化)

許可されていないアクセスメカニズムによるデータの流出などのリスクから保護する処理です。保存時と送信中の両方で実行可能です。

AWS Key Management Service (KMS) を使用することで、暗号化キーを簡単に作成して管理し、幅広い AWS のサービスやアプリケーションでの使用を制御できるようになります

発見的コントロール

不正な行動を発見し、インシデント対応を随時行う制御です。実装できる発見的コントロールをピックアップしました。インシデントに迅速に対応するためにも、エンジニアとしてはチェックしておきたい事項です。

不正なトラフィックの検出

VPC フローログを継続的に監視し、セキュリティの異常の特定・修正が可能です。マネージド型サービス「Amazon GuardDuty」が VPC フローログや AWS CloudTrail 、DNS ログからフィードを受け取り、調査結果を提供します。調査結果を Amazon CloudWatch イベントとして利用し、自動応答を駆動できます。

設定のドリフトの是正

システム設定のズレ(設定のドリフト)を特定して、データベースのセキュリティ体制の整合性を保ちましょう。代表的なものとして、下記のふたつの方法があります。

  • 「AWS Config」と「DynamoDB」を使用し、テーブルレベルの設定のドリフトを発見
  • 「AWS Config」と「Amazon RDS」を使用し、データベースインスタンスやセキュリティグループ、スナップショット、サブネットグループ、イベントサブスクリプションの設定のドリフトを検出

部門の切り離し

部門(業務フロー)の切り離しにより、2つのドメイン間でネットワークが厳密に分離されます。これにより、次の ふたつが実現できます。

  • 純粋なマイクロサービスデータアクセスパターンを適用して、マイクロサービスデータストアへのアクセスが、所有するマイクロサービス API を介してのみ行えるようにすること
  • マイクロサービスドメインに存在する機密データの、別のマイクロサービスドメインへの漏洩を防ぐこと

以上より、部門の切り離しによって機密データを守ることができます。適切な IAM コントロールとネットワークフローコントロールを適用し、部門の切り離しを実現しましょう。

AWS Configを触ってみた

ここからは、紹介した AWS サービスを実際に操作していこうと思います。

操作するのは、設定のドリフトの是正の項目で紹介した「AWS Config」です。AWS Config のルールを使用して、AWS リソースを評価できるサービスです。AWS のデータ保護の際に使用したいサービスのひとつですので、ぜひ導入を検討してみてください。

AWS Config をセットアップする

まずは「AWS Config を使用する」を押下し、ログインします。

https://aws.amazon.com/jp/config/

次に、AWS Config のセットアップを行います。項目を確認し、「確認」ボタンを押下してください。

https://console.aws.amazon.com/config/

セットアップが完了すると、ダッシュボード画面に遷移します。リソースが存在する場合は、準拠されたルールや違反のあるルール、 違反しているリソースを確認できます。

設定画面では、AWS Config に関する諸設定を行うことができます。随時チェックを行えるよう、レコーダーは「編集」ボタンを押下し、「記録を有効化」にチェックを入れましょう。(下記確認画面では「記録はオン」と表示されます。)

AWS Configのルールを追加する

AWS Config を使用した AWS リソースの評価には、AWS Config で定義したルールが不可欠です。そこで、AWS Config を操作して実際にルールを追加してみました。

まずはダッシュボードから「ルール」の画面に遷移します。ルールを追加する際は、右側の「ルールを追加」を押下します。

「ルールタイプの指定」の画面に遷移しますので、ルールタイプの選択をします。今回は、すでに AWS 内に型が存在しているルールを追加していきます。「AWS によって管理されるルールの追加」を選択し、設定したいルールを「AWS マネージド型ルール」から選択してください。

ルールに関する各項目を確認・編集します。名前等はデフォルトで記入されているので、今回はそのまま使用します。確認・編集が終わったら、「次へ」を押下します。

確認画面に遷移し、問題がなければ「ルールを追加」ボタンを押下します。その後下記の画面に遷移します。正常にルールが追加されました。

まとめ

AWS データストアで機密データを保護するベストプラクティスと実装方法を紹介しました。日ごろからセキュリティ対策を万全に行い、センシティブなデータをしっかり保護しましょう。

このブログでは、AWS 関連の記事をどんどん公開しております。ご興味のある方はぜひ他の記事もご覧ください。

サーバーレス開発については、お気軽にお問い合わせください。