暗号キーへの「一時入室許可証」を理解しよう
動的なアクセス許可の仕組み
KMSキーへの
「一時的なアクセス許可証」
のこと。
IAMポリシーを変更せずに、プログラムから動的に権限を付与・取り消しできる仕組みです。
AWSサービス(EBS、RDS、Lambdaなど)がKMSキーを使うとき、
自動的にグラントが発行
されて一時的に暗号化・復号の権限が与えられます
高級ホテルの金庫室を想像してください。通常、金庫室に入れるのは正規スタッフ(IAMポリシーで許可された人)だけです。 でも、ルームサービスのスタッフが一時的に金庫室の物を取り出す必要があるとき... 「一時入室カード」(グラント) を発行して、限られた操作だけを許可します。
大切なデータを暗号化・復号する「秘密の鍵」が保管されている場所
事前に登録された人だけが入れる。変更には人事部(管理者)の承認が必要
必要なときだけ発行。「取り出し」だけ許可など、操作を限定できる
EBS、RDS、Lambdaなど。一時的にキーを使う必要があるサービス
暗号化・復号の実行
IAMポリシー
:ユーザーやアプリケーションが継続的にキーを使う場合
グラント
:AWSサービスが一時的にキーを使う場合、または動的に権限を付与したい場合
データを暗号化
データを復号
データキーを生成
別のキーで再暗号化
さらにグラントを作成
キー情報を取得
グラントを無効化
暗号化済みキーのみ生成
| 要素 | 説明 | 例 |
|---|---|---|
| Key ID | 対象となるKMSキーのID | arn:aws:kms:ap-northeast-1:123456789012:key/xxxx |
| Grantee Principal | 権限を受け取るプリンシパル | IAMロール、AWSサービス |
| Operations | 許可する操作のリスト | Decrypt, Encrypt |
| Retiring Principal | グラントを無効化できるプリンシパル | IAMユーザー、ロール |
| Constraints | 追加の制約条件 | 暗号化コンテキストの制限 |
| Grant Token | グラント作成直後に使用するトークン | 即時利用時に必要 |
EC2インスタンスがEBSボリュームをアタッチするとき、EC2サービスがKMSキーへのグラントを自動作成。ボリュームのデータを復号できるようになります。
RDSインスタンスが暗号化されたデータベースを起動するとき、RDSサービスがグラントを取得。データの読み書き時に自動で暗号化・復号が行われます。
Lambda関数が暗号化された環境変数や、KMSで暗号化されたS3オブジェクトにアクセスするとき、一時的なグラントで復号権限を取得します。
別のAWSアカウントのサービスがKMSキーを使う必要があるとき、グラントで一時的なアクセス権を付与できます。
CreateGrant APIでグラントを作成。誰が(Grantee)、どのキーで、何の操作ができるかを指定します。AWSサービスの場合は自動で作成されます。
グラント作成直後は反映に数分かかる場合があります。即座に使いたい場合は「グラントトークン」を使って操作を実行します。
Granteeがグラントで許可された操作(Encrypt、Decryptなど)をKMSキーに対して実行できるようになります。
使い終わったらRetireGrant APIでグラントを無効化。セキュリティのベストプラクティスとして、不要になったグラントは速やかに削除しましょう。
✅ 最小権限の原則:必要な操作のみを許可する
✅ 暗号化コンテキスト:制約条件(Constraints)を使って範囲を限定
✅ 定期的な棚卸し:list-grantsで不要なグラントがないか確認
✅ Retiring Principalの設定:誰がグラントを無効化できるか明確にする
KMSグラントは、暗号キーへの
「一時的な入室許可証」
AWSサービスが自動で使用し、動的な権限管理を実現します
EBS、RDS、Lambdaなどを使っているなら、
裏側でグラントが活躍していることを覚えておきましょう! 🎉
Created by SSuzuki1063
AWS SAP Learning Resources