IAM roles for EC2

ec2インスタンス立ち上げ時にiamのrole指定すると便利と聞いたので。

以下、使用するamiはamazon linux。なんでかと言うと、デフォルトでaws cliが使えて楽だから。

IAM roles作成

IAM管理画面からロール作成

パーミッションは実験できればなんでもいいけど、とりあえずec2の情報を取ってこれるだけなポリシーを設定してみる。(describe-instancesとかdescribe-instance-statusみたいなdescribeから始まる文だけ実行できる)

何もできなければできないほど せきゅわーなのです。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1421325835000",
      "Effect": "Allow",
      "Action": [
        "ec2:Describe*"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}

インスタンス作成

IAM roleのところに作成したroleを指定する以外特別なことする必要無し。

awsのapi叩く

roleを与えないで立ち上げたインスタンスから実行すると、以下のようにaws configureしろと怒られる。当然ですね。

[ec2-user@ip-172-31-10-137 ~]$ aws --region ap-northeast-1 ec2 describe-instances
Unable to locate credentials. You can configure credentials by running "aws configure".  

roleを与えて立ち上げたインスタンスから実行すると、アクセスキーもシークレットアクセスキーも登録していないのにapi叩ける!素晴らしい。

[ec2-user@ip-172-31-1-126 aws-sdk]$ aws --region ap-northeast-1 ec2 describe-instances | grep InstanceId
                    "InstanceId": "i-a69598bf",
                    "InstanceId": "i-2fd953dc",

ポリシーで許可していない操作をしようとするとちゃんと以下のように弾かれる。

[ec2-user@ip-172-31-1-126 aws-sdk]$ aws --region ap-northeast-1 ec2 stop-instances --instance-ids i-a69598bf

A client error (UnauthorizedOperation) occurred when calling the StopInstances operation: You are not authorized to perform this operation. Encoded authorization failure message: ...  

感想

ちょー便利そう。自分でごにょごにょアクセスキーどう読み込ませるのがいいか考えなくていいし。

もうインスタンス立ち上げる時はたとえ使う予定なくてもrole指定してしまえば良いんじゃなかろうか。roleのポリシーはあとからでも変えられるので何もできないroleをとりあえず指定しとくとかで。

amazon linux使えばcliもデフォルトで使えるので本当に何も準備しないでapi叩ける。

困る点。なんでインスタンス作成時にしか設定できないのさ。