Amazon S3がAES256によるサーバサイド暗号化に対応

この記事は公開されてから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-