Config ルール・自動修復を使ってS3全バケットのデフォルト暗号化を自動的に有効化する

2020.06.01

AWS Config は AWSリソースの構成を記録、管理するためのサービスです。 EC2インスタンスやセキュリティグループなど、AWSリソースが「いつ、どのような変更がされたか」 の履歴を記録してくれます。

また、 AWS Config ルール を利用して AWSリソースの構成の評価ができます。 AWSリソースのあるべき構成を条件としています。条件に違反しているリソースが検出されると 「非準拠」フラグが付けられます。

さらに、この「非準拠」リソースを 修復 することもできます。 "AWS Systems Manager オートメーション(SSM オートメーション)" という自動化を行うためのワークフローと連携して、 「非準拠」リソースが見つかれば SSMオートメーションを使ってあるべき構成へ自動修復する、便利な自動化が実現できます。

本記事では S3の全バケットのデフォルト暗号化を自動的に有効化する ための Configルール/自動修復を 構築してみます。

img

目次

  1. やってみる(ルールの作成)
  2. やってみる(IAMロールの作成)
  3. やってみる(自動修復設定)
  4. 確認
  5. CloudFormation テンプレート
  6. おわりに
  7. 参考

やってみる(ルールの作成)

まずは、「デフォルト暗号化が有効になっていないバケットを非準拠とする」Configルールを作成します。 ※Configを有効化していることは前提です。

「AWS Config > ルール」の画面から「ルールを追加」を選択します。

img

AWS管理のルール s3-bucket-server-side-encryption-enabled を選択します。

img

デフォルト設定で追加します。 (ここで修復アクションを指定して自動修復設定もできますが、まず非準拠リソースの列挙のみ行ってみます)

img

作成したルールがあること、準拠/非準拠リソースが見れることを確認しましょう。

img

私の検証環境で 8個、非準拠なバケットが検出されました。

やってみる(IAMロールの作成)

後述の自動修復を行うための IAMロールを先に作っておきます。 マネジメントコンソールからIAMロールの作成画面に行きましょう。 「信頼されたエンティティの種類」として「SSM Automation Service Role」を選択します。

img

ほかは特に設定せず、適当にロール名(例えば ssm-automation-role-for-s3-encryption ) を決めてロールを作成します。

作成したロールの画面に行き、「インラインポリシーを追加」を選択します。

img

JSONで以下のようなポリシーを追加しましょう。S3のデフォルト暗号化を有効化するためのポリシーです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:PutEncryptionConfiguration",
            "Resource": "*"
        }
    ]
}

適当なポリシー名(例えば Ssm-Automation-Policy-PutEncryptionConfiguration )を付けて作成します。これでIAMロール作成作業は完了です。

やってみる(自動修復設定)

作成していた Configルールの画面に行き、「編集」を選択しましょう。

img

「修復アクションを選択」の下記パラメータを埋めて 「保存」しましょう。

img

img

  • 修復アクション :: AWS管理のアクション AWS-EnableS3BucketEncryption
  • 自動修復 :: はい とします。再試行の設定はデフォルト。
  • リソースIDパラメータ :: BucketName を選択。
  • パラメータ > AutomationAssumeRole :: 前述で作成した IAMロールの ARNを指定。
  • パラメータ > SSEAlgorithm :: AES256 を指定。

確認

今回は、すぐに結果を確認したいため Config ルールの画面「再評価」を実行してみます。

img

▼しばらくすると以下のような画面になり

img

▼すべて「アクションが正常に実行されました」になりました!

img

▼もう一度「再評価」を実行します。非準拠リソース一覧は無くなり、このルールが「準拠」となりました

img

CloudFormation テンプレート

今回の作業の CFnテンプレート版です。以下リソース作成します。

  • IAMロール :: ロール名 ssm-automation-role-for-s3-encryption
  • Configルール :: ルール名 s3-bucket-server-side-encryption-enabled
  • Config 修復設定 :: 実行ドキュメント AWS-EnableS3BucketEncryption

おわりに

Configルール・自動修復を使った S3バケット自動暗号化設定でした。

スクリプト書くこと無く、このような自動化を実装できる Configルールはとても便利だと感じました。 他のルール・自動修復も AWSセキュリティの運用に活用していきたいですね。

少しでもどなたかのお役に立てば幸いです。

参考

▼ CloudFormation 関連