この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Amazon S3は暗号化されてない -> 暗号化対応
今までAmazon S3内に保存されるデータは暗号化されていませんでした。AWSは強力なセキュリティポリシーやアクセス制限によって情報を守ってきたわけです。しかし、ビジネスユーザの中には生データの保存を嫌います。そこで、Amazon S3はAES256による暗号化ストレージに対応しました。これによって、ユーザは自分で暗号化せずにAWSにその作業を任せることができるわけです。
Amazon S3にファイルをアップロードする
暗号化の手続きは簡単です。AWS Management Consoleからチェックボックスで制御できます。もちろん、APIでも指定が可能です。
暗号化されたファイルのプロパティを表示する
アップロードしたファイルの状況を確認しましょう。後から暗号化/非暗号化の指定ができます。
Bucketポリシーで暗号化する
API経由で暗号化する際には、PutObjectメソッドのBucketポリシーにて以下のようにs3:x-amz-server-side-encryptionを指定して暗号化します。
{
"Version":"2008-10-17",
"Id":"PutObjPolicy",
"Statement":[{
"Sid":"DenyUnEncryptedObjectUploads",
"Effect":"Deny",
"Principal":{
"AWS":"*"
},
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::YourBucket/*",
"Condition":{
"StringNotEquals":{
"s3:x-amz-server-side-encryption":"AES256"
}
}
}
]
}
JavaのSDKで暗号化する
JavaのSDKでも指定できます。ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION の部分です。
File file = new File(uploadFileName);
PutObjectRequest putRequest = new PutObjectRequest(
bucketName, keyName, file);
// メタデータで指定
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setServerSideEncryption(
ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
putRequest.setMetadata(objectMetadata);
PutObjectResult response = s3client.putObject(putRequest);
System.out.println("Uploaded object encryption status is " +
response.getServerSideEncryption());
まとめ
Amazon S3のサーバサイド暗号化対応によって、ビジネスユーザにとって今までよりもさらに魅力的なプラットフォームになりました。Amazon S3を使いこなしてストレージマエストロになりましょう!
参考情報
New - Amazon S3 Server Side Encryption for Data at Rest
Amazon Simple Storage Service Developer Guide -Using Server-Side Encryption-