0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AuroraでKMSを試してみた

Posted at

背景・目的

以前、Amazon Aurora のリソース暗号化について整理しました。
今回は、AWS Key Management Service(KMS)を使用した暗号化について整理し、実際に試してみます。

まとめ

下記に特徴をまとめます

特徴 説明
概要 ・Aurora は、キー管理のために AWS Key Management Service(AWS KMS) と自動的に統合されている
・暗号化方式として エンベロープ暗号化 が使用される
使用できるKMSキー AWS マネージドキー
カスタマーマネージドキー

概要

下記を基に整理します。

  • Aurora は、キー管理のために AWS Key Management Service(AWS KMS) と自動的に統合されている
  • Aurora の暗号化方式として エンベロープ暗号化 が使用される
  • DB クラスターの暗号化には 下記の2 種類の KMS キー を利用できる
    • AWS マネージドキー
      • AWS サービスが 自動的に作成・管理・使用
      • Aurora では RDS 用 AWS マネージドキー(aws/rds) がデフォルトで使用される
      • ユーザーは 管理・ローテーション・削除ができない
    • カスタマーマネージドキー
      • KMS キーに対して フルコントロール(ポリシー・ローテーション等) が必要な場合に使用
  • KMS キーに対する すべての操作の監査ログ は AWS CloudTrail で確認可能
  • キーのローテーションについては AWS KMS のキー管理機能を利用して行われる

カスタマーマネージドキーの使用の承認

  • Amazon Aurora は、暗号化オペレーション時にリソースを作成・変更するユーザーに代わって動作する
  • Aurora リソースを カスタマーマネージドキー で作成・変更するには、ユーザーに以下の KMS 権限 が必要
    • kms:CreateGrant
    • kms:DescribeKey
  • これらの権限は、以下のいずれかで指定できる
    • KMS キーポリシー
    • IAM ポリシー(キーポリシーで許可されている場合)
  • RDS(Aurora 含む)などのマネージドサービスで使用するKMS キーポリシーに 明示的な拒否(Deny) を設定する場合
    • リソース所有アカウントを許可する条件を必ず指定する必要がある
    • これを指定しないと、IAM ユーザーを例外に含めていても操作が失敗する場合がある

Amazon RDS 暗号化コンテキスト

  • Aurora(および代行する Amazon EBS)KMSを使用する際、暗号化コンテキスト(Encryption Context) を指定する
  • 暗号化コンテキストは、追加の認証データ(AAD: Additional Authenticated Data) として使われ、データの整合性を保証する役割を持つ
  • 暗号化時に指定した暗号化コンテキストは、復号時にも完全に同一である必要がある。一致しない場合、復号は 必ず失敗する

実践

シナリオ1: 基本的なCMK暗号化

CMK

  1. CMKを作成します
  2. 作成されました
    image.png

Auroraクラスタの作成

  1. CMKでAuroraクラスタ作成します
  2. KMSキーが利用されていました
    image.png

シナリオ2: KMS無効化の影響確認

KMSを無効化した際の挙動と、再有効化した際の挙動を確認します

EC2のデプロイ

  1. EC2をデプロイします

テストデータの作成

  1. EC2にセッションマネージャーで接続します

  2. psqlで接続します

  3. テスト用のテーブルを作成します

    XXXXXX=> -- テーブル作成
    
    CREATE TABLE users (
        id SERIAL PRIMARY KEY,
        name VARCHAR(100),
        email VARCHAR(100),
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    CREATE TABLE
    XXXXXX=>
    
  4. データを投入します

    XXXXXX=> INSERT INTO users (name, email) VALUES
    ('Alice', 'alice@example.com'),
    ('Bob', 'bob@example.com'),
    ('Charlie', 'charlie@example.com');
    
  5. 確認できました

    SELECT * FROM users;
    INSERT 0 3
     id |  name   |        email        |         created_at
    ----+---------+---------------------+----------------------------
      1 | Alice   | alice@example.com   | 2025-12-31 03:20:57.636584
      2 | Bob     | bob@example.com     | 2025-12-31 03:20:57.636584
      3 | Charlie | charlie@example.com | 2025-12-31 03:20:57.636584
    (3 rows)
    
    XXXXXX=>
    

KMSキー無効化した際の挙動の確認

  1. KMSに移動します

  2. ナビゲーションペインで「カスタマー管理型のキー」をクリックします

  3. 該当するキーをクリックします

  4. キーのアクションをクリックし、「無効」を選択します
    image.png

  5. ステータスが「無効」になりました
    image.png

  6. しばらくするとクラスターのステータスが「inaccessible-encryption-credentials-recoverable」に変わります(おそらく5分〜10分程度)
    image.png

  7. 以前のSELECTを実行しますが、結果が返ってきません

    XXXXXX=> SELECT * FROM users;
    
  8. 新しく接続しようとしても、結果が返ってきません

    $ psql -h aurora-XXXXXX.ap-northeast-1.rds.amazonaws.com      -U XXXXX      -d XXXXX      -p XXXX
    

KMSキーを最有効化した際の挙動の確認

  1. KMSに移動します

  2. ナビゲーションペインで「カスタマー管理型のキー」をクリックします

  3. 該当するキーをクリックします

  4. キーのアクションをクリックし、「有効」を選択します
    image.png

  5. KMSのステータスが「有効」になりました
    image.png

  6. 30分経っても「inaccessible-encryption-credentials-recoverable」のままでしたが、しばらくすると、「起動中」→「利用可能」に変わりました

  7. 改めて接続します。できました

    $ psql -h aurora-XXXXXX.ap-northeast-1.rds.amazonaws.com      -U XXXXXX      -d XXXXXX      -p XXXX
    Password for user XXXXXX:
    psql (15.15)
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
    Type "help" for help.
    
    XXXXXX=>
    
  8. クエリも成功しました

    XXXXX=> SELECT * FROM users;
     id |  name   |        email        |         created_at
    ----+---------+---------------------+----------------------------
      1 | Alice   | alice@example.com   | 2025-12-31 03:20:57.636584
      2 | Bob     | bob@example.com     | 2025-12-31 03:20:57.636584
      3 | Charlie | charlie@example.com | 2025-12-31 03:20:57.636584
      4 | David   | david@example.com   | 2025-12-31 03:34:11.803545
    (4 rows)
    
    XXXXX=>
    

シナリオ3: スナップショット暗号化

スナップショットを作成した際のCMKと、 砂プッショットをコピーした際のCMKがことな場合の挙動を確認します。

スナップショットを作成

最初のCMKで暗号化されたAuroraからスナップショット作成します

  1. Auroraクラスタを選択し、「スナップショットの取得」をクリックします
    image.png

  2. スナップショット名を指定し、「スナップショットの取得」をクリックします
    image.png

  3. しばらくすると作成されました
    image.png

別のCMKを作成

  1. あたらしくCMK(cmk-b)を作成します
    image.png

CMK-Bでスナップショットを暗号化コピー

  1. RDSに移動します
  2. ナビゲーションペインで「スナップショット」をクリックします
  3. 上記で作成した、snapshotを選択します
  4. アクション>「スナップショットをコピー」をクリックします
    image.png
  5. KMSキーには、新しく作ったキーを指定し「スナップショットをコピー」をクリックします
    image.png
  6. できました
    image.png

CMK-Bのスナップショットから新クラスタ復元

  1. 作成したスナップショットを選択します

  2. アクション>「スナップショットを復元」をクリックします
    image.png

  3. DBインスタンス識別子を指定して、「DBクラスターを復元」をクリックします

  4. EC2からリストアされたクラスタにアクセスします

    sh-5.2$ psql -h aurora-XXXXX.ap-northeast-1.rds.amazonaws.com      -U XXXXX      -d XXXXX      -p 5432
    Password for user XXXXX:
    psql (15.15)
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
    Type "help" for help.
    
    XXXXX=> SELECT * FROM users;
     id |  name   |        email        |         created_at
    ----+---------+---------------------+----------------------------
      1 | Alice   | alice@example.com   | 2025-12-31 03:20:57.636584
      2 | Bob     | bob@example.com     | 2025-12-31 03:20:57.636584
      3 | Charlie | charlie@example.com | 2025-12-31 03:20:57.636584
      4 | David   | david@example.com   | 2025-12-31 03:34:11.803545
    (4 rows)
    
    XXXXX=>
    

CMK-Aを無効化

  1. 最初のクラスターで使用していたKMSを無効化します
    image.png

  2. Auroraのクラスタでステータスが「Inaccessible-encryption-credentials-recoverable」になるまでまちます

  3. EC2から元のクラスタに接続します。アクセスできませんでした

    $ psql -h aurora-XXXXX.ap-northeast-1.rds.amazonaws.com      -U XXXXX      -d XXXXX      -p XXXX
    
  4. 新規に作成した(リストアした)クラスタに接続します。アクセスできました

    sh-5.2$ psql -h aurora-XXXXX.ap-northeast-1.rds.amazonaws.com      -U XXXXX      -d XXXXX      -p XXXXX
    Password for user XXXXX:
    psql (15.15)
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, compression: off)
    Type "help" for help.
    
    XXXXX=> SELECT * FROM users;
     id |  name   |        email        |         created_at
    ----+---------+---------------------+----------------------------
      1 | Alice   | alice@example.com   | 2025-12-31 03:20:57.636584
      2 | Bob     | bob@example.com     | 2025-12-31 03:20:57.636584
      3 | Charlie | charlie@example.com | 2025-12-31 03:20:57.636584
      4 | David   | david@example.com   | 2025-12-31 03:34:11.803545
    (4 rows)
    
    XXXXX=>
    

考察

今回、AuroraでKMSの利用を試してみました。
下記のようなことがわかりました。

  • KMS無効化は即座には影響しないが、確実にサービス停止する
  • recoverable 状態なので、KMS有効化で自動復旧可能
  • 手動起動は不要(自動で復旧プロセスが開始される)
  • スナップショットは別のKMSキーで再暗号化できる
  • 異なるKMSキーを使う複数のクラスタを独立管理できる

参考

0
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?