この記事は…

集え、初老丸達よ。初老丸達による世界に向けた技術的(又はそれに関連する)な物語を綴るカレンダーです。我こそ初老丸という方、初老丸予備軍の方も奮ってご参加下さい。ジーク・初老丸!

qiita.com

参加者の少ない, 初老丸 Advent Calendar 2017 13 日目の記事です.

(what)何をしたかったのか

  • 任意のタグがついた EC2 のみを起動, 停止したいのです

(why)なぜやりたかったのか

  • とあるシステムに EC2 の自動起動をさせたいんだけど, うっかりミスって意図しない EC2 まで起動, 停止させたくなかった

やったこと

IAM Policy

以下のような IAM Policy を作成.

cat << EOT > start-stop-instance-policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "cloudwatch:*",
                "ec2:Describe*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances",
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:ec2:*:${your-aws-account-id}:instance/*",
            "Condition": {
                "StringLike": {
                    "ec2:ResourceTag/Name": "dev-oreno_ec2-*"
                }
            }
        }
    ]
}
EOT

EC2 のタグ名で dev-oreno_ec2- で始まるインスタンスのみ, 起動と停止を許可する.

この設定の肝は,

...
            "Condition": {
                "StringLike": {
                    "ec2:ResourceTag/Name": "dev-oreno_ec2-*"
                }
            }
...

Condition で EC2 のタグ名を指定している点. Condition で指定出来る演算子は以下のような種類がある.(こちらより抜粋.)

条件演算子 説明
StringEquals 完全一致, 大文字と小文字の区別あり
StringNotEquals 符号反転の一致(一致しない場合??)
StringEqualsIgnoreCase 完全一致, 大文字と小文字の区別なし
StringNotEqualsIgnoreCase 符号反転の一致(一致しない場合??), 大文字と小文字の区別なし
StringLike 大文字と小文字の区別がある一致, 複数文字一致のワイルドカード(*) 及び 1 文字一致のワイルドカード(?) を指定可能
StringNotLike 符号反転一致(一致しない場合??), 複数文字一致のワイルドカード(*) 及び 1 文字一致のワイルドカード(?) を指定可能

適用

以下を実行して適用する.

# IAM Role にインラインポリシーを付与
_EC2_IAM_ROLE=EMD-LOG
aws --profile=your_profile_name \
  iam put-role-policy \
    --role-name=${_EC2_IAM_ROLE} \
    --policy-name=start-stop-instance-policy \
    --policy-document file://start-stop-instance-policy.json

# 確認
aws --profile=your_profile_name \
  iam get-role-policy \
    --role-name=${_EC2_IAM_ROLE} \
    --policy-name=start-stop-instance-policy

適用後, 意図した通り, dev-oreno_ec2- が付いた EC2 のみ起動と停止が出来ることを確認.

以上

素敵な EC2 ライフを.

元記事はこちら

前にも書いたかもしれないけど, 任意のタグがついた EC2 のみ起動, 停止したかったのでメモ