AWS IAM策略允许用户在阻止对IAM的访问时更改自己的密码

Man*_*uel 7 passwords amazon-web-services amazon-iam

我为我的开发人员提供了一些管理帐户,他们应该能够管理所有aws资源但不应该能够管理用户/ root属性.因此,我通过以下政策限制了对IAM的访问:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "NotAction": "iam:*",
      "Resource": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

但是这会阻止用户更改自己的密码.如何阻止它们进入IAM但允许他们更改密码?

Joh*_*ein 7

您指定的策略授予对AWS Identity and Access Management(IAM)以外的所有操作的访问权限.

因此,要允许用户更改其密码,请将另一个(附加)策略附加到授予更改密码权限的用户/组:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SomeSID",
      "Effect": "Allow",
      "Action": [
        "iam:ChangePassword"
      ],
      "Resource": [
        "*"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

虽然"拒绝"通常会覆盖"允许",但原始策略并未使用拒绝 - 它仅仅授予 IAM 之外的所有内容的权限.因此,附加的"允许"将授予所需的权限.


Xio*_*iov 2

Amazon提供了一个示例策略,不需要为每个用户手动指定用户 ID:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "iam:*LoginProfile",
        "iam:*AccessKey*",
        "iam:*SSHPublicKey*"
      ],
      "Resource": "arn:aws:iam::account-id-without-hyphens:user/${aws:username}"
    },
    {
      "Effect": "Allow",
      "Action": [
        "iam:ListAccount*",
        "iam:GetAccountSummary",
        "iam:GetAccountPasswordPolicy",
        "iam:ListUsers"
      ],
      "Resource": "*"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

但是,更改密码(至少在初始登录期间,当创建用户时勾选“首次登录时需要更改密码”时)似乎仍然需要权限iam:ChangePassword

更好的选择是启用密码策略并选中“允许用户更改自己的密码”框;这完全按照罐头上的说明进行操作,没有任何摸索。