SCP を使用して RDS・Aurora の起動できるインスタンスクラスを制限する

2022.04.13

RDS と、Aurora の DB インスタンスクラスに T系シリーズしか起動できない制限をしたサービスコントロールポリシー(SCP)を作成し、RDS、Aurora双方に効果があるのか検証する機会がありました。

サービスコントロールポリシー

インスタンスクラス名を条件に T系シリーズ(db.t)なのか、そうではないのかの判定したポリシーを作成しました。

DBInstanceClassLaunchRestrictions

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "rds:CreateDBInstance",
      "Resource": "arn:aws:rds:*",
      "Condition": {
        "StringNotLike": {
          "rds:DatabaseClass": "db.t*"
        }
      }
    }
  ]
}

ポリシーを作成するにあたりrds:CreateDBInstanceや、rds:DatabaseClassの名前を確認するには以下のリンクを参考にしました。

Actions, resources, and condition keys for Amazon RDS - Service Authorization Reference

ポリシーの例としては以下のリンクも参考になりました。

Amazon RDS identity-based policy examples - Amazon Relational Database Service

起動テストしてみる

T系シリーズのインスタンスクラス以外は拒否するサービスコントロールがあたった AWSアカウントでマネジメントコンソールから RDS と、Aurora を起動してみます。

RDS

db.t4g.micro

Graviton2(ARM)プロセッサ搭載のインスタンスクラスを指定しました。

Graviton2 といえど T系シリーズのため起動に成功しました。

db.m6g.large

M系シリーズの Graviton2(ARM)プロセッサ搭載のインスタンスクラスを指定しました。

db.tからはじまるインスタンスクラスではないため起動に失敗しました。SCPの設定としては成功です。

Aurora

db.t3.small

T系シリーズのインスタンスクラスを指定しました。

起動に成功しました。

db.r5.large

R系シリーズのインスタンスクラスを指定しました。

Aurora も同様にdb.tからはじまるインスタンスクラスではないため起動に失敗しました。SCPの設定としては成功です。

まとめ

RDS と、Aurora をともに制限するにはrds:CreateDBInstanceアクションを制限すれば可能でした。

おわりに

当初 CloudTrail のイベント名CreateDBInstanceのログ内容を参考にしていました。インスタンスクラス名の指定はdBInstanceClassだったため、これをキーにポリシーを書き期待した動作せず失敗しました。過去に Aurora を作成したログを参考にして横着した結果、時間を無駄にしました。

CloudTrailログ抜粋

        "allocatedStorage": 20,
        "dBInstanceClass": "db.t3.micro",
        "engine": "mysql",

結局、本文中に紹介したリンクから制限に利用できる項目を確認する必要がありました。同様の制限をかけたい方の参考になれば幸いです。