Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

AWS ソリューションアーキテクトアソシエイト11

データの保護

暗号化によるデータの保護

AWSに代表されるパブリッククラウドの特性上、データはインターネット経由で通信いされ、AWSが管理するデータセンターに保管されます。したがって、ユーザーとAWSの双方でデータを保護する工夫をしなければ、データの盗聴や流出、改ざんなど企業にとって甚大な被害を受けるリスクがあります。

  • 通信の暗号化
    ユーザーとAWSの間を通る通信経路(インターネットなど)における盗聴からデータを保護します。
    具体的には、SSL/TLSなどの暗号化の仕組みをユーザーとAWSの間で導入します。
    AWSでは以下に代表されるさまざまなサービスとの間で、データのアップロード・ダウンロードを保護するため、SSL/TLSによる通信の暗号化をサポートしています。

    • ELB
    • RDS
    • Amazon CloudFront (CloudFront)
    • Amazon API Gateway (API Gateway)

たとえば、ロードバランサーであるELBの配下に複数のEC2インスタンスで構成されるWebサーバーなどがある場合は、ELBがクライアントとWebサーバーの間でSSL/TLSの終端となり、暗号化処理を行います。

  • 保管するデータ自体の暗号化 AWSのEBSやS3などに保管されるユーザーデータが。悪意ある第三者からアクセスされることを防ぎます。具体的には、クライアントサイドまたはサーバーサイドでのファイル暗号化などにより実現します。 また、暗号化や復号を行うには「鍵」の作成と管理も重要となります。

データ暗号化の方式と場所

ユーザーとAWSとの間でデータのやり取りを行う場合、暗号化によるセキュリティ強化を検討します。暗号化の方式を検討する際には、「どこで暗号化するか」「鍵の管理はどこで行うか」の2つが重要です。
「どこで暗号化を行うか」という点については、以下の2つのパターンがあります。

  • クライアントサイドでの暗号化(CSE:Client Side Encryption)
    AWSへデータを送信・保存する前に、ユーザーの環境でデータの暗号化を行います。
    S3にユーザーが保持するファイルをアップロードするケースでは、ユーザー側でファイルに暗号化やパスワード処理などを施してからアップロードを行います。
    また、AWS SDKを利用することで、プログラムからS3のアップロード時にダイル暗号化も可能です。

  • サーバーサイドでの暗号化(SSE:Server Side Encryption)
    AWS側が自動的にファイルの暗号化処理を行います。S3やEBSをはじめ、Amazon Redshift(Redshift)、Amazon Glacier(Glacier)などのサービスで暗号化機能を提供しています。
    S3では、バケットにデフォルト暗号化オプションを設定することで、S3バケット内に保存されるファイルが自動的に暗号化されます。
    また、AWS SDKやAWS CLIを利用することで、サーバーサイドのファイル暗号化指定も可能です。
    暗号化に必要な鍵には、次のいずれかを利用します。

    • ユーザーが管理している鍵
    • S3で自動生成された鍵
    • 後述するAWS KMSなどのサービスと連携して生成された鍵

EBSでは、ボリュームの作成時に暗号化設定が可能です。
ただし、既存のEBSボリュームを暗号化ボリュームに変更するには、以下の作業を行う必要があります。

  1. 既存のボリュームのスナップショットを作成
  2. 作成したスナップショットを複製する際に暗号化オプションを指定
  3. 暗号化されたスナップショットからEBSボリュームを再作成
  4. EC2インスタンスから既存のEBSボリュームをデタッチ
  5. EC2インスタンスへ暗号化されたEBSボリュームをアタッチ

暗号化に必要な鍵の管理

データ暗号化・管理には、鍵の管理と保管が必要となります。
鍵の管理とは、鍵自体の作成、有効化や無効化、定期的なローテーションなどを指します。
主な管理方式は、鍵の管理・保管をユーザーが自身の責任で行うか、AWS側で行うかによって以下の3種類に分類されます。

【暗号化に必要な鍵の管理方式】

鍵の管理 鍵の保管 暗号化処理 利用するAWSサービス 概要
ユーザー ユーザー CSE ユーザー側で実施のため特になし ユーザーが自身の責任・環境において、鍵の管理と保管を行う
ユーザー AWS CSEまたはSSE AWS KMSまたはAWS CloudHSM(CloudHSM) ユーザー自身が鍵の生成・管理を行うが、AWSのKMSやCloudHSMサービス上で鍵を保管する
AWS AWS SSE 各AWSサービスの暗号化機能(S3やEBSなど) 鍵の管理・保管などがすべてAWS側のサービス上で透過的に行われる

AWS KMSとCloudHSMによる鍵の管理・保管

AWSでユーザーの鍵の管理と保管を行うには、AWS KMSとCloudHSMのサービスを利用します。

AWS KMSによる鍵の管理・保管

AWS KMSはAWS上で鍵管理するマネージドサービスで、主に暗号化鍵の作成や有効・無効の管理、ローテーション、削除などを行うことができます。
また鍵自体は、AWS上に保存されます。
たとえば、ユーザーが作成した鍵をAWS KMSで管理・保管することで、S3上のファイルのサーバーサイド暗号化(SSE)や、データ送信前にクライアントサイドでの暗号化(CSE)を簡単に行うこともできます。

AWS KMSと連携した暗号化処理が可能な主なAWSサービスには、以下のものがあります。

  • AWS SDKやCLIを利用したクライアントアプリケーション
  • S3、EBS、RDS、Redshiftなどのストレージやデータベースサービス

CloudHSMによる鍵の管理・保管

もうひとつの手段として、CloudHSMサービスがあります。
HSM(Hardware Security Module)は、AWSのデータセンター内に配置されるユーザー占有のハードウェアアプライアンスです。
AWSがHSMのアプライアンス自体を管理し、ユーザーは自身だけがそのアプライアンスに保存される鍵を管理することができます。

HSM自体がユーザーのVPC内に配置され、ほかのネットワークから隔離されることや、国際的なセキュリティ基準(NIST FIPS140-2など)に準拠していることなどから、セキュリティコンプライアンス要件が厳しい場合に適用します。

HSMと連携した暗号化処理が可能なAWSサービスには、主に以下のものがあります。

  • Redshift
  • RDS for Oracle
Hiroki1990jp
最近エンジニア見習いのSESになりました。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away