如何授予 IAM 组访问除创建新用户之外的所有内容的权限?

Posted

技术标签:

【中文标题】如何授予 IAM 组访问除创建新用户之外的所有内容的权限?【英文标题】:How do I give an IAM group access to everything except creating new users? 【发布时间】:2017-02-02 18:28:47 【问题描述】:

我有一个测试帐户,我希望开发人员可以在其中尝试他们想要的任何东西,除非我不想授予他们添加/删除/与其他用户混淆的权限。我尝试允许一切,然后拒绝 IAM 访问,但后来他们无法更改自己的密码。例如:


    "Version": "2012-10-17",
    "Statement": [
        
            "Effect": "Allow",
            "Action": [
                "*"
            ],
            "Resource": [
                "*"
            ]
        ,
        
            "Effect": "Deny",
            "Action": [
                "iam:*"
            ],
            "Resource": [
                "*"
            ]
        ,
    ]

这使得用户在尝试登录和更改密码时收到以下错误:

User is not authorized to perform iam:ChangePassword

【问题讨论】:

【参考方案1】:

要获得更简洁的答案,您可以使用通配符。不是完美的未来证明,但这些是大多数破坏性动词。 :)

我还发现策略模拟器非常有用:IAM policy simulator


"Version": "2012-10-17",
"Statement": [
    
        "Effect": "Allow",
        "Action": "*",
        "Resource": "*"
    ,
    
        "Effect": "Deny",
        "Action": [
            "iam:Add*",
            "iam:Create*",
            "iam:Deactivate*",
            "iam:Delete*",
            "iam:Detach*",
            "iam:Enable*",
            "iam:PassRole",
            "iam:Put*",
            "iam:Remove*",
            "iam:Resync*",
            "iam:Set*",
            "iam:Simulate*",
            "iam:Update*",
            "iam:Put*"
        ],
        "Resource": "*"
    
]

【讨论】:

【参考方案2】:

我想出了一个我只是适度接受的答案。我通过拒绝所有 IAM 操作来实现这一点,除了更改密码和查看密码要求的能力。


    "Version": "2012-10-17",
    "Statement": [
        
            "Effect": "Allow",
            "Action": [
                "*"
            ],
            "Resource": [
                "*"
            ]
        ,
        
            "Effect": "Deny",
            "Action": [
                "iam:AddRoleToInstanceProfile",
                "iam:AddUserToGroup",
                "iam:AddClientIDToOpenIDConnectProvider",
                "iam:AttachGroupPolicy",
                "iam:AttachRolePolicy",
                "iam:AttachUserPolicy",
                "iam:CreateAccessKey",
                "iam:CreateAccountAlias",
                "iam:CreateGroup",
                "iam:CreateInstanceProfile",
                "iam:CreateLoginProfile",
                "iam:CreateOpenIDConnectProvider",
                "iam:CreatePolicy",
                "iam:CreatePolicyVersion",
                "iam:CreateRole",
                "iam:CreateSAMLProvider",
                "iam:CreateUser",
                "iam:CreateVirtualMFADevice",
                "iam:DeactivateMFADevice",
                "iam:DeleteAccessKey",
                "iam:DeleteAccountAlias",
                "iam:DeleteAccountPasswordPolicy",
                "iam:DeleteGroup",
                "iam:DeleteGroupPolicy",
                "iam:DeleteInstanceProfile",
                "iam:DeleteLoginProfile",
                "iam:DeleteOpenIDConnectProvider",
                "iam:DeletePolicy",
                "iam:DeletePolicyVersion",
                "iam:DeleteRole",
                "iam:DeleteRolePolicy",
                "iam:DeleteSAMLProvider",
                "iam:DeleteSSHPublicKey",
                "iam:DeleteServerCertificate",
                "iam:DeleteSigningCertificate",
                "iam:DeleteUser",
                "iam:DeleteUserPolicy",
                "iam:DeleteVirtualMFADevice",
                "iam:DetachGroupPolicy",
                "iam:DetachRolePolicy",
                "iam:DetachUserPolicy",
                "iam:EnableMFADevice",
                "iam:GenerateCredentialReport",
                "iam:GenerateServiceLastAccessedDetails",
                "iam:GetAccessKeyLastUsed",
                "iam:GetAccountAuthorizationDetails",
                "iam:GetAccountSummary",
                "iam:GetContextKeysForCustomPolicy",
                "iam:GetContextKeysForPrincipalPolicy",
                "iam:GetCredentialReport",
                "iam:GetGroup",
                "iam:GetGroupPolicy",
                "iam:GetInstanceProfile",
                "iam:GetLoginProfile",
                "iam:GetOpenIDConnectProvider",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:GetSAMLProvider",
                "iam:GetSSHPublicKey",
                "iam:GetServerCertificate",
                "iam:GetServiceLastAccessedDetails",
                "iam:GetServiceLastAccessedDetailsWithEntities",
                "iam:GetUser",
                "iam:GetUserPolicy",
                "iam:ListAccessKeys",
                "iam:ListAccountAliases",
                "iam:ListAttachedGroupPolicies",
                "iam:ListAttachedRolePolicies",
                "iam:ListAttachedUserPolicies",
                "iam:ListEntitiesForPolicy",
                "iam:ListGroupPolicies",
                "iam:ListGroups",
                "iam:ListGroupsForUser",
                "iam:ListInstanceProfiles",
                "iam:ListInstanceProfilesForRole",
                "iam:ListMFADevices",
                "iam:ListOpenIDConnectProviders",
                "iam:ListPolicies",
                "iam:ListPoliciesGrantingServiceAccess",
                "iam:ListPolicyVersions",
                "iam:ListRolePolicies",
                "iam:ListRoles",
                "iam:ListSAMLProviders",
                "iam:ListSSHPublicKeys",
                "iam:ListServerCertificates",
                "iam:ListSigningCertificates",
                "iam:ListUserPolicies",
                "iam:ListUsers",
                "iam:ListVirtualMFADevices",
                "iam:PassRole",
                "iam:PutGroupPolicy",
                "iam:PutRolePolicy",
                "iam:PutUserPolicy",
                "iam:RemoveClientIDFromOpenIDConnectProvider",
                "iam:RemoveRoleFromInstanceProfile",
                "iam:RemoveUserFromGroup",
                "iam:ResyncMFADevice",
                "iam:SetDefaultPolicyVersion",
                "iam:SimulateCustomPolicy",
                "iam:SimulatePrincipalPolicy",
                "iam:UpdateAccessKey",
                "iam:UpdateAccountPasswordPolicy",
                "iam:UpdateAssumeRolePolicy",
                "iam:UpdateGroup",
                "iam:UpdateLoginProfile",
                "iam:UpdateOpenIDConnectProviderThumbprint",
                "iam:UpdateSAMLProvider",
                "iam:UpdateSSHPublicKey",
                "iam:UpdateServerCertificate",
                "iam:UpdateSigningCertificate",
                "iam:UpdateUser",
                "iam:UploadSSHPublicKey",
                "iam:UploadServerCertificate",
                "iam:UploadSigningCertificate"
            ],
            "Resource": [
                "*"
            ]
        
    ]

它有效,但我想要更简洁/面向未来的东西。

【讨论】:

【参考方案3】:

您可以使用如下所示的内容。使用 NotAction。这将拒绝 IAM 的所有内容,除了您在 NotAction 中提到的任何内容。您可以使用以下方法创建用户,但请注意,您还必须分配策略/角色,以便为“NotAction”下的用户添加权限。 IAM 控制台中将阻止除“NotAction”中指定的操作之外的所有其他操作。策略的另一部分允许控制台中的所有内容。因此,只需阻止 IAM,同时允许 IAM 的所有内容和某些属性。


"Version": "2012-10-17",
"Statement": [
    
        "Sid": "VisualEditor0",
        "Effect": "Deny",
        "NotAction": [
            "iam:CreateUser"
        ],
        "Resource": "arn:aws:iam::*:*"
    ,
    
        "Effect": "Allow",
        "Action": "*",
        "Resource": "*"
    
]

最好的问候, 桑吉夫 B.

【讨论】:

【参考方案4】:

我将以下内容用于不需要访问用户/组/策略更改的 Infra 管理员。


    "Version": "2012-10-17",
    "Statement": [
        
            "Effect": "Allow",
            "Action": [
                "*"
            ],
            "Resource": [
                "*"
            ]
        ,
        
            "Effect": "Deny",
            "Action": [
                "iam:AddUserToGroup",
                "iam:AddClientIDToOpenIDConnectProvider",
                "iam:AttachGroupPolicy",
                "iam:AttachRolePolicy",
                "iam:AttachUserPolicy",
                "iam:CreateGroup",
                "iam:CreateLoginProfile",
                "iam:CreateOpenIDConnectProvider",
                "iam:CreatePolicy",
                "iam:CreatePolicyVersion",
                "iam:CreateRole",
                "iam:CreateSAMLProvider",
                "iam:CreateUser",
                "iam:DeleteAccountPasswordPolicy",
                "iam:DeleteGroup",
                "iam:DeleteGroupPolicy",
                "iam:DeleteLoginProfile",
                "iam:DeleteOpenIDConnectProvider",
                "iam:DeletePolicy",
                "iam:DeletePolicyVersion",
                "iam:DeleteRole",
                "iam:DeleteRolePolicy",
                "iam:DeleteSAMLProvider",
                "iam:DeleteUser",
                "iam:DeleteUserPolicy",
                "iam:DetachGroupPolicy",
                "iam:DetachRolePolicy",
                "iam:DetachUserPolicy",
                "iam:PutGroupPolicy",
                "iam:PutRolePolicy",
                "iam:PutUserPolicy",
                "iam:RemoveClientIDFromOpenIDConnectProvider",
                "iam:RemoveUserFromGroup",
                "iam:SetDefaultPolicyVersion",
                "iam:UpdateAccountPasswordPolicy",
                "iam:UpdateAssumeRolePolicy",
                "iam:UpdateGroup",
                "iam:UpdateLoginProfile",
                "iam:UpdateOpenIDConnectProviderThumbprint",
                "iam:UpdateSAMLProvider",
                "iam:UpdateUser",
            ],
            "Resource": [
                "*"
            ]
        
    ]

【讨论】:

以上是关于如何授予 IAM 组访问除创建新用户之外的所有内容的权限?的主要内容,如果未能解决你的问题,请参考以下文章

拒绝除一个之外的所有存储桶的 AWS IAM 策略

为除一个/几个表之外的所有表授予 [几乎] 所有 mySQL 权限

AWS-IAM:授予对单个存储桶的访问权限

创建单个 IAM 用户以仅访问特定的 S3 存储桶

S3 拒绝管理员访问

拒绝除特定范围之外的所有 IP 访问 AWS S3