有没有办法限制iam:AddUserToGroup由哪个用户添加?我想构建一个策略,允许将任何用户添加到组中,但不允许请求者添加自己除外。我能够通过将请求者限制为可用资源来限制其他操作,但在这种情况下,资源是组。
错了,有人纠正我,但我认为在尝试从 AWS 控制台添加组时,无法限制用户可以添加到组的人员。如果您使用其他工具(例如 Lambda(来修改组成员身份,则可以执行此操作。
IAM 权限可以达到服务和资源的操作,但不能达到这些操作的参数。如果他们这样做会很酷。:)
例如,可以允许或限制每个策略的操作AddUserToGroup
。与将应用操作的组资源相同。因此,您可以限制或允许访问特定资源(组(上的AddUserToGroup
操作,但 IAM 不允许您将策略条件基于操作的参数。
在这种情况下,参数UserName
AddUserToGroup
操作上。
结合 byumark 答案评论中提到的博客文章中定义的执行角色和权限,我使用这个简单的 lambda 函数来自动修复我想要防止的操作类型:
'use strict';
var aws = require('aws-sdk');
var iam = new aws.IAM();
exports.handler = function(event, context) {
// Log the incoming Amazon CloudWatch Events event
console.log('Received event:', JSON.stringify(event, null, 2));
// If the caller is not an IAM user, do nothing
if (event.detail.userIdentity.type != 'IAMUser') {
context.done();
} else {
var userName = event.detail.userIdentity.userName;
// If the user is adding herself to a group
if (event.detail.eventName === "AddUserToGroup" &&
event.detail.requestParameters.userName === userName) {
// Remove the user from that group
var groupName = event.detail.requestParameters.groupName;
console.log('User adding self to group detected. Removing user',
userName, 'from group', groupName);
var params = {
GroupName: groupName,
UserName: userName
};
iam.removeUserFromGroup(params, function(err, data) {
if (err) {
console.log(err, err.stack);
} else {
console.log(data);
}
});
}
}
}