LoginSignup
12
6

More than 3 years have passed since last update.

AWS S3 デフォルト暗号化をやってみた

Last updated at Posted at 2019-05-09

デフォルト暗号化を有効に設定すると、暗号化オプションなしでアップロードしても、ちゃんと暗号化されて保存されます。
ただし、バケットポリシーに暗号化なしのPUTリクエストを拒否するバケットポリシーがある場合、それは拒否されます。
というのも、以前はデフォルト暗号化がなかった時は、バケットポリシーで暗号化されていないオブジェクトを拒否するようにする必要がありました。
Amazon S3 で管理された暗号化キーによるサーバー側の暗号化 (SSE-S3) を使用したデータの保護
そのため、バケットポリシーを確認するようにしましょう。

SSE-S3とSSE-KMSのデフォルト暗号化の動作を中心に操作していきます。
↓のページ参考になります。
SSE-S3とSSE-KMSの違いを知る

1.SSE-S3

AES-256でとりあえず設定してみる。
image.png

とりあえず適当なファイルをアップロード。

"ServerSideEncryption": "AES256" 暗号化されていることが確認できた。

[root@ip-172-31-43-135 ~]# aws s3api head-object --bucket naata-encryption --key test.txt
{
    "AcceptRanges": "bytes",
    "ContentType": "text/plain",
    "LastModified": "Thu, 09 May 2019 01:05:46 GMT",
    "ContentLength": 5,
    "ETag": "\"d8e8fca2dc0f896fd7cb4cb0031ba249\"",
    "ServerSideEncryption": "AES256",
    "Metadata": {}
}

2.SSE-KMS

ステップ 1 エイリアスと説明の追加
キーのエイリアスと説明を入力します。
image.png

ステップ 2 タグの追加
タグを追加できます。
image.png

ステップ 3 キーの管理アクセス許可を定義
【鍵の管理者】のユーザーあるいはRoleを指定します。
ここでは、EC2(Amazon Linux2)からIMAロールでS3を使って操作しているため、そのIMAロールを指定しました。
image.png

ステップ 4 キーの使用アクセス許可を定義
【鍵の利用者】のユーザーあるいはRoleを指定します
他のAWSアカウントも指定できるみたいですが、今回は管理者と利用者を同一にしています。
image.png

ステップ 5 キーポリシーの確認と編集
image.png

{
    "Id": "key-consolepolicy-3",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::************:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow access for Key Administrators",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::************:role/naata-s3-access"
            },
            "Action": [
                "kms:Create*",
                "kms:Describe*",
                "kms:Enable*",
                "kms:List*",
                "kms:Put*",
                "kms:Update*",
                "kms:Revoke*",
                "kms:Disable*",
                "kms:Get*",
                "kms:Delete*",
                "kms:TagResource",
                "kms:UntagResource",
                "kms:ScheduleKeyDeletion",
                "kms:CancelKeyDeletion"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::************:role/naata-s3-access"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:GenerateDataKey*",
                "kms:DescribeKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Allow attachment of persistent resources",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::************:role/naata-s3-access"
            },
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        }
    ]
}

適当なファイルをアップロードし、暗号化されているか確認する。

[root@ip-172-31-43-135 ~]# aws s3api head-object --bucket naata-encryption --key
 test2.txt
{
    "AcceptRanges": "bytes",
    "ContentType": "text/plain",
    "LastModified": "Thu, 09 May 2019 02:23:32 GMT",
    "ContentLength": 12,
    "ETag": "\"932897aa0794109c3a8da9ea61d9a264\"",
    "ServerSideEncryption": "aws:kms",
    "SSEKMSKeyId": "arn:aws:kms:ap-northeast-1:**********:key/515339c7-8419-4377-aaba-12ece413c076",
    "Metadata": {}
}
12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6