AWS
EC2
aws-cli
ALB

ALB・EC2小ネタ/AWS CLIでALB配下のTGにEC2インスタンスを登録/削除するためのポリシー(メモ)

More than 1 year has passed since last update.

kakakakakkuさんが以下のブログ記事で公開されているALBのターゲットグループにEC2インスタンスを登録/削除するシェルスクリプトを実行するために必要なポリシーです。

1. 指定するポリシー

以下のポリシーを登録し、スクリプトを動かすEC2インスタンスに付与するIAM Roleにアタッチします。

AlbRegistrationPolicy
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "elasticloadbalancing:DescribeTargetHealth",
                "elasticloadbalancing:DeregisterTargets",
                "elasticloadbalancing:RegisterTargets"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        }
    ]
}

特に何のひねりもないですが、AWSユーザーガイドの以下のページにある通り、

  • ALBの3つのAPIアクション
  • EC2の1つのAPIアクション(これはkakakakakkuさんの記事中「aws_utils.sh」の「get_instance_id()」で使用)

とも、リソースレベル権限の詳細な指定に対応していないので、Resourceには「*」を指定する必要があります(最初見落としていて、AWSパートナーさんに教えていただきました)。
本番(プロダクト)環境とステージング/開発環境を同一のアカウントで運用している場合は、指定するターゲットグループのARNを間違えないよう注意が必要です。

2. おまけ1

私の場合、登録/削除するEC2インスタンス自身でAWS CLIのスクリプトを実行しているので、前述の「get_instance_id()」は使わず、curlで http://169.254.169.254/latest/meta-data/instance-id をGETしてインスタンスIDを取得しています。
その場合は「ec2:DescribeInstances」の権限は不要です。

3. おまけ2

crontabから呼び出すスクリプトの場合、初期設定のままでは「.」や「source」で「aws_utils.sh」をインポートできないので、1つのスクリプトにまとめるか、以下の記事を参考にしてインポートできるようにします。