【Tips】Admin権限を持っていないIAMユーザでIAM Roleを設定するためのポリシー設定

2016.07.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

地味サービス大好き、森永です。
7/7は弊社の創立記念日ということで、地味なネタ無いかなぁと考えていて思いつきました。
今日は物凄い数ブログが出ると思うので埋もれるとは思いますが、必要な人は絶対にいると思い筆を執ります。

序説

AWSでの権限管理と言えばIAM(Identity and Access Management)です。
誰にでもAdmin権限を渡していてはセキュリティ的に怖いですから、権限の調整が必要ですが、そこでハマるポイントを自分の備忘としてまとめておきます。

問題

AWSにはPowerUserというポリシーも用意されているのですが、Adminとの違いは「IAMの操作が出来るか」だけです。

こちらがAdminポリシーです。
全てのアクション、全てのリソースに対する操作が許可されています。

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

こちらがPowerUser。
すべてのリソースへの許可はあるのですが、IAM全般のアクションだけはダメ(NotAction)となっています。

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

IAMの権限があれば自分に権限を与えられますからダメなのは分かりますが、これでは困ることがあるのです。 それは、「IAM Role」の設定です。
AWSをそれなりに使っている方であればご存知かと思いますが、AWSにはユーザ以外のもの(AWSの各種サービスなど)に権限を与えるIAM Roleというものがあります。
EC2のインスタンスを立ち上げる時、Lambdaが他のサービスと連携する時などにIAM Roleの設定をした記憶があるかと思います。
IAM権限全般使えないPowerUserではIAM Roleの設定が出来ず、かなり困ります。
(Lambdaを実行しても何も出来ないです)

解決方法

IAM Roleの設定だけを行える権限を与えてあげれば解決できそうです!

権限のひとつにiam:PassRoleというものがあり、これが「IAM Roleをユーザ以外にパスする」ために必要な権限です。
それに加えて、何をパスすればいいか分からないと困るので、表示させる権限iam:Get*``iam:List*を与えてあげる必要があります。

それをまとめると以下のようになります。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:Get*",
        "iam:List*",
        "iam:PassRole"
      ],
      "Resource": "*"
    }
  ]
}

IAMPassRoleAccessなど適当な名前つけて上記ポリシーを作成して、IAM Roleの設定が必要なユーザにこちらのポリシーを追加で設定すればIAM Roleの設定だけは出来るようになります!

最後に

IAMは非常に奥が深くで好きなサービスです。
皆さんもIAMをうまく使って良いAWSライフを!!