Carpe Diem

備忘録。https://github.com/jun06t

IAMグループのポリシーの管理

概要

IAMグループのポリシーをちゃんと役割に分けて管理しようという話です。

方針

admin, developer, operatorの3つの役割で分け、各グループに適切な権限を与えるようにします。
ただし

  • パスワード変更
  • MFAの設定

は各IAMユーザができるようにします。

付与する権限

グループ 権限
admin AdministratorAccess
developer PowerUserAccess
IAMUserChangePassword
AllowUsersToUseMFA
operator ReadOnlyAccess
IAMUserChangePassword
AllowUsersToUseMFA

それぞれ説明すると

権限 説明
AdministratorAccess AWSの全権限
PowerUserAccess AdministratorAccessからIAM周りの権限をなくしたもの
IAMUserChangePassword パスワード変更
AllowUsersToUseMFA MFA用の権限
ReadOnlyAccess 各サービスの参照だけができる権限

AllowUsersToUseMFAはMFAを使えるようにするための独自ポリシーのため後述します。それ以外はマネージドポリシーなので検索すれば出てきます。

グループのアタッチ方針

以下の方針で付与するようにしました。

グループ 対象
admin チームのサーバサイドエンジニア
developer チームのサーバ以外のエンジニア
operator 上記に所属しない社員

MFAのポリシーについて

前述のAllowUsersToUseMFAについてです。
IAM リソースの管理に関するポリシーの例 - AWS Identity and Access Managementにて各ユーザがMFAを設定できるポリシー例を示しているのでそれを独自ポリシーとして登録します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowUsersToCreateEnableResyncDeleteTheirOwnVirtualMFADevice",
      "Effect": "Allow",
      "Action": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:ResyncMFADevice",
        "iam:DeleteVirtualMFADevice"
      ],
      "Resource": [
        "arn:aws:iam::account-id-without-hyphens:mfa/${aws:username}",
        "arn:aws:iam::account-id-without-hyphens:user/${aws:username}"
      ]
    },
    {
      "Sid": "AllowUsersToDeactivateTheirOwnVirtualMFADevice",
      "Effect": "Allow",
      "Action": [
        "iam:DeactivateMFADevice"
      ],
      "Resource": [
        "arn:aws:iam::account-id-without-hyphens:mfa/${aws:username}",
        "arn:aws:iam::account-id-without-hyphens:user/${aws:username}"
      ],
      "Condition": {
        "Bool": {
          "aws:MultiFactorAuthPresent": true
        }
      }
    },
    {
      "Sid": "AllowUsersToListMFADevicesandUsersForConsole",
      "Effect": "Allow",
      "Action": [
        "iam:ListMFADevices",
        "iam:ListVirtualMFADevices",
        "iam:ListUsers"
      ],
      "Resource": "*"
    }
  ]
}

account-id-without-hyphensAWSのアカウントIDをハイフン無しで入れます。

まとめ

IAMユーザの権限をグループごとにちゃんと管理するようにしました。
特にIAM自体の権限を持つと色んなことができるため、管理者以外は付与しないようにしましょう。

ソース