pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


AWS で EC2 の開始、停止、再起動を行うポリシーを書く

AWS で既存の EC2 インスタンスの一覧取得や、それらの開始、停止、終了、再起動を行うポリシーを作成してみるテスト。

RunInstances を含めていないので、新規にインスタンスを作ることはできない。また、TerminateInstances も含まないので、既存のインスタンスに対する誤操作によってインスタンスを失うこともない。

このポリシーを IAM ユーザーにアタッチすれば、そのユーザーは AWS コンソールまたは AWS CLI 経由で EC2 インスタンスを操作できる。ただし、ステータスチェックやアラームの状態、EIP に関する許可を行っていないため、これらを参照することはできない。

あらかじめインスタンスID がわかっていて、なおかつ AWS CLI だけで操作する場合は DescribeInstances の許可をする必要はない。ただしEC2 コンソールは一覧表示してから操作する形式であるから、DescribeInstances を許可しない場合は EC2 コンソールから操作できない。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeInstances",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances",
                "ec2:RebootInstances"
            ],
            "Resource": "arn:aws:ec2:*:<AWS Acccount ID>:instance/*"
        }
    ]
}

EC2 コンソールで、ステータスチェックやアラームの状態、EIP の割り当ての有無くらいは確認させたい場合は、ec2:DescribeInstanceStatus, ec2:DescribeAddresses, cloudwatch:DescribeAlarms も許可する。cloudwatch:GetMetricData を追加すれば、EC2 コンソールの「モニタリング」よりメトリクスを閲覧できる。単にインスタンスの操作だけを行いたい IAM ユーザーに割り当てる Policy は、だいたいこんな感じだろう。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeAddresses"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances",
                "ec2:RebootInstances"
            ],
            "Resource": "arn:aws:ec2:*:<AWS Acccount ID>:instance/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:DescribeAlarms",
                "cloudwatch:GetMetricData"
            ],
            "Resource": "*"
        }
    ]
}

ec2:DescribeSecurityGroups や ec2:DescribeVolumes も許可すれば、EC2 コンソールでセキュリティグループの設定内容を確認したり、EBS ボリュームのボリュームサイズを確認できるけれど、単なる Operator にはそこまでの許可をしなくても良さげ。Describe... は Resource "*" のような広い参照範囲になるようだから、Operator に必要な参照権限を割り当てる必要はないだろう。