Michael - sqlbot's answer 是正确的 (+1),但鉴于 Variables in AWS Access Control Policies 的添加相对较新但非常有用:
今天,我们正在扩展 AWS 访问策略语言,以包括
支持变量。 Policy variables 让创建更容易
并管理包括个性化访问在内的一般政策
控制。
这可以实现“IAM 凭据自我管理”组策略,该策略通常会分配给最基本的 IAM 组,例如常见的“用户”。
- 请注意,以下解决方案仍需要由 AWS 账户所有者(或有权管理 IAM 本身的 IAM 用户)实施,但这只需执行一次,以便其他用户能够自行管理凭证.
官方解决方案
介绍性博客文章中包含了一个相应的示例(并且 同时 已在 IAM 文档中的 Allow a user to manage his or her own security credentials 上提供 - 更新:此示例再次消失,大概是由于仅使用 API 通过自定义解决方案适用,因此令人困惑):
变量替换还简化了允许用户管理他们的
自己的凭据。如果您有很多用户,您可能会发现它不切实际
创建允许用户创建和轮换的个人策略
他们自己的凭据。使用变量替换,变成
作为一个组策略实现起来很简单。以下政策允许
任何 IAM 用户执行任何密钥和证书相关操作
在他们自己的凭据上。 [强调我的]
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action":["iam:*AccessKey*","iam:*SigningCertificate*"],
"Resource":["arn:aws:iam::123456789012:user/${aws:username}"]
}
]
}
资源范围arn:aws:iam::123456789012:user/${aws:username} 确保每个用户实际上只被授予访问他自己的凭据的权限。
请注意,此解决方案仍然存在可用性缺陷,具体取决于您的用户如何访问 AWS 资源,即通过 API、CLI 或 AWS Management Console(例如,后者需要额外的权限)。
此外,各种* 字符是通配符,因此iam:*AccessKey* 处理包含AccessKey 的所有IAM 操作(有关详细信息,请参阅IAM Policy Elements Reference)。
扩展变化
免责声明: IAM 策略的正确配置尤其影响 IAM 访问显然是微妙的,所以请您自行判断以下解决方案的安全影响!
这里有一个更明确且略微扩展的变体,其中包括AWS Multi-Factor Authentication (MFA) 设备自我管理和一些易用性增强,以便于使用 AWS 管理控制台:
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:CreateAccessKey",
"iam:DeactivateMFADevice",
"iam:DeleteAccessKey",
"iam:DeleteSigningCertificate",
"iam:EnableMFADevice",
"iam:GetLoginProfile",
"iam:GetUser",
"iam:ListAccessKeys",
"iam:ListGroupsForUser",
"iam:ListMFADevices",
"iam:ListSigningCertificates",
"iam:ListUsers",
"iam:ResyncMFADevice",
"iam:UpdateAccessKey",
"iam:UpdateLoginProfile",
"iam:UpdateSigningCertificate",
"iam:UploadSigningCertificate"
],
"Effect": "Allow",
"Resource": [
"arn:aws:iam::123456789012:user/${aws:username}"
]
},
{
"Action": [
"iam:CreateVirtualMFADevice",
"iam:DeleteVirtualMFADevice",
"iam:ListVirtualMFADevices"
],
"Effect": "Allow",
"Resource": "arn:aws:iam::123456789012:mfa/${aws:username}"
}
]
}