RDSスナップショットのパブリック公開は基本的に手動で行う作業なので、わざわざ行う人はいないかもしれませんが、万が一あるIAMユーザーがスナップショットを公開してしまった際にConfigで自動修復できるように設定していきます。

修復アクション設定前の状態

RDSのスナップショットを公開してみます。
スナップショットのアクションから、スナップショットの共有を押下します。

DBスナップショットの可視性でPublicを選択して保存しておきます。
この設定を行うことでRDSスナップショットがパブリックに公開されます。

IAMロールを作成する

まず、下記JSONのIAMポリシーを作成します。

{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “VisualEditor0”,
“Effect”: “Allow”,
“Action”: [
“ssm:StartAutomationExecution”,
“ssm:GetAutomationExecution”,
“rds:DescribeDBSnapshots”,
“rds:ModifyDBSnapshotAttribute”
],
“Resource”: “*”
}
]
}

次に、上記のポリシーを使ってIAMロールを作成します。
コンソール上で手動作成する場合、信頼するサービスでSSMを選択できないかと思いますので、初めはEC2を選択して作成します。
作成後に、ssmに変更してください。

また、Configの修復アクションを設定するときにIAMロールのARNが必要なのでコピーしておきましょう。

Configルールの作成

ルールは、マネージド型ルールの “rds-snapshots-public-prohibited” を選択します。

その他はデフォルトのまま設定して問題ありません。

自動修復のアクションを設定する

作成されたルールを選択し、右上のアクションから修復の管理を押下します。

修復方法は自動修復を選択、
修復アクションの詳細は、”AWSSupport-ModifyRDSSnapshotPermission”を選択します。

また、リソースIDパラメータに “SnapshotIdentidiers” を選択します。
AutomationAssumeRoleに、最初に作成したIAMロールのARNを入力します。
※”Private” のところはコンソール上ではオプションと書いていますが、マニュアル上では必須のためyes or noを入力しないと完了できません。
 今回はPrivateに設定したいので”Yes”と入力します。

設定は以上です。

実行結果の確認

Configルールのアクションが実行されたのち、RDSスナップショットの状態を確認します。
最初と同じようにスナップショットのアクションから、共有を押下します。
すると、スナップショットがPrivateに変わっていることが確認できました。

また、EventBridgeを使用して通知を設定すると、このような通知が来ます。※これはSlackです。
NON_COMPLIANTからCOMPLIANTに変わっていることが確認できます。

最後に

今回は、Configの自動修復アクションを設定してRDSスナップショットをパブリックからプライベートに変更しました。
Configは、検知だけでなく修復アクションを設定しておくことでセキュリティレベルを上げることができます。
また、Security Hubでも検知を行うことは可能ですが、Configで自動修復を設定しておけば、手動で直す手間がなくなるため非常に便利です。

是非皆さんもこちらの記事を参考に設定してみてください。
最後までお読みいただきありがとうございました。