AWSで特定のEC2インスタンスの起動停止だけ出来るIAMアカウントを作成する

- テスト用にEC2を建てたけど24時間稼働させる必要は無く必要になったときに誰でも起動できるようにしたい。
- でもチーム内に協力会社のひとも居るような状況でルートアカウントを共有はしたくない。
- 個別にIAMアカウントを作る運用が望ましいのはわかっては居るけどそんなコストはかけれないしスキルも無い。

という状況で最低限EC2のインスタンスの起動停止だけ出来るアカウントを作成する方法をご紹介します。

※CloudFormationで一発作成する方法を [特定のEC2インスタンスを起動停止するだけのアカウントをもっと簡単に作成する](https://qiita.com/Hotspring_r/items/c1913c2e2d1da9af48b4) で紹介しています。

# 概要
インスタンスの一覧の表示、特定のインスタンスだけ起動停止が出来る権限をもつアカウントを作成します。
インスタンスの特定はkeyがBootable、値がyesのタグが設定されているかで行います。

# 方法
## IAMの設定
### ポリシーの作成
IAMの管理画面を開き、カスタマー管理ポリシーの作成を選択する。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/61ac3da7-076f-5254-503a-3f320990fa1d.png)
|:-:|

JSON を選び以下の内容を貼り付ける。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/0eab5f72-ef91-8033-37c0-d448943d32bd.png)
|:-:|

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/Bootable": "yes"
                }
            }
        },
        { 
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceStatus"
            ],
            "Resource": "*"
        }
    ]
}
```

適当な名前を付けて作成する。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/f8c0c14c-5b00-e89c-f1c2-46f9e4e80037.png)
|:-:|

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/d0f1975d-0234-e07b-aaaa-89012e666090.png)
|:-:|

### ユーザーを追加
IAM のユーザーから ユーザーを追加を選択する。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/6442193d-74a9-822d-1de3-2d561ca73fe1.png)
|:-:|

アクセスの種類は　AWS マネジメントコンソールへのアクセス にチェックする。
他はお好みで。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/40e50237-4dd1-b8ba-bfdd-2baabd4de143.png)
|:-:|

既存のポリシーを直接アタッチ を選択し先ほど作成したポリシーを選択する。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/5a29cbe0-6b9d-7697-2846-ee8e3a92d0a7.png)
|:-:|


タグの設定は特にせず次へすすむ。
確認画面が出るので「ユーザーの作成」

ユーザーの作成が完了します。
パスワードを自動生成にした場合、この画面でメモっておかないと他の所で確認することは出来ません。
間違って閉じてしまった場合ユーザーを削除し、作成をやり直す必要があります。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/b29ead26-d2c9-604d-af43-77927065024b.png)
|:-:|

## EC2インスタンスの設定

EC2のインスタンス一覧から該当のインスタンスを右クリックして インスタンスの設定>タグの追加/編集 を選択する。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/5e324355-83bb-9a73-2f47-955c3c2cbcc7.png)
|:-:|

タグの作成をクリックし、、キーに `Bootable`、値 `yes` を設定する。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/a9680383-19e2-995b-fc57-336fffa01c04.png)
|:-:|

## アカウントID確認
ログイン時に必要になるのでアカウントIDを確認しておきます。

右上の名前が表示されている所のメニューからマイアカウントを開くとアカウント設定が表示され、アカウントIDを確認できます。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/18130b79-ecb4-b30e-ad36-6071f9d87446.png)
|:-:|

# 動作確認

ログアウトされた状態(もしくはプライベートモード)でログイン画面を開きIAMを選択し、アカウントIDを入力する。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/a515e579-fba2-01a6-4a4e-25168f810be1.png)
|:-:|

先ほど作成したアカウントのユーザ名とパスワードを入力しサインインする。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/919e8b35-0e1f-9581-df8a-6f0dc01ff7e8.png)
|:-:|

ec2のコンソールに入るとインスタンスの状態はタグの設定にかかわらず全て確認できます。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/7d9a9d7f-9de3-94b8-7da6-7841604a34f1.png)
|:-:|

※テスト用にBootableタグの値を「`yes`を設定してあるもの」「`no`を設定してあるもの」「tagを設定していないもの」の3種類を用意しています。

tagに`yes`を設定したインスタンスを起動してみると

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/3e20d890-2066-9505-b6c0-04aae3278fc0.png)
|:-:|

正常に起動できます。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/e4a2e851-8d6e-e40c-9167-8ae2ada62c01.png)
|:-:|

`yes`以外の値が設定されていたりタグが無いインスタンスも権限が無いと言われ起動できません。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/4fb1b2cf-d50f-828a-1b7e-25e56435726f.png)
|:-:|

起動停止以外（終了とかインスタンスのタイプの変更等）も出来なくなっています。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/a386a800-dbbb-67d0-716a-e33466cb23f3.png)
|:-:|

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/c451a652-e150-c0bd-1fe0-201365ad5699.png)
|:-:|


もちろんインスタンスの作成とかは出来ません。

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/70a953b9-bc0d-6426-0bca-6059c62e2cad.png)
|:-:|

EC2以外も何も出来ません。（S3のバケット一覧が見れない）

|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153956/5e279b26-7629-ceea-af9e-01eccbc9ca6f.png)
|:-:|