AWS KMSキーのテンプレート
この記事では、AWS CloudFormationテンプレート(template.yaml)とAWS SAMのデプロイ設定ファイル(samconfig.toml)を使って、AWS Key Management Service(KMS)キーを作成し、そのエイリアスを設定する方法を解説します。
1. CloudFormationテンプレート (template.yaml)
以下は、CloudFormationでKMSキーを作成するテンプレートです。
全体構成
AWSTemplateFormatVersion: '2010-09-09'
Description: Create a KMS Key with specific policies and an alias
Resources:
MyKMSKey:
Type: AWS::KMS::Key
Properties:
Description: "My KMS Key"
KeyPolicy:
Version: "2012-10-17"
Id: "key-consolepolicy-3"
Statement:
- Sid: "Enable IAM User Permissions"
Effect: "Allow"
Principal:
AWS: !Sub "arn:aws:iam::${AWS::AccountId}:root"
Action: "kms:*"
Resource: "*"
- Sid: "Allow access for Key Administrators"
Effect: "Allow"
Principal:
AWS: !Sub "arn:aws:iam::${AWS::AccountId}:role/AdminRole"
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: !Sub "arn:aws:iam::${AWS::AccountId}:role/AdminRole"
Action:
- "kms:Encrypt"
- "kms:Decrypt"
- "kms:ReEncrypt*"
- "kms:GenerateDataKey*"
- "kms:DescribeKey"
Resource: "*"
- Sid: "Allow attachment of persistent resources"
Effect: "Allow"
Principal:
AWS: !Sub "arn:aws:iam::${AWS::AccountId}:role/AdminRole"
Action:
- "kms:CreateGrant"
- "kms:ListGrants"
- "kms:RevokeGrant"
Resource: "*"
Condition:
Bool:
kms:GrantIsForAWSResource: "true"
- Sid: "Allow Eventbridge"
Effect: "Allow"
Principal:
Service: "events.amazonaws.com"
Action:
- "kms:GenerateDataKey"
- "kms:Decrypt"
Resource: "*"
MyKMSKeyAlias:
Type: AWS::KMS::Alias
Properties:
# エイリアス名を指定
AliasName: "alias/key-sns"
# 作成したKMSキーをターゲットに設定
TargetKeyId: !Ref MyKMSKey
Outputs:
KMSKeyId:
Description: "KMS Key ID"
Value: !Ref MyKMSKey
KMSKeyAlias:
Description: "KMS Key Alias"
Value: !Sub "alias/key-sns"
このテンプレートでは、以下のリソースを定義しています
MyKMSKey: AWS KMSキー
MyKMSKeyAlias: KMSキーのエイリアス
Outputs: 作成されたKMSキーとエイリアスのIDを出力
MyKMSKey
プロパティの解説
MyKMSKey:
Type: AWS::KMS::Key
Properties:
Description: "My KMS Key"
KeyPolicy:
...
Description: KMSキーの説明。後からAWSコンソールで確認する際に役立ちます。
KeyPolicy: KMSキーのポリシーを定義。詳細は以下で解説します。
KeyPolicy
KMSキーのアクセス権限を設定する重要な部分です。
- Sid: "Enable IAM User Permissions"
Effect: "Allow"
Principal:
AWS: !Sub "arn:aws:iam::${AWS::AccountId}:root"
Action: "kms:*"
Resource: "*"
Enable IAM User Permissions: ルートユーザー(arn:aws:iam::${AWS::AccountId}:root)に完全な権限を付与。
その他、以下のポリシーを定義しています:
Allow access for Key Administrators: 特定のIAMロール(AdminRole)にKMSキーの作成・更新・削除権限を付与。
Allow use of the key: KMSキーの暗号化や復号化など、データ操作に関する権限をAdminRoleに付与。
Allow attachment of persistent resources: KMSキーと他のAWSリソース(例: S3バケット)を結びつける権限を付与。
Allow Eventbridge: Amazon EventBridgeサービスにデータキーの生成や復号化を許可。
MyKMSKeyAlias
MyKMSKeyAlias:
Type: AWS::KMS::Alias
Properties:
AliasName: "alias/key-sns"
TargetKeyId: !Ref MyKMSKey
AliasName: エイリアス名。簡潔で意味が伝わりやすい名前を推奨します(例: alias/key-sns)。
TargetKeyId: 作成したKMSキーのIDを参照。
Outputs
Outputs:
KMSKeyId:
Description: "KMS Key ID"
Value: !Ref MyKMSKey
KMSKeyAlias:
Description: "KMS Key Alias"
Value: !Sub "alias/key-sns"
CloudFormationのスタック出力として、以下を提供します:
KMSKeyId: KMSキーのユニークID
KMSKeyAlias: エイリアス名(alias/key-sns)
2. SAMデプロイ設定 (samconfig.toml)
AWS SAM(Serverless Application Model)でこのテンプレートをデプロイするための設定ファイルです。
samconfig.tomlの内容
version = 0.1
[default.deploy.parameters]
stack_name = "key-sns"
region = "ap-northeast-1"
s3_bucket = "samdeploy-bucket"
capabilities = "CAPABILITY_NAMED_IAM"
各パラメータの説明
version: 設定ファイルのバージョン。常に0.1を指定。
stack_name: デプロイ時に作成されるCloudFormationスタックの名前。ここではkey-sns。
region: デプロイ先のAWSリージョン。例: ap-northeast-1(東京リージョン)。
s3_bucket: SAMがテンプレートを一時的にアップロードするためのS3バケット。
capabilities: IAMリソース作成時に必要な権限。KMSキーやIAMロールを作成する際にはCAPABILITY_NAMED_IAMが必要。
- デプロイ手順
デプロイコマンド
以下のコマンドで、template.yamlとsamconfig.tomlを使ったデプロイが可能です:
sam deploy --template-file template.yaml --config-file samconfig.toml
ポイント
samconfig.tomlを利用することで、デプロイに必要な設定を手動で入力する必要がありません。
すでに準備した設定ファイルに基づき、迅速かつ正確にリソースを作成できます。
デプロイ結果の確認
CloudFormationスタックに作成されたリソース(KMSキー、エイリアス)が確認できます。
まとめ
この記事では、AWS KMSキーとエイリアスをCloudFormationで作成し、SAMを使ってデプロイする手順を紹介しました。このテンプレートは、IAMポリシーやアクセス制御のベストプラクティスに基づいて設計されており、安全で柔軟なキー管理を実現します。