EC2でIAMロールとIAMユーザ、どちらが強い

知っていそうで知らないこと。

かなり初歩的なことかもしれないけど調べてみても見つけられなかったので、
簡単に検証できそうだしやってみました。

ロールをつけてEC2を起動

今回の検証ではEC2からのS3アクセスで勝負します。
まず以下のIAMポリシーがついたIAMロールがアタッチされたEC2インスタンスを起動します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}

起動後、EC2にログインしてS3との接続テストを行います。

aws s3 ls s3://mybucket

2016-06-29 10:13:41          0 test.txt
2016-06-23 13:25:11         14 testfile.txt

もちろん見れます。

ユーザを作ってaws configure

次にDeny Allのポリシーを与えたユーザを作成します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyAll",
            "Effect": "Deny",
            "Action": "*",
            "Resource": "*"
        }
    ]
}

このユーザのアクセスキーを使ってaws configureを設定します。

[root@ip-10-0-1-165 ~]# aws configure
AWS Access Key ID [None]: AKIA***********************
AWS Secret Access Key [None]: 2M6CqEyNCHN*********************
Default region name [None]: ap-northeast-1
Default output format [None]: json

いざ勝負!

[root@ip-10-0-1-165 ~]# aws s3 ls s3://mybucket

A client error (AccessDenied) occurred when calling the ListObjects operation: Access Denied

結果

IAMユーザのDeny Allが勝ちました。
しかし、DenyとAllowを逆にしたらどうなるか。
とか
与えるポリシーによってはこの通りではないかもしれないですが、
とりあえず、今回知りたいことはわかったので良しとします。