この記事は…
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 ライフを.