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