[AWS]CISで語られているIAMマスターロールとIAMマネージャーロールについて整理
コンニチは千葉です。
はじめに
AWSに関するCISベンチマークについて、調査した内容をまとめます。
CISとは下記のような非営利団体です。
米国のNSA(National Security Agency/国家安全保障局)、DISA(Difense Informaton Systems Agency/国防情報システム局)、NIST(National Institute of Standards and Technology/米国立標準技術研究所)などの米国政府機関と、企業、学術機関などが協力して、インターネット・セキュリティ標準化に取り組む団体の名称。
CIS(Center for Internet Security) - マルチメディア/インターネット事典
このベンチマークを利用することでセキュリティに関するベストプラクティスを導入できます。 弊社でもいくつかの記事を紹介しています。
今回は、CIS Amazon Web Services Foundations v1.1.0 - 11-09-2016 の 1.18 Ensure IAM Master and IAM Manager roles are active について解説しようと思います。
IAMマスターロールとIAMマネージャーロール
IAMとはAWSリソースへのアクセス制御をするための管理サービスです。IAMロールは直接ログインできませんが、リソースに権限を引き継ぐことができます(Unixのsuみたいなイメージ)。 IAMロールはIAMユーザー、EC2、Lambdaなど様々なリソースに割り当てすることができます。IAMロールを使って、適切に権限を分離することでセキュリティを高めることができます。
で、ここからが本題です。
IAMの操作はセキュリティ上かなり重要な操作です。なぜなら、AWSの操作権限を自由に付与できる権限を有するからです。なんでも操作できるユーザーやロールを作成することができます。そのため、「1.18 Ensure IAM Master and IAM Manager roles are active」では、IAMの管理を複数人で行うこととし「マスターロール」と「マネージャーロール」に分けて操作を行いセキュリティを強化しようと謳っています。マスターロールとマネージャーロールはスイッチユーザーで、ロール切り替えを行います。
マスターロール
マスターロールは、作成と削除を行うロールです。具体的には以下の操作が可能です。
- ユーザー作成・削除
- グループ作成・削除
- ロールを作成・削除
- ポリシーの作成・削除
マネージャーロール
マネージャーロールは、リソースの割り当てと解除を行うロールです。具体的には以下の操作が可能です。
- ユーザーをグループに割り当て・解除
- グループにポリシーを割り当て・解除
- ロールにポリシーを割り当て・解除
導入手順
CloudFormationのテンプレートを置いておくので、CloudFormationから実行してください!ファイルに保存してから実行してください。 テンプレートでは、4つのリソースを作成します。
- マスターロール用のポリシー(IamMasterPolicy)
- マネージャーロール用のポリシー(IamManagerPolicy)
- マスターロール(IamMasterRole)
- マネージャーロール(IamManagerRole)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | AWSTemplateFormatVersion: "2010-09-09" Description: 1.18 Ensure IAM Master and IAM Manager roles are active of CIS Resources: IamMasterRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: AWS: !Sub "arn:aws:iam::${AWS::AccountId}:root" Action: - "sts:AssumeRole" Path: "/" RoleName: "IamMasterRole" IamManagerRole: Type: "AWS::IAM::Role" Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: AWS: !Sub "arn:aws:iam::${AWS::AccountId}:root" Action: - "sts:AssumeRole" Path: "/" RoleName: "IamManagerRole" IamMasterPolicy: Type: "AWS::IAM::Policy" Properties: Roles: - Ref: "IamMasterRole" PolicyName: "IamMasterPolicy" PolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Resource: "*" Action: - "iam:AttachRolePolicy" - "iam:CreateGroup" - "iam:CreatePolicy" - "iam:CreatePolicyVersion" - "iam:CreateRole" - "iam:CreateUser" - "iam:DeleteGroup" - "iam:DeletePolicy" - "iam:DeletePolicyVersion" - "iam:DeleteRole" - "iam:DeleteRolePolicy" - "iam:DeleteUser" - "iam:PutRolePolicy" - "iam:GetPolicy" - "iam:GetPolicyVersion" - "iam:GetRole" - "iam:GetRolePolicy" - "iam:GetUser" - "iam:GetUserPolicy" - "iam:ListEntitiesForPolicy" - "iam:ListGroupPolicies" - "iam:ListGroups" - "iam:ListGroupsForUser" - "iam:ListPolicies" - "iam:ListPoliciesGrantingServiceAccess" - "iam:ListPolicyVersions" - "iam:ListRolePolicies" - "iam:ListAttachedGroupPolicies" - "iam:ListAttachedRolePolicies" - "iam:ListAttachedUserPolicies" - "iam:ListRoles" - "iam:ListUsers" Condition: Bool: aws:MultiFactorAuthPresent: true - Effect: "Deny" Resource: "*" Action: - "iam:AddUserToGroup" - "iam:AttachGroupPolicy" - "iam:DeleteGroupPolicy" - "iam:DeleteUserPolicy" - "iam:DetachGroupPolicy" - "iam:DetachRolePolicy" - "iam:DetachUserPolicy" - "iam:PutGroupPolicy" - "iam:PutUserPolicy" - "iam:RemoveUserFromGroup" - "iam:UpdateGroup" - "iam:UpdateAssumeRolePolicy" - "iam:UpdateUser" IamManagerPolicy: Type: "AWS::IAM::Policy" Properties: Roles: - Ref: "IamManagerRole" PolicyName: "IamManagerPolicy" PolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Resource: "*" Action: - "iam:AddUserToGroup" - "iam:AttachGroupPolicy" - "iam:DeleteGroupPolicy" - "iam:DeleteUserPolicy" - "iam:DetachGroupPolicy" - "iam:DetachRolePolicy" - "iam:DetachUserPolicy" - "iam:PutGroupPolicy" - "iam:PutUserPolicy" - "iam:RemoveUserFromGroup" - "iam:UpdateGroup" - "iam:UpdateAssumeRolePolicy" - "iam:UpdateUser" - "iam:GetPolicy" - "iam:GetPolicyVersion" - "iam:GetRole" - "iam:GetRolePolicy" - "iam:GetUser" - "iam:GetUserPolicy" - "iam:ListEntitiesForPolicy" - "iam:ListGroupPolicies" - "iam:ListGroups" - "iam:ListGroupsForUser" - "iam:ListPolicies" - "iam:ListPoliciesGrantingServiceAccess" - "iam:ListPolicyVersions" - "iam:ListRolePolicies" - "iam:ListAttachedGroupPolicies" - "iam:ListAttachedRolePolicies" - "iam:ListAttachedUserPolicies" - "iam:ListRoles" - "iam:ListUsers" Condition: Bool: aws:MultiFactorAuthPresent: true - Effect: "Deny" Resource: "*" Action: - "iam:AttachRolePolicy" - "iam:CreateGroup" - "iam:CreatePolicy" - "iam:CreatePolicyVersion" - "iam:CreateRole" - "iam:CreateUser" - "iam:DeleteGroup" - "iam:DeletePolicy" - "iam:DeletePolicyVersion" - "iam:DeleteRole" - "iam:DeleteRolePolicy" - "iam:DeleteUser" - "iam:PutRolePolicy" Outputs: ManagerPolicyName: Value: Ref: IamManagerPolicy MasterPolicyName: Value: Ref: IamMasterPolicy IamMasterRole: Value: Ref: IamMasterPolicy IamManagerRole: Value: Ref: IamManagerRole |
追加でやるといいこと
CISには定義されてませんが、特定のIAMユーザーからのみスイッチロールすることができます。 IAMロールの「信頼関係」のタブから編集を行います。"Resource"にスイッチロール元のIAMユーザー名に変更します。
具体的には以下です。
修正前
1 2 3 4 5 | -- 省略 -- "Principal": { "AWS": "arn:aws:iam::xxxxxxxxxxxxx:root" }, -- 省略 -- |
修正後
1 2 3 4 5 | -- 省略 -- "Principal": { "AWS": "arn:aws:iam::xxxxxxxxxxxxx:root/[IAMロール名]" }, -- 省略 -- |
[IAMロール名]の箇所に、スイッチ元のIAMロール名を指定します。
マネージャーロールとマスターロールの利用手順
IAMユーザーでログイン後に、スイッチユーザーすることで利用します。スイッチロールのURLは、対象のIAMロールを選択することで確認できます。
ロールをクリックすることで、スチッチロールでき今回作成したマスターロルまたはマネージャーロールの権限を利用できるようになります。
さいごに
まとめると、
- IAMの操作を行う場合はマネージャーロール、マスターロールを利用する
- マネージャーロールとマスターロールは違う人が操作する(役割を分ける)
のように運用することで、セキュリティを強化します。映画で見る核スイッチの起爆みたいなイメージですね。それではまたっ。
参考
https://d0.awsstatic.com/whitepapers/compliance/AWS_CIS_Foundations_Benchmark.pdf