【AWS】KMSを利用したS3暗号化設定手順!EC2からSSE-KMSでアップロードする方法を解説

S3アイキャッチ

AWSでセキュアなストレージを構築する際、よく利用されるのが Amazon Web Services のKMS(Key Management Service)を利用したS3暗号化です。

今回は、

  • KMS使用者用IAMポリシー作成
  • EC2用IAMロール作成
  • カスタマーマネージドキー(CMK)作成
  • S3バケットの暗号化設定
  • EC2からSSE-KMSを利用したアップロード確認

までをハンズオン形式で解説します。

また、実務でもよく利用される「EC2 → S3へのKMS暗号化アップロード」構成をベースにしています。

構成図

  • EC2にIAMロールを付与
  • S3アップロード時にKMSキーを利用
  • S3オブジェクトをSSE-KMSで暗号化

という流れになります。

KMS使用者用IAMポリシーを作成

まずはKMSを利用するためのIAMポリシーを作成します

IAMポリシー作成手順

IAMダッシュボードへ移動し左部メニューの「ポリシー」を選択
「ポリシーの作成」をクリック

JSONタブに切り替えて、下記の内容を貼り付け「次へ」をクリック

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "KMSUsage",
      "Effect": "Allow",
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey",
        "kms:DescribeKey"
      ],
      "Resource": "*"
    }
  ]
}

ポリシー名は適当に入力します。今回は「kms-pol」という名前にしました。
名前を入力したら「ポリシーの作成」をクリック

KMSロールの作成

左部メニューの「ロール」を選択「ロールを作成」をクリック

今回はEC2よりアップロードしたいので、ユースケースに「EC2」を入力します。

許可を追加で先ほど作成した「kms-pol」とS3のフルアクセスを付与します。
許可の境界は設定しません。

KMSポリシーを付与

S3フルアクセス「AmazonS3FullAccess」の付与を行います。

ロール名を適宜入力(今回は「kms_s3_for_ec2-rle」)を入力
信頼エンティティや許可を確認し、問題なければ「ロールを作成」をクリック

下記のような緑のポップアップが表示されればOKです。

KMS作成時には管理者の指定も必要ですが、今回は管理者IAMユーザーを指定するので作成しません。

カスタマーマネージドキー(CMK)を作成

続いてKMSキーを作成します。
KMSダッシュボードへ移動し「キーの作成」をクリック

キータイプの選択

今回はデフォルト設定のまま進めます。

対称キーと非対称キーの違い

項目対称キー非対称キー
同じ鍵公開鍵・秘密鍵
主用途データ暗号化通信・署名
AWSサービス暗号化×
処理速度高速やや低速
自動ローテーション×
外部公開不要公開鍵のみ可能
S3暗号化用途では、通常「対称キー」を利用します。

エイリアスを入力、今回は「test-s3-dev」にしました

「キーの管理アクセス許可を定義」では今回は管理者IAMユーザーを指定します。

「キーの使用法アクセス許可を定義」 には先ほど作成した「kms_s3_for_ec2-rle」と入力し
「次へ」をクリック

キーポリシーを編集で最終チェックを行い、問題なければ「次へ」をクリック

確認セクションに移動するので、問題なければ「完了」をクリック

キーが正常に作成できたのを確認

S3の作成

バケットを作成セクションで下記のように入力。この時KMSは先ほど作成したKMSのARNを入力します。
詳細設定の「オブジェクトロック」はデフォルトの「無効にする」のままにします。

また今回は検証のためパブリックアクセス可能なS3を作成します。

作成完了確認。緑のポップアップが表示されるのを確認します。

EC2からS3へKMS暗号化アップロード

Amazon LinuxでEC2を作成し、先ほど作成したS3にアップロードします。
※このときEC2に先ほど作成したIAMロールを付与するのを忘れずに!

下記コマンドでアップロード

aws s3 cp test.txt s3://your-bucket-name/ \
  --sse aws:kms \
  --sse-kms-key-id alias/s3-used-kms-customer-key

動作確認

S3の中にtest.txtテキストがアップロードしているのを確認

オブジェクトの詳細画面で、暗号化設定がされていることを確認します。

SSE-KMSを利用するメリット

SSE-KMSを利用することで、以下のようなメリットがあります。

メリット内容
鍵管理をAWSで実施鍵管理負荷を軽減
CloudTrail連携KMS利用ログ取得可能
アクセス制御IAM/KMSポリシーで細かく制御
自動ローテーションセキュリティ向上
実務利用が多い監査対応しやすい

まとめ

今回は Amazon Web Services 環境で、

  • IAMポリシー作成
  • EC2用IAMロール作成
  • KMSキー作成
  • S3 SSE-KMS設定
  • EC2から暗号化アップロード

までを実施しました。

KMSはAWS環境における重要なセキュリティ要素の1つです。

特に実務では「S3暗号化」「RDS暗号化」「Secrets Manager」などと組み合わせて利用されるケースが非常に多いため、ぜひ触って慣れておくことをおすすめします。