SCP を使用して RDS・Aurora の起動できるインスタンスクラスを制限する
RDS と、Aurora の DB インスタンスクラスに T系シリーズしか起動できない制限をしたサービスコントロールポリシー(SCP)を作成し、RDS、Aurora双方に効果があるのか検証する機会がありました。
サービスコントロールポリシー
インスタンスクラス名を条件に T系シリーズ(db.t
)なのか、そうではないのかの判定したポリシーを作成しました。
{ "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 を作成したログを参考にして横着した結果、時間を無駄にしました。
"allocatedStorage": 20, "dBInstanceClass": "db.t3.micro", "engine": "mysql",
結局、本文中に紹介したリンクから制限に利用できる項目を確認する必要がありました。同様の制限をかけたい方の参考になれば幸いです。