1 Answers
AWS has resource based and user based permission policies. The permissions in are evaluated together- either must explicitly allow.
KMS is little bit unique – it must specifically enable IAM permissions. (not the case with other resource based permissions)
KMS enables IAM by allowing it user’s root account. you would typically allow all to root, it is further delegated to specific users suitably:
"Action": "kms:*",
"Resource": "*"
In this case since the user can encrypt so the IAM permission has been enabled in the KMS policy. But as the user cannot decrypt – it must be an IAM policy issue not KMS policy issue.
There is no evidence at all that this key was enabling IAM permissions. The Key policy can be something like:
Principal: aws: - John Doe actin: - kms:encrypt
Also, from a security point of view I would do exactly the opposite of that "you would typically allow all to root" since this opens a major door for privilege escalation.
Allowing All to root is the recommended way. Root has all privileges any way – so nothing is getting escalated.
Well here is the caveat, Root does not have permissions to use or managed a customer CMK unless you explicitly provide it within the key policy. I suggest you to run a couple of tests in some AWS account and you will see on your own.