VPCの変更系APIを洗い出してCIDR周りの変更をSCPで止めたいなって思ったときに権限を洗い出す手法
こんにちは、臼田です。
みなさん、IAM書いてますか?(挨拶
今回はちょっと調べ物をした際に良さそうなIAM権限確認方法を見つけた(半分教えてもらった)のでそれと、実際に洗い出したVPCの変更権限を紹介します。
背景
「VPCのIPアドレス(CIDR)周りの変更をさせたくないです」という要望をもらいました。
具体的にはAWS Organizationsを利用していて、一度管理側で払い出したVPCに対して、CIDR周りの操作を利用者にさせたくない、という感じです。
払い出しの作業と利用する時のOUが別なので、SCPでVPCの変更系をブロックしよう、という設計方針になりました。
さて、問題は権限の洗い出しです。
変更権限の洗い出し
僕は経験上知っています。
IAMポリシーの設定画面に行くと、かんたんに変更系の権限を洗い出すことができます。何ならそのままいっぺんに選択してポリシードキュメントの作成が可能です。
例えばELB v2であれば以下のようになります。サービスを選択したら「書き込み」を選択すればOKです。大多数のサービスはこれでいいんです。
JSONタブに切り替えればかんたんにポリシードキュメントを取得できます。
でもVPCに限ってはこの限りではありません。VPCはAPIの体型としては個別のサービスではなく、EC2のAPIに含まれています。以下のようになっています。
画像は切れていますが、変更系だけで300個ぐらいAPIがあります。
この中からVPC周りの(VPCとついているだけでなくSubnetとかもあります)APIを探すのは大変です。
というわけで、別の手法を活用しました。
VPCのAPIドキュメント
社内でいい方法無いですかー?って聞いたらAmazon VPC actions - Amazon Elastic Compute Cloudを紹介されました。
これはすごいです。ちゃんとVPC系のAPIだけまとまっています。しかもSubnets
、Route tables
、Security groups
など種類ごとに分類されています。素晴らしい!
CIDR周りの変更権限一覧
というわけでCIDR周りなどの変更権限一覧を洗い出しました。2021/10/22現在ではこれです。(新しいものがないかは上記のリンクからご確認ください)
- VPCs
- AssociateVpcCidrBlock: VPCとCIDRブロックとの関連付け設定
- CreateDefaultVpc: デフォルトVPCの作成
- CreateVpc: VPCの作成
- DeleteVpc: VPCの削除
- DisassociateVpcCidrBlock: VPCとCIDRブロックとの関連付け解除
- ModifyVpcAttribute: VPCの属性変更(DNS周り)
- ModifyVpcTenancy: VPCのテナンシー変更(デフォルト/専有)
- Subnets
- AssociateSubnetCidrBlock: サブネットとCIDRブロックとの関連付け設定
- CreateDefaultSubnet: デフォルトサブネットの作成
- CreateSubnet: サブネットの作成
- DeleteSubnet: サブネットの削除
- DisassociateSubnetCidrBlock: サブネットとCIDRブロックとの関連付け解除
- ModifySubnetAttribute: サブネットの属性変更(IPアドレス自動割り当てとか)
ついでに作成や変更もいらないと思って加えています。逆にVPC Peeringとか、VPC周りでは他にも変更系はいろいろあるので、どこまで止めたいかを検討して設計するといいでしょう。
おまけですがBYOIP周りはEC2側のドキュメントにあり、GetAssociatedIpv6PoolCidrs
とかありますが、まあBYOIPしないだろということで今回は対象外です。
まとめ
VPC周りの変更権限を洗い出す手法について紹介しました。
大体のサービスはIAMポリシー画面でいいのですが、VPCとかはAPIドキュメントからが良さそうですね。