【AWS】KMSを利用したS3暗号化設定手順!EC2からSSE-KMSでアップロードする方法を解説
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サービス暗号化 | ◎ | × |
| 処理速度 | 高速 | やや低速 |
| 自動ローテーション | ○ | × |
| 外部公開 | 不要 | 公開鍵のみ可能 |
エイリアスを入力、今回は「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」などと組み合わせて利用されるケースが非常に多いため、ぜひ触って慣れておくことをおすすめします。