2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS KMSキーのテンプレート

この記事では、AWS CloudFormationテンプレート(template.yaml)とAWS SAMのデプロイ設定ファイル(samconfig.toml)を使って、AWS Key Management Service(KMS)キーを作成し、そのエイリアスを設定する方法を解説します。

1. CloudFormationテンプレート (template.yaml)

以下は、CloudFormationでKMSキーを作成するテンプレートです。

全体構成

template.yaml
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が必要。

  1. デプロイ手順
    デプロイコマンド
    以下のコマンドで、template.yamlとsamconfig.tomlを使ったデプロイが可能です:
sam deploy --template-file template.yaml --config-file samconfig.toml

ポイント
samconfig.tomlを利用することで、デプロイに必要な設定を手動で入力する必要がありません。
すでに準備した設定ファイルに基づき、迅速かつ正確にリソースを作成できます。

デプロイ結果の確認
CloudFormationスタックに作成されたリソース(KMSキー、エイリアス)が確認できます。

まとめ
この記事では、AWS KMSキーとエイリアスをCloudFormationで作成し、SAMを使ってデプロイする手順を紹介しました。このテンプレートは、IAMポリシーやアクセス制御のベストプラクティスに基づいて設計されており、安全で柔軟なキー管理を実現します。

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?