[AWS]CISで語られているIAMマスターロールとIAMマネージャーロールについて整理

[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

スタートプラン