0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQSをKMSで暗号化

0
Posted at

Amazon SQS に入るメッセージを
AWS Key Management Service(KMS)で暗号化する仕組み。


■ 何が起きているか

SQSにメッセージを送ると:

  1. メッセージはそのまま保存されない
  2. KMSのキーで暗号化される
  3. SQS内部には暗号化された状態で保存
  4. 取得時に自動で復号される

👉 アプリ側は暗号化を意識しなくてOK


■ 何のためにやるのか

✔ セキュリティ

  • 内部データ漏洩対策
  • ストレージ侵害時の保護

✔ コンプライアンス

  • 金融・個人情報系ではほぼ必須

■ KMS暗号化の2パターン

① AWS管理キー(簡単)

  • AWSがキー管理
  • 設定だけでOK

👉 初学者・通常用途はこれで十分


② カスタマー管理キー(CMK)

  • 自分でキー管理
  • IAMポリシーで細かく制御可能

👉 本番・厳しいセキュリティ要件


■ CDKでの書き方

① AWS管理キーを使う(おすすめ)

import * as sqs from 'aws-cdk-lib/aws-sqs';

const queue = new sqs.Queue(this, 'MyQueue', {
  encryption: sqs.QueueEncryption.KMS_MANAGED,
});

👉 裏でKMSが使われる


② カスタマー管理キーを使う

import * as sqs from 'aws-cdk-lib/aws-sqs';
import * as kms from 'aws-cdk-lib/aws-kms';

const key = new kms.Key(this, 'MyKey', {
  enableKeyRotation: true,
});

const queue = new sqs.Queue(this, 'MyQueue', {
  encryption: sqs.QueueEncryption.KMS,
  encryptionMasterKey: key,
});

■ 実務設定

const queue = new sqs.Queue(this, 'MyQueue', {
  encryption: sqs.QueueEncryption.KMS,
  encryptionMasterKey: key,
  dataKeyReuse: Duration.minutes(5), // コスト最適化
});

■ 注意点

① 権限が必要

KMS使うと:

  • SQS
  • Lambda / EC2

👉 両方にKMSの権限が必要

例:

"kms:Decrypt",
"kms:GenerateDataKey"

② コスト

KMSは無料ではない

  • APIコールごとに課金
  • dataKeyReuseで抑える

③ クロスサービス連携

例:

  • SQS → Lambda

👉 Lambda側にKMS権限がないと
メッセージ読めない(ハマりポイント)


■ まとめ

  • SQSのKMS暗号化 = 保存データを自動で暗号化
  • CDKでは encryption を指定するだけ
  • 本番は KMS権限設計が本質
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?