【问题标题】:How do I give an IAM group access to everything except creating new users?如何授予 IAM 组访问除创建新用户之外的所有内容的权限?
【发布时间】: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

【问题讨论】:

    标签: amazon-iam


    【解决方案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": [
                          "*"
                      ]
                  }
              ]
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-19
            • 1970-01-01
            • 2018-05-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多