CloudFormationによる【KMS】の構築


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

皆様こんにちは。
今回はCloudFormatonを利用して高可用性アーキテクトの構築をしていきます。
この記事ではKMSの作成を行います。

1.高可用性アーキテクト構築目次

目次はこちら

2.KMSについて

AWS Key Management Service (AWS KMS) は、データの保護に使用される暗号化キーの作成と制御を容易にするマネージドサービスです。AWS KMS はハードウェアセキュリティモジュール (HSM) を使用して AWS KMS keys を保護し、FIPS 140-2 暗号化モジュール検証プログラムで検証します (中国 (北京) および中国 (寧夏) リージョンを除く)。
参照:公式ドキュメント:KMS

KMSキーのタイプ KMSキーメタデータを表示可能 KMSキーを管理可能 AWSアカウントのみに使用 自動回転
カスタマー管理のキー はい はい はい (オプション)365日(1年)ごと
AWSマネージドキー はい いいえ はい 必須1095日(3年)ごと  
AWS所有のキー いいえ いいえ いいえ 可変

KMSの主な機能

  • データ暗号化(Encrypt)
  • データ複合化(Decrypt)
  • データ暗号化に利用のためカスタマーデータキーを生成(GenerateDataKey)

暗号化キータイプ

  • 対称鍵暗号化と復号化に同じ鍵を使用します。
  • 非対称鍵は暗号化と復号化に別の鍵を使用します。暗号化に使用する鍵は公開鍵と言い、復号に使用する鍵は秘密鍵と言います。
  • "customer_master_key_spec"オプションを設定しない場合、デフォルトのキー仕様である"SYMMETRIC_DEFAULT"が設定されます。キーは対称鍵仕様です。
  • キータイプの設定はcustomer_master_key_specオプションで設定します。スペックの選択については、AWSキー管理サービスを参照してください。

KMSは主に2つの鍵を管理します。

  • マスターキー(CMK)は、データキーを暗号化する鍵です。
  • データキーを暗号化(CDKデータを暗号化する鍵です。

類似AWSリソース

類似サービスは「CloudHSM」があります。

2.構築したいKMS構成図

file

  • 構成図よりEBS、RDS、EFSにKMSを使用します。KMS キーとデータキーの利用
  • EBSは対称KMSのみをサポートするので、今回のKMS作成は対称鍵を選択します。
  • 今回作成するKMSのキー仕様は"SYMMETRIC_DEFAULT"です。

3.全体構築ソースコード

Resources:
  myKey:
    Type: 'AWS::KMS::Key'
    Properties:
      Description: An example symmetric encryption KMS key
      PendingWindowInDays: 7
      KeyPolicy:
        Version: 2012-10-17
        Id: key-hebiishi-1
        Tags:
        - Key: Name
          Value: hebiishiKMS
        Statement:
          - Sid: Enable IAM User Permissions
            Effect: Allow
            Principal:
              AWS: 'arn:aws:iam::xxx:root'
            Action: 'kms:*'
            Resource: '*'
          - Sid: Allow administration of the key
            Effect: Allow
            Principal:
              AWS: 'arn:aws:iam::xxx:user/CPI-xxx'
            Action:
              - 'kms:Create*'
              - 'kms:Describe*'
              - 'kms:Enable*'
              - 'kms:List*'
              - 'kms:Put*'
              - 'kms:Update*'
              - 'kms:Revoke*'
              - 'kms:Disable*'
              - 'kms:Get*'
              - 'kms:Delete*'
              - "kms:TagResourse*"
              - "kms:UntagResourse*"
              - 'kms:ScheduleKeyDeletion'
              - 'kms:CancelKeyDeletion'
            Resource: '*'
          - Sid: Allow use of the key
            Effect: Allow
            Principal:
              AWS: 'arn:aws:iam::xxx:user/CPI-xxx'
            Action:
              - 'kms:DescribeKey'
              - 'kms:Encrypt'
              - 'kms:Decrypt'
              - 'kms:ReEncrypt*'
              - 'kms:GenerateDataKey'
              - 'kms:GenerateDataKeyWithoutPlaintext'
            Resource: '*'
  myAlias:
    Type: 'AWS::KMS::Alias'
    Properties:
      AliasName: alias/hebiishi-KMS
      TargetKeyId: !Ref myKey
Outputs:
  myKeyArnOutput:
    Value: !GetAtt myKey.Arn
    Export:
      Name: hebiishiKMSArn

4.KMSで暗号化キーの生成

  • 暗号化キーに使用するキーポリシーを下記の通りに作成します。
  • 構成図よりEBS、RDS、EFSにKMSを使用します。KMS キーとデータキーの利用
  • EBSは対称KMSのみをサポートするので、今回のKMS作成は対称鍵を選択します。
  • 今回作成するKMSのキー仕様は"SYMMETRIC_DEFAULT"です。

4-1.KMSの作成

  • Version: 上記の日付が最新のテンプレート形式のバージョンになります。*現在の唯一の有効な値になります。
  • CloudFormationでスタックを作成するために、まずテンプレートを作成する必要があるため、構成図をもとにKMSを作成します。今回は、Yamlで記述していきます。
  • 下記の図はKMSの記述内容になります。
     ポリシーの作成AWS::KMS::Key
使用するオプション 設定値 説明
Type AWS::KMS::Key 設定したいリソース名
PendingWindowInDays 7 スタックから削除されるまでの待機期間日数の指定(7-30日)
Resources:
  myKey:
    Type: 'AWS::KMS::Key'
    Properties:
      Description: An example symmetric encryption KMS key
      PendingWindowInDays: 7
      KeyPolicy:
        Version: 2012-10-17
        Id: key-hebiishi-1

4-2.KMSに関する権限付与

  • 下記ステートメントではrootユーザに対し、KMSに関する全ての権限を付与しています。
    KMS キーへのアクセスを 1 人のユーザーだけに付与するキーポリシーを作成。その後そのユーザーを削除すると、キーは管理不能になってしまい、それを防ぐためこの設定をしています。

    キーポリシーでは、Resource 要素の値が "" になります。これは「この KMS キー」を意味します。アスタリスク ("") は、キーポリシーがアタッチされた KMS キーを識別します。
    参照:ポリシー要素の指定

Statement:
          - Sid: Enable IAM User Permissions
            Effect: Allow
            Principal:
              AWS: 'arn:aws:iam::XXX(ID):root'
            Action: 'kms:*'
            Resource: '*'
          - Sid: Allow administration of the key
            Effect: Allow
            Principal:
              AWS: 'arn:aws:iam::XXX(ID):user/XXX(IAMUser)'

4-3.KMSキーを管理する権限付与

  • 指定のユーザー(今回は私自身のIAMユーザー)にKMSキーを管理する権限(作成、一覧、削除、削除スケジュールの無効化、有効化、無効化)を付与します。
Sid: Allow administration of the key
            Effect: Allow
            Principal:
              AWS: 'arn:aws:iam::XXX(ID):user/XXX(IAMUser)'
            Action:
              - 'kms:Create*'
              - 'kms:Describe*'
              - 'kms:Enable*'
              - 'kms:List*'
              - 'kms:Put*'
              - 'kms:Update*'
              - 'kms:Revoke*'
              - 'kms:Disable*'
              - 'kms:Get*'
              - 'kms:Delete*'
              - "kms:TagResourse*"
              - "kms:UntagResourse*"
              - 'kms:ScheduleKeyDeletion'
              - 'kms:CancelKeyDeletion'
            Resource: '*'

4-4.KMSキーを使用する権限付与

  • 暗号化キーを使用しAWSリソースデータの暗号化、複合化です。
Sid: Allow use of the key
            Effect: Allow
            Principal:
              AWS: 'arn:aws:iam::XXX(ID):user/XXX(IAMUser)'
            Action:
              - 'kms:DescribeKey'
              - 'kms:Encrypt'
              - 'kms:Decrypt'
              - 'kms:ReEncrypt*'
              - 'kms:GenerateDataKey'
              - 'kms:GenerateDataKeyWithoutPlaintext'
            Resource: '*'

4-5.暗号化キーにエイリアス(Alias)を設定

エイリアスは、AWS KMS key のわかりやすい名前です。例えば、エイリアスを使用すると、1234abcd-12ab-34cd-56ef-1234567890ab の代わりに KMS キーを test-key として参照できます。
参照:エイリアスの使用

  • エイリアスを使用するとAWSマネージドキーの認識が容易になります。
  • エイリアスの機能の強み。エイリアスに、関連付けられているKMSキーをいつでも変更できること。エイリアスを使用すると、コードの記述と保守が容易になります。
使用オプション 設定値 使用用途
Type AWS::KMS::Alias 設定したい名前を入力
AliasName alias/hebiishi 設定したいAliasName
TargetKeyId !Ref myKey 参照したいリソース
myAlias:
    Type: 'AWS::KMS::Alias'
    Properties:
      AliasName: alias/hebiishi-KMS
      TargetKeyId: !Ref myKey

4-6.エイリアス(Alias)確認内容

  • AWSマネジメントコンソールから、KMS(AWS Key Management Service)>”カスタマー管理型キー”>作成したエイリアスをクリック。エイリアスが作成されているか確認します。
    下記の図のように確認できます。

file

5.参照

AWS Key Management Service

AWS::KMS::Key

ポリシー要素の指定

エイリアスの使用

6.感想

AWS KMSを使うことにより暗号化キーを簡単に作成、管理が容易にできのでもっと理解を深め様々な利用用途やサービスを覚えていきたいです。

以上で、CloudFormationによるKMSの構築は完了しました。

Last modified: 2022-06-09

Author