VPCの変更系APIを洗い出してCIDR周りの変更をSCPで止めたいなって思ったときに権限を洗い出す手法

VPC周りのAPIをIAMポリシーの画面から確認するのは大変です。というわけで参考になりそうな情報をまとめました。
2021.10.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

みなさん、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だけまとまっています。しかもSubnetsRoute tablesSecurity 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ドキュメントからが良さそうですね。