LoginSignup
18
18

More than 5 years have passed since last update.

EC2に特定のTagがあるInstanceだけ、APIからの操作を可能なIAMユーザの作成

Last updated at Posted at 2013-11-20

はじめに

AWSを運用していると、本番環境、staging環境、テスト環境など色々な環境が増えてきます。
その時、

  • テスト環境などの特定の複数のInstanceSetはボタンひとつで stop/start したい
  • だけど、万が一にも本番環境にそういう影響が無いようにしたい

ということがなきにしもあらずかと思います。

そういう場合「特定のTagをもつInstanceのみStop/StartできるIAMユーザ」というのを作ることで実現するという方法があります。

方法

IAMの設定

こんな感じのPolicyをもつIAMユーザを作成します。

  • 任意の EC2 Instanceを検索することができる
  • EC2のTagが Key= TAGTEST, Value= YES のInstanceに対してのみ Stop/Start/Reboot ができる

という設定になっています。当然Tag条件などは自由に変更可能です。

policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowDescribe",
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "AllowStartStop",
            "Effect": "Allow",
            "Action": [
                "ec2:RebootInstances",
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "ec2:ResourceTag/TAGTEST": "YES"
                }
            },
            "Resource": [
                "arn:aws:ec2:*"
            ]
        }
    ]
}

テスト

上記のIAMユーザの Key/Secret を使って、Name が my_project のInstanceをstopするテストです。
このInstanceに TAGTEST=YES を付けた時とつけていない時で動作が変わることが確認できます。

require 'rubygems'
require 'aws'

AWS_ACCESS_KEY_ID     = 'MYKEY'
AWS_SECRET_ACCESS_KEY = 'MYSECRET'

ec2 = AWS::EC2.new(
    :access_key_id => AWS_ACCESS_KEY_ID,
    :secret_access_key => AWS_SECRET_ACCESS_KEY,
    :region => 'ap-southeast-1',
)

yy = ec2.instances.tagged('Name').tagged_values('my_project').first
yy.stop
18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18