Amazon S3 暗号化を使用して S3 オブジェクトを保護する方法
多くの企業がクラウドストレージにデータを保存しています。クラウドストレージサービスは、ビジネスにおいて極めて重要な要素である高い信頼性と可用性を備えていることから、今日広く利用されています。Amazonは、市場でパブリッククラウドサービスを提供する主要企業の一つです。これらのサービスはAmazon Web Services(AWS)と呼ばれています。Amazonは、ファイルやサービスへのアクセスに暗号化されたネットワーク接続を使用するなど、高水準のセキュリティを提供しています。暗号化により、ネットワーク経由でのデータ傍受のリスクが低減されます。データは、あらゆる企業やユーザーにとって極めて重要なものです。 データの紛失、破損、盗難を望む人は誰もいません。
このため、Amazonは自社のさまざまなクラウドストレージサービス上でデータを保存するための暗号化オプションを提供しています。これらのクラウドストレージオプションには、仮想マシン(インスタンス)向けの高性能ストレージであるEBSボリュームや、バックアップ、アーカイブ、アプリケーションファイル、その他のデータを保存するために開発されたクラウドストレージサービスであるAmazon S3が含まれます。 AWSの暗号化オプションを使用することで、Amazon S3バケットおよびバケット内に保存されたファイルを暗号化できます。本ブログ記事では、暗号化の種類や設定を含む、Amazon S3の暗号化について解説します。
データの暗号化について
データ暗号化とは、情報を符号化することでデータを保護するプロセスです。データは、パスワードや暗号化(暗号)鍵、および特殊な暗号化アルゴリズムを用いて符号化されます。その後、正しいパスワードまたは暗号化(復号)鍵を使用することで、暗号化されたデータにアクセスできるようになります。データ暗号化は、権限のない者がそのデータに論理的または物理的にアクセスした場合でも、デジタルデータの機密性を保護するために使用されます。権限のない者が暗号化されたデータにアクセスしたとしても、鍵やパスワードがなければそのデータは読み取ることができません。 現代の暗号化アルゴリズムにより、長い暗号鍵や複雑なパスワードを解読することは困難であり、事実上不可能です。AES、3DES、RSA、Blowfishなど、さまざまな暗号化アルゴリズムが使用されます。暗号化の主な種類には、対称鍵暗号と非対称鍵暗号があります。
Amazonは、Amazon S3バケットにデータを保存する際、S3暗号化の使用を推奨しています。この推奨の第一の理由はセキュリティです。 暗号化は、セキュリティとプライバシーのレベルを高めます。しかし、クラウドに保存されたデータを暗号化すべき理由は他にもあります。Amazonは、さまざまな国のユーザーのデータを保管しています。クライアントや組織が法律違反の疑いがある場合、国が調査のためにデータの提出を要求することがあります。しかし、Amazonはライセンス契約や他国(Amazonの顧客である国民がいる国)の法律を尊重しなければならず、矛盾が生じる可能性があります。
ユーザーのデータが暗号化されており、Amazonがその暗号化キーを保有していない場合、ユーザーのデータは第三者の組織や個人に提供することはできません(たとえ暗号化されたデータが提供されたとしても、それは無用で解読不可能なビットの集合に過ぎないからです)。 米国が捜査のために欧州のAmazonユーザーからのデータ提供を要求する状況を想像してみてください。この場合、どうすべきでしょうか?ご存知かもしれませんが、欧州市民の個人データは一般データ保護規則(GDPR)によって保護されています。詳細については、ホワイトペーパーをご覧ください。 EU一般データ保護規則.
Amazon S3 の暗号化タイプ
S3の暗号化はどのように機能するのでしょうか?Amazonは、Amazon S3に保存されるデータに対して、いくつかの暗号化タイプを提供しています。S3は暗号化されていますか?デフォルトでは、S3バケットに保存されたデータは暗号化されていませんが、AWS S3の暗号化設定を構成することができます。
以下の質問に答えた上で、使用する暗号化方式を定義する必要があります:
- データの暗号化と復号は誰が行うのですか?
- 秘密鍵は誰が保管するのですか?
- 秘密鍵は誰が管理するのですか?
バケットに保存されているS3オブジェクトに対して利用可能なAWSの暗号化方法を見てみましょう。
サーバーサイド暗号化
サーバーサイド暗号化(SSE)は、最もシンプルなデータ暗号化オプションです。すべての複雑な暗号化処理は、AWSクラウド内のサーバー側で実行されます。 ユーザーは未暗号化のデータをAWSに送信し、クラウドストレージに記録される際にAWS側でデータが暗号化されます。データを取得する必要がある場合、Amazonは暗号化されたデータを読み取り、Amazonサーバー側で必要なデータを復号し、ネットワーク経由で復号されたデータをユーザーに送信します。このプロセスはエンドユーザーにとって透過的です。
SSE-S3 これは最もシンプルな方法です。選択したデータの暗号化に必要な鍵は、AWSによって管理・処理されます。ユーザーは鍵を直接確認することはできず、この鍵を使って手動でデータの暗号化や復号を行うこともできません。暗号化アルゴリズムにはAES-256が使用されます。AES(Advanced Encryption Standard)は対称ブロック暗号であり、暗号鍵の長さは256ビットです。AWSを完全に信頼できる場合は、このS3暗号化方式をご利用ください。
SSE-KMS これはSSE-S3とは少し異なる方法です。AWS Key Management Service(KMS)を使用して、Amazonサーバー側でS3データを暗号化します。データキーはAWSによって管理されますが、ユーザーはAWS KMS内のカスタマーマスターキー(CMK)を管理します。SSE-KMS暗号化タイプを使用するメリットは、ユーザーによる制御と監査証跡です。
では SSE-C、暗号化キーはお客様がご用意いただくものであり、AWSでは暗号化キーを保存しません。提供されたキーは、データの暗号化または復号に関連する各リクエストを処理するためにAWSに渡されます。ユーザーは、キーの安全性を確保する必要があります。S3のデータ暗号化はAWSのサーバー側で実行されます。使用できるのはHTTPS接続のみです(HTTPは使用できません)。
クライアント側暗号化
S3のクライアント側暗号化を使用する場合、すべての暗号化処理はクライアントの責任となります。この場合、データはAWSによって暗号化されるのではなく、ユーザー側で暗号化されます。ユーザーのデータセンターで暗号化されたデータは、AWSに直接アップロードされます。S3のクライアント側暗号化には2つのオプションが用意されており、マスターキーをクライアント側またはサーバー側に保存することができます。 マスターキーをクライアント側に保存する場合、クライアントが暗号化の全責任を負います。このアプローチの利点は、Amazonがユーザーの暗号化キーを一切把握せず、データが暗号化されていない状態でAmazonのサーバーに保存されることがない点です。ユーザーは、Amazon S3にデータを送信する前にデータを暗号化し、Amazon S3からデータを取得した後に復号します。
Amazon S3 暗号化クライアントとは何ですか?
Amazon S3 暗号化クライアントは、ユーザー側でデータを暗号化するために使用されます。1回限りの暗号化キーがランダムに生成され、オブジェクト単位でデータの暗号化に使用されます。つまり、同じ Amazon S3 バケット内に、暗号化されたオブジェクトと暗号化されていないオブジェクトが混在することが可能です。 Amazon S3 暗号化クライアント は、AWS SDK用のパブリッククラスです。Java、C++、Python、.NET、およびその他のサポートされているプログラミング言語向けのAWS SDKを使用することで、Amazon S3と連携する独自のアプリケーションを作成できます。これにより、クライアント側でS3に送信されるデータの暗号化や、S3から受信したデータの復号化を行うことが可能です。
AWS S3の暗号化を設定するには?
- AWSのWebインターフェースにログインしてください。S3の設定を編集するには、アカウントに十分な権限が必要です。
- Amazon S3 のページにアクセスしてください(リンクは地域やアカウントによって異なる場合があります):
https://s3.console.aws.amazon.com/s3/home
- 暗号化設定を適用したいバケットを選択するか、新しいバケットを作成してください。
- バケツの設定ページで、[
Propertiesタブをクリックし、次にDefault encryption.
- 暗号化設定画面が表示されました。デフォルトでは、S3バケットの暗号化オプションは無効になっています。
- 必要なオプション(例:AES-256)を選択します。これは、Amazon S3が管理するキーを使用したサーバーサイド暗号化(SSE-S3)です。バケットポリシーを確認できます。クリック
Saveバケットの暗号化設定を保存します。この設定は、今後このバケットに追加されるオブジェクトのデフォルトのS3暗号化設定として使用されます。
- クリック
Save. - これでデフォルトの暗号化が設定されました。S3バケットに保存されるすべての新しいオブジェクトは、設定された構成に従って暗号化されます。バケットを作成する際に暗号化を有効にすることをお勧めします。また、後からバケット単位で暗号化を有効にすることも可能です。ただし、後から暗号化設定を変更しても、すでにバケットにアップロード済みの暗号化されていないファイルには影響しません。

- AWS-KMSによる暗号化を選択する場合は、該当するオプションをクリックしてください。その場合、ドロップダウンリストからキーを選択してください。

バケット内のカスタムオブジェクトの暗号化
バケットにすでにアップロードされており、暗号化設定が なし.
AWSのWebインターフェースでバケットを開きます。S3オブジェクトは Overview タブ。オブジェクト(ファイルまたはディレクトリ)をクリックすると、そのオブジェクトに適用されている現在の暗号化設定を確認できます。オブジェクトのプロパティとアクセス権限がポップアップウィンドウに表示されます。下のスクリーンショットにあるように、アップロードされたファイルは暗号化されていません(暗号化:なし)。
1つまたは複数のオブジェクトを選択し、クリックしてください Actions そして、クリックしてください Change encryption S3バケット内のカスタムオブジェクトの暗号化設定を変更するには。
開いたウィンドウで、必要な暗号化方式(例:AES-256)を選択し、[クリック] してください。 Save.
確認ウィンドウで、新しい暗号化設定の影響を受ける選択されたオブジェクトにチェックを入れ、[] をクリックします。 Change.
これで、選択したオブジェクトに対して暗号化が設定されました。
なお、バケット全体に対して暗号化設定を行った後でも、暗号化を有効にする前にバケットにアップロードされたファイルは暗号化されません。S3 バケット内のオブジェクト数が非常に多い場合、暗号化が必要な未暗号化のオブジェクトをすべて見つけて選択するのは困難な場合があります。 暗号化が有効になっているバケット内の暗号化されていないオブジェクトを選択するには、Amazon S3 Inventory または AWS CLI を使用できます。
暗号化されていないオブジェクトを特定し、それらを再アップロードすることで、バケット全体に設定されたデフォルトの S3 バケット暗号化レベルで暗号化することができます。 バケット(例:bucket1)内の暗号化されていない S3 オブジェクトを検索したくない場合は、新しいバケット(bucket2)を作成し、bucket1 から bucket2 へすべてのファイルをコピーしてから、bucket2 から bucket1 へすべてのファイルをコピーし直すことができます。
AWS CLI を使用して、暗号化されていないオブジェクトを上書きすることでコピーできます。 copy 暗号化方式を指定してコマンドを実行します。例えば、 --sse 新しいバケットを作成せずに、SSE-S3 128ビット暗号化を有効にします:
aws s3 cp s3://mybucket/myfile.zip s3://mybucket/myfile.zip --sse
書き換え後、ファイルは暗号化されます。書き換え後、ファイルの作成日時や最終更新日時などのファイル属性が変更される点に注意してください。これらの属性(ファイルの作成日時や最終更新日時)を読み取り、Amazon S3 バケットに保存されたファイルの処理に利用しているアプリケーションでは、ファイルの書き換え後に期待どおりに動作しなくなる可能性があります。
コスト効率化のために AWS S3 バケットでライフサイクル管理オプションが有効になっている場合、いくつかの問題が発生する可能性があります。 たとえば、6 か月前に作成または変更されたファイルを削除するようにライフサイクル設定を行うことができます。古いファイルは自動的に削除されるため、クラウド上のストレージ容量の使用量が減り、クラウドストレージの費用も削減されます。 最終更新日 まもなく削除される予定の古いファイルのタイムスタンプ(最終更新日時)が書き換えられると、ライフサイクル管理機能はこのファイルを、長期間(例えば前述の通り6か月間)削除すべきではない、最近作成されたファイルとして検知します。その結果、バケットに保存されるファイルが増え、コストの増加につながります。
バージョン管理が有効になっている場合、オブジェクトの新しい暗号化バージョンが作成されます。オブジェクトの以前のバージョンは暗号化されずに残されます。
AWS CLI を使用したオブジェクトのアップロード
AWS CLIは、暗号化オプションを指定してAmazon S3へファイルをコピーしたり、Amazon S3からファイルをコピーしたりする必要がある場合にも利用できます。また、このコマンドラインインターフェースを使用して、1つのS3バケット内でのオブジェクトのコピーや、あるバケットから別のバケットへのコピーを行うことも可能です。バケットのデフォルトの暗号化設定と、アップロードするファイルに適用すべき暗号化設定が異なる場合、CLIを使用してバケットへアップロードするファイルの暗号化オプションを設定することができます。 bash での AWS CLI コマンドの使用例を見てみましょう。
ローカルマシンから AWS S3 バケットにファイルをコピーし、サーバーサイド暗号化(SSE-S3 暗号化)を設定します:
aws s3 cp /directory/file-name s3://bucket-name/file-encrypted --sse AES256
AWS S3 からローカルディスクにファイルをコピーして復号する:
aws s3 cp s3://bucket-name/file-encrypted /directory/file-name
SSE-KMS暗号化を使用して、ローカルディスクからS3バケットへファイルをアップロードし、暗号化します:
aws s3 cp /directory/file-name s3://bucket-name/file-encrypted --sse aws:kms
S3バケットからファイルをダウンロードして復号化し、ローカルディスクに保存する:
aws s3 cp s3://bucket-name/file-encrypted /directory/file-name
結論
Amazon S3の暗号化機能は、クラウド上のAWS S3バケットに保存されたデータを保護するのに役立ちます。これは、機密データにとって特に重要です。AWS S3の暗号化は、Amazon側のサーバー側および顧客側のクライアント側で実行できます。秘密鍵は、サーバー側とクライアント側の両方に保存できます。S3バケットに保存するオブジェクトに対してAmazon S3の暗号化を使用することを検討している場合は、バケットの作成時に暗号化を有効にしてください。 すでにバケットを使用しており、そのバケットに保存されているオブジェクトが暗号化されていない場合は、それらのオブジェクトに対して暗号化を有効にすることができます。ただし、その場合は、留意すべき点がいくつかあります。
セキュリティレベルを高め、第三者によるアクセスからデータを保護するために、暗号化を利用することは有効な手段です。AWSの暗号化を利用することに加え、AWS S3のバックアップの実施も検討してください。 AWS EC2のバックアップ データの安全性を高めるために。



