More Related Content
Similar to Running Amazon S3 Encryption
Similar to Running Amazon S3 Encryption (20)
More from Satoru Ishikawa
More from Satoru Ishikawa (14)
Running Amazon S3 Encryption
- 1. 1Copylight © Classmethod, Inc.
Amazon S3暗号化と運用
(CM:道 Version)
AWS勉強会 in 北海道
Developers.IO Meetup 06
2014/08/01
クラスメソッド株式会社
石川 覚
- 2. 2Copylight © Classmethod, Inc.
自己紹介
石川 覚 (いしかわ さとる)
• SIer、IP電話開発会社を経て
• CMに2014/06 join
• 札幌出身、東京に8年
• Linux, Java, MySQL
• 自称 何でも屋
• 当然 AWS好き
クラスメソッド株式会社
ソリューションアーキテクト
- 4. 4Copylight © Classmethod, Inc.
Amazon S3とは
• バケットという入れ物にファイルを無限に保存
できるサービス(1GB/月約3円)
• データはリージョン内の3カ所以上で自動複製
される(99.999999999%の信頼性)
低価格・高信頼性
AWSサービスを支える中心的存在
- 5. 5Copylight © Classmethod, Inc.
Amazon S3の特長
• ファイルを上書きしても一定期間後に削除・
Glacierに保存できる(ライフサイクル管理)
• ユーザー・サーバーなどに対して読み書きの許
可・拒否ができる(アクセス制御)
• 万が一データを盗まれたときに中身が見られな
いようにできる(暗号化)
バックアップメディアに期待される
機能を標準で備えている
- 6. 6Copylight © Classmethod, Inc.
Amazon S3の用語
• バケット
– オブジェクトの保存場所。各アカウントで最⼤100個
まで。名前がユニークな必要あり
• オブジェクト
– Amazon S3に置くファイルでURLが付与される。バ
ケット内には無制限にオブジェクトを置くことが可
能。
– 1オブジェクトのサイズは5TBまで
• キー
– オブジェクト毎に付与される一意なキー
• ACL
– アクセスコントロールリスト
- 7. 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の機能を組込む
- 8. 8Copylight © Classmethod, Inc.
Amazon S3の利用法
• コンテンツの保存と配信
– 静的なWebサイトのホスティング
– ファイルの配信(Presigned URLも可)
• ビックデータ分析のストレージ
– Redshift、EMRのオリジナルデータの保存
• バックアップやディザスタリカバリ
– 各サーバ、データベースのスナップショット
– ログファイルの保存
– ファイルの分散保存
- 9. 9Copylight © Classmethod, Inc.
S3の通信
• AWS SDKの動作イメージ
以下、PCからAWSの通信の例 (EC2の場合はIAMRole)
通信/HTTPS
Put、Get、
List、Move
REST/SOAP
AWS SDK
Credential
通信経路は暗号化済み(デフォルト)
AWS CLI
- 11. 11Copylight © Classmethod, Inc.
Amazon S3暗号化の分類
• 鍵の生成・管理はサーバサイドとクライアント
サイドのどちらか
• オブジェクトの暗号化はサーバサイドとクライ
アントサイドのどちらかであるか
クライアントで暗号化 サーバーで暗号化
クライアントで
鍵の生成・管理
Client Side
Encryption(CSE)
Server-Side Encryption
with Customer-
Provided Encryption
Keys (SSE-C)
サーバーで
鍵の生成・管理
なし Server Side
Encryption(SSE)
- 12. 12Copylight © Classmethod, Inc.
1. CSE - Client Side Encryption
• クライアント内で暗合したオブジェクトをS3に
登録
• 暗号化されたオブジェクトはユーザー以外に複
合化が不可能
• AWS SDK(Java、Ruby、.NET)のクライアント
サイドの機能として暗号化機能を提供
Java SDK
クライアントで暗号化した
オブジェクト
S3 Bucket
- 13. 13Copylight © Classmethod, Inc.
2. SSE - Server Side Encryption
• クライアントから暗号化オプションを指定して
登録する
• サーバー内で鍵が自動生成され、暗号化した
データを保存する
• 鍵はユーザーが管理する必要がなく、AWSで管
理されるので手間をかけずに暗号化できる
• AWS SDKやAWS CLIから利用できる
- 15. 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動作する。
- 16. 16Copylight © Classmethod, Inc.
3. SSE-C
• SSEにおいて、ユーザーが鍵の作成や管理をし
たい場合はServer-Side Encryption with
Customer-Provided Encryption Keys
• AWS SDKやAWSCliの機能として利用できます。
- 17. 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
- 18. 18Copylight © Classmethod, Inc.
番外編:オレオレ暗号化
• クライアントサイドで暗号化したいが、鍵の管
理はしたくない場合。
• ファイル名+αから生成したハッシュを鍵として
利用する
• Blowfishで暗号化したオブジェクトを保存
• 標準的なハッシュや暗号化アルゴリズムを採用
すれば他の言語でも実装可能になる
- 21. 21Copylight © Classmethod, Inc.
S3暗号化の検討課題
• 暗号化の状態を判別できない
– 登録したファイルをプロパティの詳細から確認する
と”Server Side Encryption “の状態が表示されますが、
その他は”none“となる。
– 同じキーに対して暗号化/非暗号化オブジェクト問わず
上書きが可能なので、誰かが異なる暗号化方式や非暗
号化オブジェクトを登録した後に、オブジェクトの取
得に失敗することがある。
- 23. 23Copylight © Classmethod, Inc.
S3暗号化の運用
• CSEとSSE-C
– 鍵の管理(Amazon CloudHSMやHSMs)が必要
– CSEはさらにCPU負荷と処置時間を考慮
– 暗号化の種別を管理・強制する仕組みがありませんの
でないかわりに、暗号化をアプリケーション作りや運
用ルールで強制するしくみが必要
• SSE
– 登録時のオプション設定のみで導入可能
– 悪意のある第三者がオブジェクトへのアクセス権を得
ると、暗号化が掛かっていようといまいと関係なく復
号化されたファイルをダウンロードできる
- 24. 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"
}
}
}]
}