ablog

不器用で落着きのない技術者のメモ

ルートテーブル変更に必要な IAM 権限

Pgpool-II on EC2 でルートテーブルの書換えでフェイルオーバーする際に必要な IAM 権限は ec2:CreateRoute と ec2:ReplaceRoute。

f:id:yohei-a:20200922131050p:plain
f:id:yohei-a:20200922130939p:plain

IAMポリシーサンプル

IAM権限 ec2:CreateRoute と ec2:ReplaceRoute を付与した IAM ポリシーを作成、EC2 用の IAM ロールを作成して、作成した IAM ポリシーをアタッチし、EC2 から AWS CLI でルートテーブルを変更する例。

  • IAMポリシー: ModifyRouteTablePolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:CreateRoute",
                "ec2:ReplaceRoute"
            ],
            "Resource": "arn:aws:ec2:ap-northeast-1:123456789012:route-table/rtb-31b8125f"
        }
    ]
}
  • IAMロール: ModifyRouteTableRole
    • アクセス権限: ModifyRouteTablePolicy*1
    • 信頼関係
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

ルートテーブルを変更してみる

  • AWS CLI on EC2 でルートテーブルを変更してみる
$ aws ec2 create-route --route-table-id rtb-31b8125f --destination-cidr-block 192.168.1.1/32 --network-interface-id eni-03abbff1e8bd862bc
$ aws ec2 replace-route --route-table-id rtb-31b8125f --destination-cidr-block 192.168.1.1/32 --network-interface-id eni-0e1a621a65cd6e5a2

参考

Synopsis

  create-route
[--destination-cidr-block <value>]
[--destination-ipv6-cidr-block <value>]
[--destination-prefix-list-id <value>]
[--dry-run | --no-dry-run]
[--egress-only-internet-gateway-id <value>]
[--gateway-id <value>]
[--instance-id <value>]
[--nat-gateway-id <value>]
[--transit-gateway-id <value>]
[--local-gateway-id <value>]
[--carrier-gateway-id <value>]
[--network-interface-id <value>]
--route-table-id <value>
[--vpc-peering-connection-id <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
create-route — AWS CLI 1.18.143 Command Reference

CreateRoute

Creates a route in a route table within a VPC.

You must specify one of the following targets: internet gateway or virtual private gateway, NAT instance, NAT gateway, VPC peering connection, network interface, egress-only internet gateway, or transit gateway.

When determining how to route traffic, we use the route with the most specific match. For example, traffic is destined for the IPv4 address 192.0.2.3, and the route table includes the following two IPv4 routes:

  • 192.0.2.0/24 (goes to some target A)
  • 192.0.2.0/28 (goes to some target B)

Both routes apply to the traffic destined for 192.0.2.3. However, the second route in the list covers a smaller number of IP addresses and is therefore more specific, so we use that route to determine where to target the traffic.

CreateRoute - Amazon Elastic Compute Cloud
EC2のIAM権限
アクション アクションの内容
(中略) (中略)
ec2:CreateRoute RouteTable内のルートを作成する
(中略) (中略)
ec2:ReplaceRoute RouteTableの既存のルートを置き換える
IAMのEC2権限をまとめてみた - サーバーワークスエンジニアブログ

送信先のCIDRがVPCに収まっていない場合のエラー
Route table contains unsupported route destination. The unsupported route destination is less specific or non-overlapping than VPC local CIDR.

ゲートウェイルートテーブルのターゲットにEC2インスタンス以外のENIを指定してみる | Developers.IO

*1:ユーザー管理の IAM ポリシーをアタッチ