サイトアイコン 協栄情報ブログ

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の主な機能

暗号化キータイプ

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

類似AWSリソース

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

2.構築したいKMS構成図

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で暗号化キーの生成

4-1.KMSの作成

使用するオプション 設定値 説明
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に関する権限付与

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キーを管理する権限付与

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キーを使用する権限付与

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 として参照できます。
参照:エイリアスの使用

使用オプション 設定値 使用用途
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)確認内容

5.参照

AWS Key Management Service

AWS::KMS::Key

ポリシー要素の指定

エイリアスの使用

6.感想

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

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

モバイルバージョンを終了