この記事は公開されてから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構成図
- 構成図より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)>”カスタマー管理型キー”>作成したエイリアスをクリック。エイリアスが作成されているか確認します。
下記の図のように確認できます。
5.参照
6.感想
AWS KMSを使うことにより暗号化キーを簡単に作成、管理が容易にできのでもっと理解を深め様々な利用用途やサービスを覚えていきたいです。
以上で、CloudFormationによるKMSの構築は完了しました。