1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

IAMポリシーのアレコレ

Posted at

はじめに

業務でIAM設計を担当することになりましたので、アレコレを調査しました。
※随時更新
iam_small_svg.jpeg

対象者

  • AWSでIAM設計構築を担当する人

目次

  1. 概要
  2. 実際の構築
  3. Permissions BoundaryによるIAM権限移譲

概要

  • IAMポリシーの種類は以下の6種類
    • アイデンティティベース
    • リソースベース
    • Permissions Boundary
    • SCP(サービスコントロールポリシー)
    • ACL(アクセスコントロールリスト)
    • セッションポリシー
  • ドキュメントの構成要素は「Version」と「Statement」
    • Version
      • “2008-10-17” と “2012-10-17” の2つが存在
    • Statement
      • Sid
      • Effect
      • Resource
      • Condition
  • Effectについて
    • 明示的に許可されていないリソースのアクションについては暗黙的に拒否される
    • 明示的拒否 > 明示的許可 > 暗黙的拒否
  • IAMポリシーのデザインパターン
    • ホワイトリストパターン
      • 明示的許可のみ
      • 許可を記述していないアクションについては暗黙的に拒否
    • ブラックリストパターン
      • 明示的拒否のみ
      • 該当するアクションの権限は他のポリシーにより上書きすることができなくなる
      • 本ポリシーだけでは何の権限も与えない
      • 本ポリシーで権限の範囲を絞って明示的許可ポリシーでアクションを許可するという使用法になる
    • ハイブリッドパターン
      • 前出の2パターンを組み合わせたデザインパターン

実際の構築

1.権限を与えたくないアクション(サービス)を洗い出し、ブラックリストパターンで明示的に拒否するポリシーを作成する(IAMポリシーの作成・編集などセキュリティ的にクリティカルなものをなるべく個別に)

2.権限を与えたいアクション(サービス)について、ホワイトリストパターンで(包括的に)許可していく

Permissions BoundaryによるIAM権限移譲

  • アタッチするポリシーの内容

    • 任意の操作許可
    • CloudTrailとConfigの停止/削除を拒否
    • IAMユーザの作成を拒否
    • IAM Roleの作成とPolicyのアタッチは指定したRole用Boundary(RolePermissionsBoundary)がアタッチされている場合のみ可能(されていないと拒否)
    • RolePermissionsBoundaryの編集を拒否
    • アタッチされているPermissions Boundaryのデタッチを拒否
  • 設定例

PolicyDocument: {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AdministratorAccess",
            "Effect": "Allow",
            "Action": "*",
            "Resource": "*"
        },
        {
            "Sid": "DenyUserCreationOrChange",
            "Effect": "Deny",
            "Action": [
                "iam:CreateUser",
                "iam:DeleteUser",
                "iam:PutUserPolicy",
                "iam:DeleteUserPolicy",
                "iam:AttachUserPolicy",
                "iam:DetachUserPolicy",
                "iam:PutUserPermissionsBoundary",
                "iam:AddUserToGroup",
                "iam:RemoveUserFromGroup",
                "iam:UpdateUser"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DenyCreateOrChangeRoleWithoutBoundary",
            "Effect": "Deny",
            "Action": [
                "iam:CreateRole",
                "iam:PutRolePolicy",
                "iam:DeleteRolePolicy",
                "iam:AttachRolePolicy",
                "iam:DetachRolePolicy",
                "iam:PutRolePermissionsBoundary"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotEquals": {
                    "iam:PermissionsBoundary": "arn:aws:iam::${AWS::AccountId}:policy/RolePermissionsBoundary"
                }
            }
        },
        {
            "Sid": "DenyBoundaryPolicyEdit",
            "Effect": "Deny",
            "Action": [
                "iam:CreatePolicyVersion",
                "iam:DeletePolicy",
                "iam:DeletePolicyVersion",
                "iam:SetDefaultPolicyVersion"
            ],
            "Resource": [
              "Fn::Sub" : "arn:aws:iam::${AWS::AccountId}:policy/RolePermissionsBoundary"
            ]
        },
        {
            "Sid": "DenyBoundaryDelete",
            "Effect": "Deny",
            "Action": [
                "iam:DeleteUserPermissionsBoundary",
                "iam:DeleteRolePermissionsBoundary"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DenyCloudTrailAndConfigChange",
            "Effect": "Deny",
            "Action": [
                "cloudtrail:DeleteTrail",
                "cloudtrail:PutEventSelectors",
                "cloudtrail:StopLogging",
                "cloudtrail:UpdateTrail",
                "config:DeleteConfigurationRecorder",
                "config:DeleteDeliveryChannel",
                "config:DeleteRetentionConfiguration",
                "config:PutConfigurationRecorder",
                "config:PutDeliveryChannel",
                "config:PutRetentionConfiguration",
                "config:StopConfigurationRecorder"
            ],
            "Resource": "*"
        }
    ]
}

おわりに

IAMポリシーSomething went wrong
についてまとめました。

参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?