AWS IAM策略允许除特定IAM之外的所有操作

时间:2019-10-31 14:07:56

标签: amazon-web-services amazon-iam

我正在尝试创建一个策略,该策略允许用户执行所有IAM操作,但任何操作都在字符串中包含单词“ User”或“ Group”,因此他们仍然可以执行其他操作,例如:“ CreateRole”,“ ChangePassword”等。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:*"
            ],
            "Resource": "*",
            "Condition": {
                "StringNotLike": {
                    "iam": [
                        "*User*",
                        "*Group*"
                    ]
                }
            }
        }
    ]
}

但我收到此通知:“此策略未授予任何权限。”。我已经尝试过使用“ StringLike”。

根据AWS Docs

  

StringNotLike

     

否定大小写匹配。值可以包括   多字符匹配通配符(*)或单字符匹配   字符串中任意位置的通配符(?)。

如果我这样做:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "iam:*User*",
                "iam:*Group*"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "iam:": ["Create*", "Delete*"]
                }
            }
        }
    ]
}

该策略允许完全访问权限。

2 个答案:

答案 0 :(得分:0)

您可以在策略中添加拒绝*操作。它将拒绝所有未明确允许的内容。

以下面的例子为例。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "iam:AddRoleToInstanceProfile",
                "iam:CreateInstanceProfile",
                "iam:DeleteInstanceProfile",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:ListInstanceProfiles",
                "iam:ListInstanceProfilesForRole",
                "iam:ListRoles",
                "iam:ListPolicies",
                "iam:ListRolePolicies",
                "iam:ListAttachedRolePolicies",
                "iam:RemoveRoleFromInstanceProfile"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        },

            "Resource": [
                "*"
            ],
            "Effect": "Deny"
        }
    ]
}

答案 1 :(得分:0)

我必须像这样明确拒绝。它可以工作,但我愿意寻求更好的解决方案。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": [
                "iam:CreateGroup",
                "iam:DeleteGroup",
                "iam:UpdateUser",
                "iam:PutUserPermissionsBoundary",
                "iam:AttachUserPolicy",
                "iam:DeleteUserPolicy",
                "iam:UpdateGroup",
                "iam:DeleteUser",
                "iam:DeleteUserPermissionsBoundary",
                "iam:CreateUser",
                "iam:RemoveUserFromGroup",
                "iam:AddUserToGroup",
                "iam:AttachGroupPolicy",
                "iam:PutUserPolicy",
                "iam:DetachGroupPolicy",
                "iam:DetachUserPolicy",
                "iam:DeleteGroupPolicy",
                "iam:PutGroupPolicy"
            ],
            "Resource": "*"
        }
    ]
}