Amazon S3がファイル格納時のデフォルト暗号化に対応しました

こんにちは、最近カフェでリモートワークをすることが多く、すっかり定員さんに頼むメニューを当てられてしまうようになってしまった城内です。

はじめに

今回は、先日発表されたS3のアップデートの中から、「デフォルト暗号化」について書いてみたいと思います。

すでに別の機能についても当ブログで紹介していますので、そちらも参考になさってください。

デフォルト暗号化について

従来の方法

従来、S3で格納ファイルの暗号化を徹底させるためには、バケットポリシーにて暗号化しないでアップロードすることを拒否するしかありませんでした。

以下のようなバケットポリシーを設定し、暗号化なしのアップロードをリジェクトします。
※以下でのバケット名はcm-kiuchi-bucketになります。

{
  "Version": "2012-10-17",
  "Id": "PutObjPolicy",
  "Statement": [
    {
      "Sid": "DenyIncorrectEncryptionHeader",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::cm-kiuchi-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    },
    {
      "Sid": "DenyUnEncryptedObjectUploads",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::cm-kiuchi-bucket/*",
      "Condition": {
        "Null": {
          "s3:x-amz-server-side-encryption": "true"
        }
      }
    }
  ]
}

以下のように、アップロードの際は暗号化オプションの指定が必要になります。

$ aws s3api put-object --bucket cm-kiuchi-bucket --key test-file.txt --body test-file.txt

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
$
$ aws s3api put-object --bucket cm-kiuchi-bucket --key test-file.txt --body test-file.txt --server-side-encryption AES256
{
    "ETag": "\"2debfdcf79f03e4a65a667d21ef9de14\"",
    "ServerSideEncryption": "AES256"
}

デフォルト暗号化を有効

しかし、今回のアップデートで、デフォルトで暗号化を有効にできるようになりました。

以下のようにデフォルト暗号化を有効に設定すると、暗号化オプションなしでアップロードしても、ちゃんと暗号化されて保存されます。

$ aws s3api put-object --bucket cm-kiuchi-bucket --key test-file.txt --body test-file.txt
{
    "ETag": "\"2debfdcf79f03e4a65a667d21ef9de14\"",
    "ServerSideEncryption": "AES256"
}

この際、もし事前に暗号化なしのアップロードを拒否するようなバケットポリシーが設定してあった場合、削除するのを忘れないでください。
また、デフォルト暗号化を有効にした際、すでに保存されているファイルは暗号化されませんので、ご注意ください。

さいごに

いかがでしたでしょうか?
些細なアップデートかもしれませんが、セキュリティを担保しつつ利用しやすくなっていると思います。

皆さんも、ぜひデフォルト暗号化を活用してみてください。