route53,ALBリスナールールのみを設定できるIAMロールを作る

Pocket

こんにちわ!

業務でroute53とALBのみを操作できるIAMロールが必要になる場面がありました。
AWSは権限が細分化されているので、その分色々な設定が必要になり結構時間がかかってしまいました。
なので、設定の際に少しでも参考になれば嬉しいです。

IAMロール概要(できること)

  • route53で新規ホストゾーン作成
  • 作成したホストゾーン内でレコードを新規作成、編集、削除
  • レコード編集時にAレコードのエイリアス設定でALBが選択欄で確認でき保存まで可能
  • 権限許可したALBでリスナールールの設定

IAMロール概要(できないこと)

  • 権限拒否したホストゾーンのレコード確認
  • 権限許可したALB以外のリスナールール編集

AWSではできないこと(2022.3現在)

  • 指定したホストゾーンのみをコンソール画面から確認できるようにする
  • 指定したALBのみコンソール画面から確認できるようにする

表示系は個別設定できないことが多いみたいですね。

設定したIAMロール

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "elasticloadbalancing:ModifyListener",
                "elasticloadbalancing:ModifyRule",
                "elasticloadbalancing:CreateRule",
                "elasticloadbalancing:SetRulePriorities",
                "elasticloadbalancing:DeleteRule"
            ],
            "Resource": [
                "arn:aws:elasticloadbalancing:*:{account_id}:listener/app/*/{load_balancer_id}/*",
                "arn:aws:elasticloadbalancing:*:{account_id}:listener-rule/app/*/{load_balancer_id}/*/*",
                "arn:aws:elasticloadbalancing:*:{account_id}:listener/net/*/{load_balancer_id}/*",
                "arn:aws:elasticloadbalancing:*:{account_id}:listener-rule/net/*/{load_balancer_id}/*/*"
            ]
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "route53:CreateHostedZone",
                "route53:GetChange",
                "route53:GetHostedZone",
                "route53:ChangeResourceRecordSets",
                "route53:ListHostedZonesByName",
                "ec2:DescribeSecurityGroups",
                "elasticloadbalancing:DescribeLoadBalancers",
                "elasticloadbalancing:DescribeListeners",
                "elasticloadbalancing:DescribeAccountLimits",
                "route53:ListResourceRecordSets",
                "elasticloadbalancing:DescribeTargetGroups",
                "elasticloadbalancing:DescribeListenerCertificates",
                "elasticloadbalancing:DescribeRules",
                "route53:GetHostedZoneCount",
                "ec2:DescribeSubnets"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Deny",
            "Action": [
                "route53:GetHostedZone",
                "route53:ChangeResourceRecordSets",
                "route53:ListResourceRecordSets"
            ],
            "Resource": [
                "arn:aws:route53:::hostedzone/{hostzone_id}"
            ]
        }
    ]
}

最後に

今回はある程度の情報は見えても良いので、可能な限りコンソール画面内の操作のみで完結できるようにIAMロールの設定を行いました。
他の情報を絶対に見せたくない場合は、URLや設定に必要な情報を伝えて設定してもらうこともできると思いますが、コミュニケーションコストはどうしてもかかってしまうので、トレードオフですね。
状況によって、臨機応変に対応していきたいものです。