概要
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-hyphens
はAWSのアカウントIDをハイフン無しで入れます。
まとめ
IAMユーザの権限をグループごとにちゃんと管理するようにしました。
特にIAM自体の権限を持つとか色んなことができるため、管理者以外は付与しないようにしましょう。