EC2からKMSにより暗号化されたS3へUploadを行う。


EC2からS3へのファイルアップロードに手間取ったので記録します。

実施すること
1.EC2にアタッチしているIAMロールの見直し
2.S3のバケットポリシーの見直し

1.EC2にアタッチしているIAMロールの見直し
以下のポリシーがアタッチされていることを確認します。
 ・S3へのアクセス許可
  手っ取り早く実装したいなら「AmazonS3FullAccess」をアタッチすればOK。
  セキュリティ要件に応じて書き換えてください。

 ・KMSへのアクセス許可
  AWS管理ポリシーとしては提供されていないので、作成します。

kms-policy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "kms:GenerateDataKey",
            "Resource": "arn:aws:kms:*:YOURACCOUNTID:key/*"
        }
    ]
}

2.S3のバケットポリシーの見直し
アクセス許可のバケットポリシーに明示的にdenyポリシーが書かれていないか確認します。
必要に応じて削除してください。
何も記述されていない状態でも、EC2側に適切なロールがアタッチされていれば、uploadは可能ですが、記述例を載せておきます。

bucket-policy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SourceIP",
            "Effect": "Deny",
            "Principal": "*",
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::YOURS3BUCKETNAME/*",
            "Condition": {
                "NotIpAddress": {
                    "aws:SourceIp": [
                        "SOURCEIP1",
                        "SOURCEIP2"
                    ]
                }
            }
        }
    ]
}

以上です。どなたかの参考になれば。