Amazon web services AWS IAM:允许向组中添加除自己以外的任何人的策略

Amazon web services AWS IAM:允许向组中添加除自己以外的任何人的策略,amazon-web-services,amazon-iam,Amazon Web Services,Amazon Iam,有没有办法限制添加用户的iam:AddUserToGroup?我想建立一个策略,允许将任何用户添加到组中,但不允许请求者添加自己。我可以通过将请求者限制为可用资源来限制其他操作,但在本例中,资源是组 如果我错了,有人会纠正我,但我认为不可能限制用户在尝试从AWS控制台添加到组中时可以添加的用户。如果您使用其他工具(如Lambda)修改组成员资格,则可以这样做 IAM权限可以包括服务和资源的操作,但不包括这些操作的参数。如果他们这样做,那就太酷了。:) 例如,每个策略可以允许或限制操作AddUse

有没有办法限制添加用户的iam:AddUserToGroup?我想建立一个策略,允许将任何用户添加到组中,但不允许请求者添加自己。我可以通过将请求者限制为可用资源来限制其他操作,但在本例中,资源是组

如果我错了,有人会纠正我,但我认为不可能限制用户在尝试从AWS控制台添加到组中时可以添加的用户。如果您使用其他工具(如Lambda)修改组成员资格,则可以这样做

IAM权限可以包括服务和资源的操作,但不包括这些操作的参数。如果他们这样做,那就太酷了。:)

例如,每个策略可以允许或限制操作
AddUserToGroup
。与将应用操作的组资源相同。因此,您可以限制或允许对特定资源(组)的
AddUserToGroup
操作的访问,但IAM不允许您将策略条件基于操作的参数


在这种情况下,
AddUserToGroup
操作上的参数
UserName

如果我错了,有人会纠正我,但我认为不可能限制用户在尝试从AWS控制台添加到组中时可以添加谁。如果您使用其他工具(如Lambda)修改组成员资格,则可以这样做

IAM权限可以包括服务和资源的操作,但不包括这些操作的参数。如果他们这样做,那就太酷了。:)

例如,每个策略可以允许或限制操作
AddUserToGroup
。与将应用操作的组资源相同。因此,您可以限制或允许对特定资源(组)的
AddUserToGroup
操作的访问,但IAM不允许您将策略条件基于操作的参数


在本例中,
AddUserToGroup
操作上的参数
UserName

结合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);
                }
            });
        }
     }
  }

结合对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);
                }
            });
        }
     }
  }

最后,每当调用AddUserToGroup将自己添加到组中时,我使用lambda函数自动从组中删除用户。我发现这篇AWS安全博客文章非常有助于定义进行设置所需的元素:我最终使用lambda函数在调用AddUserToGroup将自己添加到组时自动从组中删除用户。我发现这篇AWS安全博客文章非常有助于定义设置此功能所需的元素: