[アップデート] Control Tower で管理下アカウントに対して一括で KMS 暗号化設定ができる様になりました

Control Tower 管理下のアカウントに対して一括で KMS 暗号化を行う事ができる様になりました。一括設定系の機能は最高ですね
2021.07.29

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

こんにちは、大前です。

Control Tower に以下のアップデートがありましたので、お知らせします。

どんなアップデートか

Control Tower によってセットアップされるサービス(現時点での対象は Config と Cloudtrail)や関連する S3 上のデータに対する KMS 暗号化の設定を Control Tower 経由で行う事ができるようになりました。

Control Tower 経由で設定を行うことにより、複数アカウントに対して一括で設定を入れられるので、これだけでも嬉しいケースはありそうです。

一方で、AWS のベストプラクティスとしては KMS 暗号化の利用が推奨されていますが、コストも発生する部分になりますので、導入は各企業のセキュリティポリシー等と相談して判断しましょう。

やってみた

0.KMS キーの作成

事前準備として、Control Tower で利用する KMS キーを作成します。

注意点として、対称キーであること、マルチリージョンキーは不可、など利用する KMS キーに対する条件がありますので、一度ドキュメントには目を通しておきましょう。

キーは次の要件を満たしている必要があります。

有効 対称 マルチリージョンキーではありません ポリシーに正しい権限が追加されています

KMS コンソールからキーの作成を開き、それぞれ設定を進めます。

キーのタイプは対称を選択。

任意のエイリアスを入力。今回は "ct-kms-key" としました。

アクセス許可系の設定はデフォルトのまま何も選択せずに進め、最後の画面でキーポリシーを直接編集します。

キーのポリシーを更新するには に記載されているサンプルポリシーを今回は利用します。

{
    "Sid": "Allow CloudTrail and AWS Config to encrypt/decrypt logs",
        "Effect": "Allow",
        "Principal": {
        "Service": [
        "cloudtrail.amazonaws.com",
        "config.amazonaws.com"
    ]
    },
        "Action": [
        "kms:GenerateDataKey",
        "kms:Decrypt"
    ],
        "Resource": "*"
}

上記のポリシーをステートメントに追加したら、「完了」をクリックして KMS キーを作成します。

1.ランディングゾーンへの KMS 暗号化設定

KMS キーが用意できたので、早速 Control Tower ランディングゾーンに対して KMS 暗号化を適用してみたいと思います。

コンソールから Control Tower のランディングゾーン設定を開くと、KMS 暗号化に関する設定が増えていることが確認できます。

「設定の変更」を開くと KMS 暗号化に関する設定項目が増えているので、有効化し、先ほど作成した KMS キーを指定してランディングゾーンの更新を実行します。

更新が開始されました。気長に待ちましょう。

30~40分ほど待ち、ランディングゾーンの更新が完了しました。KMS 暗号化の設定が有効になっている事も確認できます。

2.StackSet を確認してみる

あらかた想像はできますが、ドキュメントをみても具体的に何が更新されているのか読み取れなかったので、StackSet から KMS 関連の更新が発生していそうな部分を確認してみました。

AWSControlTowerBP-BASELINE-CLOUDTRAIL

CloudTrail の暗号化設定が追加されている事がわかります。

Resources:
  Trail:
    Type: AWS::CloudTrail::Trail
    Properties:
      TrailName: !Sub ${ManagedResourcePrefix}-BaselineCloudTrail
      S3BucketName: !Ref AuditBucketName
      S3KeyPrefix: !Ref AWSLogsS3KeyPrefix
      SnsTopicName: !Sub arn:aws:sns:${AWS::Region}:${SecurityAccountId}:${AllConfigTopicName}
      IsLogging: True
      EnableLogFileValidation: !Ref EnableLogFileValidation
      KMSKeyId: !If
        - IsUsingKmsKey
        - !Ref KMSKeyArn
        - ''
      IncludeGlobalServiceEvents: !If
        - IsMultiRegion
        - True
        - !Ref IncludeGlobalEvents
      IsMultiRegionTrail: !Ref MultiRegion
      CloudWatchLogsLogGroupArn: !If
        - IsPublishToCloudWatchLogs
        - !GetAtt TrailLogGroup.Arn
        - !Ref AWS::NoValue
      CloudWatchLogsRoleArn: !If
        - IsPublishToCloudWatchLogs
        - !GetAtt TrailLogGroupRole.Arn
        - !Ref AWS::NoValue

AWSControlTowerBP-BASELINE-CONFIG

Config のデリバリーチャンネルの KMS 設定が追加されています。

ConfigDeliveryChannel:
    Type: AWS::Config::DeliveryChannel
    Properties:
      Name: !Sub ${ManagedResourcePrefix}-BaselineConfigDeliveryChannel
      ConfigSnapshotDeliveryProperties:
        DeliveryFrequency: !FindInMap
          - Settings
          - FrequencyMap
          - !Ref Frequency
      S3BucketName: !Ref AuditBucketName
      S3KeyPrefix: !Ref AWSLogsS3KeyPrefix
      SnsTopicARN: !Sub arn:aws:sns:${AWS::Region}:${SecurityAccountId}:${AllConfigTopicName}
      S3KmsKeyArn: !If
          - IsUsingKmsKey
          - !Ref KMSKeyArn
          - !Ref AWS::NoValue

3.実際のリソース設定を確認してみる

CloudTrail の暗号化設定と Config のデリバリーチャンネル暗号化設定が更新される事がわかったので、管理下のアカウントにログインして実際に確認してみます。

CloudTrail 設定

作成した KMS キーで暗号化設定されている事がわかります。

Config デリバリーチャンネル

こちらも作成した KMS キーが設定されている事がわかります。

おわりに

Control Tower のアップデートにより、ランディングゾーン設定として KMS 暗号化の適用を行える様になりました。

マルチアカウントに対して一括で何かを設定できる系の機能はどんどん追加されて欲しいところですね。

以上、AWS 事業本部の大前でした。

参考