26
1 Copylight © Classmethod, Inc. Amazon S3暗号化と運用 (CM:道 Version) AWS勉強会 in 北海道 Developers.IO Meetup 06 2014/08/01 クラスメソッド株式会社 石川

Running Amazon S3 Encryption

Embed Size (px)

Citation preview

Page 1: Running Amazon S3 Encryption

1Copylight © Classmethod, Inc.

Amazon S3暗号化と運用(CM:道 Version)

AWS勉強会 in 北海道

Developers.IO Meetup 06

2014/08/01クラスメソッド株式会社

石川 覚

Page 2: Running Amazon S3 Encryption

2Copylight © Classmethod, Inc.

自己紹介

石川 覚 (いしかわ さとる)• SIer、IP電話開発会社を経て

• CMに2014/06 join

• 札幌出身、東京に8年

• Linux, Java, MySQL

• 自称 何でも屋

• 当然 AWS好き

クラスメソッド株式会社

ソリューションアーキテクト

Page 3: Running Amazon S3 Encryption

3Copylight © Classmethod, Inc.

Amazon S3

Page 4: Running Amazon S3 Encryption

4Copylight © Classmethod, Inc.

Amazon S3とは

• バケットという入れ物にファイルを無限に保存できるサービス(1GB/月約3円)

• データはリージョン内の3カ所以上で自動複製される(99.999999999%の信頼性)

低価格・高信頼性

AWSサービスを支える中心的存在

Page 5: Running Amazon S3 Encryption

5Copylight © Classmethod, Inc.

Amazon S3の特長

• ファイルを上書きしても一定期間後に削除・Glacierに保存できる(ライフサイクル管理)

• ユーザー・サーバーなどに対して読み書きの許可・拒否ができる(アクセス制御)

• 万が一データを盗まれたときに中身が見られないようにできる(暗号化)

バックアップメディアに期待される機能を標準で備えている

Page 6: Running Amazon S3 Encryption

6Copylight © Classmethod, Inc.

Amazon S3の用語

• バケット– オブジェクトの保存場所。各アカウントで最⼤100個

まで。名前がユニークな必要あり

• オブジェクト– Amazon S3に置くファイルでURLが付与される。バ

ケット内には無制限にオブジェクトを置くことが可能。

– 1オブジェクトのサイズは5TBまで

• キー– オブジェクト毎に付与される一意なキー

• ACL– アクセスコントロールリスト

Page 7: Running Amazon S3 Encryption

7Copylight © Classmethod, Inc.

Amazon S3の使い方

• Management Console

– GUIツールでファイルの登録・取得・削除・一覧

• ファイルのPUT/GET/DELETE/LIST

– 簡単なコマンド操作(AWS Cli)

aws s3 元のファイル s3://バケット名

• サードパーティツール

– Mac:Cyberduck, Windows:CloudBerry

• AWS SDK

– Java, Ruby, .NETでS3の機能を組込む

Page 8: Running Amazon S3 Encryption

8Copylight © Classmethod, Inc.

Amazon S3の利用法

• コンテンツの保存と配信

– 静的なWebサイトのホスティング

– ファイルの配信(Presigned URLも可)

• ビックデータ分析のストレージ

– Redshift、EMRのオリジナルデータの保存

• バックアップやディザスタリカバリ

– 各サーバ、データベースのスナップショット

– ログファイルの保存

– ファイルの分散保存

Page 9: Running Amazon S3 Encryption

9Copylight © Classmethod, Inc.

S3の通信

• AWS SDKの動作イメージ

以下、PCからAWSの通信の例 (EC2の場合はIAMRole)

通信/HTTPS

Put、Get、List、Move

REST/SOAP

AWS SDK

Credential

通信経路は暗号化済み(デフォルト)

AWS CLI

Page 10: Running Amazon S3 Encryption

10Copylight © Classmethod, Inc.

Amazon S3暗号化

Page 11: Running Amazon S3 Encryption

11Copylight © Classmethod, Inc.

Amazon S3暗号化の分類

• 鍵の生成・管理はサーバサイドとクライアントサイドのどちらか

• オブジェクトの暗号化はサーバサイドとクライアントサイドのどちらかであるか

クライアントで暗号化 サーバーで暗号化

クライアントで鍵の生成・管理

Client Side Encryption(CSE)

Server-Side Encryption with Customer-Provided Encryption Keys (SSE-C)

サーバーで鍵の生成・管理

なし Server Side Encryption(SSE)

Page 12: Running Amazon S3 Encryption

12Copylight © Classmethod, Inc.

1. CSE - Client Side Encryption

• クライアント内で暗合したオブジェクトをS3に登録

• 暗号化されたオブジェクトはユーザー以外に複合化が不可能

• AWS SDK(Java、Ruby、.NET)のクライアントサイドの機能として暗号化機能を提供

Java SDK

クライアントで暗号化したオブジェクト

S3 Bucket

Page 13: Running Amazon S3 Encryption

13Copylight © Classmethod, Inc.

2. SSE - Server Side Encryption

• クライアントから暗号化オプションを指定して登録する

• サーバー内で鍵が自動生成され、暗号化したデータを保存する

• 鍵はユーザーが管理する必要がなく、AWSで管理されるので手間をかけずに暗号化できる

• AWS SDKやAWS CLIから利用できる

Page 14: Running Amazon S3 Encryption

14Copylight © Classmethod, Inc.

2. SSE - Server Side Encryption

Page 15: Running Amazon S3 Encryption

15Copylight © Classmethod, Inc.

2. SSE - Server Side Encryption

• ファイル登録

• ファイル取得

• ファイル状態

$ aws s3api put-object --bucket bucket_name ¥

--key keyname --body src_path ¥

--server-side-encryption AES256

$ aws s3api get-object --bucket bucket_name ¥

--key keyname dest_path

$ aws s3api head-object --bucket bucket_name --key keyname

※”aws s3” コマンドの cp, mvは、”—sse”指定するとSSE動作する。

Page 16: Running Amazon S3 Encryption

16Copylight © Classmethod, Inc.

3. SSE-C

• SSEにおいて、ユーザーが鍵の作成や管理をしたい場合はServer-Side Encryption with Customer-Provided Encryption Keys

• AWS SDKやAWSCliの機能として利用できます。

Page 17: Running Amazon S3 Encryption

17Copylight © Classmethod, Inc.

3. SSE-C

• 事前にAES256 キーの生成

• ファイル登録

• ファイル取得

• ファイル状態

$ pwgen -Bs 31 1 | tee sse-key

ifxHAIEaASzbUT1kspCxEMo1N4syAXr

$ aws s3api put-object --bucket bucket_name --key keyname ¥

--body src_path --sse-customer-algorithm AES256 ¥

--sse-customer-key file://sse-c-key

$ aws s3api get-object --bucket bucket_name --key keyname ¥

--sse-customer-algorithm AES256 ¥

--sse-customer-key file://sse-c-key dest_path

$ aws s3api head-object --bucket bucket_name --key keyname ¥

--sse-customer-algorithm AES256 ¥

--sse-customer-key file://sse-c-key

Page 18: Running Amazon S3 Encryption

18Copylight © Classmethod, Inc.

番外編:オレオレ暗号化

• クライアントサイドで暗号化したいが、鍵の管理はしたくない場合。

• ファイル名+αから生成したハッシュを鍵として利用する

• Blowfishで暗号化したオブジェクトを保存

• 標準的なハッシュや暗号化アルゴリズムを採用すれば他の言語でも実装可能になる

Page 19: Running Amazon S3 Encryption

19Copylight © Classmethod, Inc.

S3暗号化の運用

Page 20: Running Amazon S3 Encryption

20Copylight © Classmethod, Inc.

S3暗号化のコスト

• CPUインテンシブ

– CSEは暗号化によるCPU負荷と処理時間が増加することを想定する

– 必要に応じてCPUリソースの増強、転送の並列化などを検討する

Page 21: Running Amazon S3 Encryption

21Copylight © Classmethod, Inc.

S3暗号化の検討課題

• 暗号化の状態を判別できない

– 登録したファイルをプロパティの詳細から確認すると”Server Side Encryption “の状態が表示されますが、その他は”none“となる。

– 同じキーに対して暗号化/非暗号化オブジェクト問わず上書きが可能なので、誰かが異なる暗号化方式や非暗号化オブジェクトを登録した後に、オブジェクトの取得に失敗することがある。

Page 22: Running Amazon S3 Encryption

22Copylight © Classmethod, Inc.

S3暗号化の検討課題

• SSE以外は鍵をユーザーが管理

– Amazon CloudHSMやHSMs(Hardware security modules)といった鍵の管理が必要です。

Page 23: Running Amazon S3 Encryption

23Copylight © Classmethod, Inc.

S3暗号化の運用

• CSEとSSE-C

– 鍵の管理(Amazon CloudHSMやHSMs)が必要

– CSEはさらにCPU負荷と処置時間を考慮

– 暗号化の種別を管理・強制する仕組みがありませんのでないかわりに、暗号化をアプリケーション作りや運用ルールで強制するしくみが必要

• SSE

– 登録時のオプション設定のみで導入可能

– 悪意のある第三者がオブジェクトへのアクセス権を得ると、暗号化が掛かっていようといまいと関係なく復号化されたファイルをダウンロードできる

Page 24: Running Amazon S3 Encryption

24Copylight © Classmethod, Inc.

S3暗号化の運用

• SSEを強制させるバケットポリシー

– 登録時のオプション設定のみで導入可能{

"Version":"2012-10-17",

"Id":"PutObjPolicy",

"Statement":[{

"Sid":"DenyUnEncryptedObjectUploads",

"Effect":"Deny",

"Principal":{"AWS":"*"},

"Action":"s3:PutObject",

"Resource":"arn:aws:s3:::bucket_name/*",

"Condition":{

"StringNotEquals":{

"s3:x-amz-server-side-encryption":"AES256"

}

}

}]

}

Page 25: Running Amazon S3 Encryption

25Copylight © Classmethod, Inc.

最後に

• まずどこからデータを暗号化したいか

• 暗号化を簡単・確実に実施するならSSE

• 鍵管理のコストを下げるなら「オレオレ暗号化」のように鍵の管理方法を検討

Page 26: Running Amazon S3 Encryption

26Copylight © Classmethod, Inc.

ご清聴ありがとうございました。