AWS IAM:为基于身份的策略添加“例外”

Posted

技术标签:

【中文标题】AWS IAM:为基于身份的策略添加“例外”【英文标题】:AWS IAM: Adding "exeption" for identity-based policy 【发布时间】:2020-10-21 15:55:09 【问题描述】:

在AWS documentation 之后,我向我的组 admin 附加了一项策略,以强制该组的权限仅适用于启用了 MFA 的用户


    "Version": "2012-10-17",
    "Statement": [
        
            "Sid": "BlockMostAccessUnlessSignedInWithMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:CreateVirtualMFADevice",
                "iam:DeleteVirtualMFADevice",
                "iam:ListVirtualMFADevices",
                "iam:DeactivateMFADevice",
                "iam:EnableMFADevice",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice",
                "iam:GetAccountSummary",
                "sts:GetSessionToken"
            ],
            "Resource": "*",
            "Condition": 
                "Bool": 
                    "aws:MultiFactorAuthPresent": "false"
                
            
        
    ]

我的问题是我有一个机器人(我们称之为 arn:aws:iam::12345678:user/my-bot),它是 admin 的一部分组并且它没有启用 MFA。到目前为止我想到了这两个选项

    将我的机器人放在不存在 EnforceMFA 策略的不同组中(重复代码) 不知何故为机器人启用 MFA(虽然我不喜欢那个选项)

有没有一种方法可以在我的 EnforceMFA 策略中添加一个例外/条件,即“对于这个特定用户,不要应用此拒绝”)

提前致谢

【问题讨论】:

【参考方案1】:

您可以为您的机器人用户创建一个标签并添加另一个条件,标记您的服务帐户以识别它。


   "Condition": 
      "Bool": 
                    "aws:MultiFactorAuthPresent": "false"
                ,
      "StringNotEqual": 
            "iam:ResourceTag/type": "bot"
      
   


另外创建一个拒绝更改用户标签的策略。

如果您只想排除特定用户,您可以使用aws:PrincipalArn 全局条件您的策略对除指定用户之外的所有用户应用拒绝:https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html

与 StringNotEqual 结合使用即可!

【讨论】:

感谢您的回答。你知道我是否可以做类似的事情,但使用用户的 id/name 而不是分配给用户的标签? 我在回答中包含了一个解决方案 抱歉误解了你的问题。再次编辑答案;) 感谢您的留言。我最终要做的是,尽管我仍在测试它是否是一个有效的解决方案:"Condition": "Bool": "aws:MultiFactorAuthPresent" : "false" , "StringNotEquals" : "aws:username" : "my-bot" 也是一种有效的方法。 PrincipalArn 更通用。

以上是关于AWS IAM:为基于身份的策略添加“例外”的主要内容,如果未能解决你的问题,请参考以下文章

AWS IAM“身份”和“实体”之间的区别

Elasticsearch npm:传递AWS凭证

具有 Cognito 联合身份的 AWS AppSync IAM 授权

如何在 IAM 角色的信任策略中检查自定义 OpenID 声明?

有啥方法可以限制 IAM 用户/假定角色在 AWS cognito 中启用未经身份验证的用户身份?

CloudFront 后面的 API Gateway 不支持 AWS_IAM 身份验证吗?