LoginSignup
0
0

AWS KMS (Key Management Service)まとめ

Posted at

KMSの概要

AWS KMS (Key Management Service)
データ暗号化に利用するキーを作成・管理を行うためのマネージドサービス。
CMK(マスターキー)と呼ばれる鍵が存在する。
この(CMK)の可用性は99.999999999%(イレブンナイン)

KMSの仕組み

エンベロープ暗号化

データを暗号化する鍵(データキー)とデータを暗号化する鍵を暗号化する鍵(マスターキー)を利用する方式。

データ暗号化用の鍵をさらに暗号化するので、セキュリティが強化される。

KMS で使用される鍵

  • CMK(Customer Master Key)
    • データキーを暗号化するマスターキー
    • AWSが管理するHSM内でマスターキーも暗号化される
  • CDK(Customer Data Key)
    • データを暗号化するキー
    • ユーザーが都度生成する

CMK の種類

  • カスタマー管理CMK
    • AWSユーザー側で作成、管理している
    • アプリ内で使用するデータなどの暗号化に使用するCMK
    • 1年更新(変更可能)
  • AWS管理CMK
    • AWS側で作成、管理している
    • S3,RDSなどのAWSサービスの暗号化に使用される
    • 鍵は3年更新(変更不可)
  • AWS所有CMK
    • AWSが所有しているCMK、ユーザーが触れることはない

CMK の削除

CMKを削除することは可能だが一度削除したCMKは二度と復元できないので暗号化したデータを複合できなくなることがあるので要注意。
削除アクション実行後にも7-30日の待機時間が用意されており、キャンセルすることが可能。

鍵使用の流れ

  1. KMS からCMK を取り出す
  2. CMK を使用して CDK を複合化
  3. CDK を使用して 暗号化されたデータを複合化

キーローテーション

  • カスタマー管理の CMK は1年ごとの自動ローテーションが可能
  • AWS管理の CMK は自動ローテーション可能だが、期間は1年固定
  • 一年より短い周期で暗号化キーローテーションしたい場合は手動でキーを生成する

バッキングキー

KMS はローテーションされて現在は使用されていない過去のキーをすべて記録している。
このため古いキーで暗号化したデータも複合することが可能。
これをバッキングキーと呼ぶ

キーのエイリアス

CMK にはエイリアス(別名)を付けることが可能、これは同一アカウント、同一リージョン内で一意である必要がある

エイリアスは付け替えが可能なので、キー更新時に旧キーから新キーへとエイリアスを付け替えることでアプリケーション側の変更が不要となる。
1つのキーに複数のエイリアスを付けることも可能。

キーマテリアルのインポート

キーマテリアルとは

CMK のメタデータを除く暗号・複合に利用する部分。
インポートすることをBYOKと呼ぶ。
インポートするキーは256bitの対象キーのみ利用可能。

KMSのアクセスコントロール

  • IAMによるユーザーベースコントロール
  • キーポリシーによるリソースベースコントロール
  • 許可によるリソースベースコントロール
    が可能。

キーポリシー

リソースベースのポリシーが定義可能。
条件キーを用いて設定が可能。

デフォルトのキーポリシー

{
    "Id": "key-consolepolicy-3",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Enable IAM User Permissions",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:root"
            },
            "Action": "kms:*",
            "Resource": "*"
        },
        {
            "Sid": "Allow access for Key Administrators",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/adminA"
            },
            "Action": [
                "kms:Create*",
                "kms:Describe*",
                "kms:Enable*",
                "kms:List*",
                "kms:Put*",
                "kms:Update*",
                "kms:Revoke*",
                "kms:Disable*",
                "kms:Get*",
                "kms:Delete*",
                "kms:TagResource",
                "kms:UntagResource",
                "kms:ScheduleKeyDeletion",
                "kms:CancelKeyDeletion"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Allow use of the key",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/userA"
            },
            "Action": [
                "kms:Encrypt",
                "kms:Decrypt",
                "kms:ReEncrypt*",
                "kms:DescribeKey",
                "kms:GetPublicKey"
            ],
            "Resource": "*"
        },
        {
            "Sid": "Allow attachment of persistent resources",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/userA"
            },
            "Action": [
                "kms:CreateGrant",
                "kms:ListGrants",
                "kms:RevokeGrant"
            ],
            "Resource": "*",
            "Condition": {
                "Bool": {
                    "kms:GrantIsForAWSResource": "true"
                }
            }
        }
    ]
}

許可

特定のIAMユーザーやIAMロールなどにCMKの利用を許可することができる機能。
セキュリティグループと同じホワイトリスト方式

AWS CLI や AWS SDK を使用して許可を作成できる
許可(Grant)の作成方法はこちら

KMS の制約事項

  • リージョン間で鍵の共有は不可
    • リージョン間で鍵を共有したい場合は CMK 作成時にマルチリージョンキーを選択する
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