【问题标题】:Edit an existing IAM Role trust policy using boto3使用 boto3 编辑现有 IAM 角色信任策略
【发布时间】:2020-11-29 16:24:28
【问题描述】:

我需要使用 boto3 使用 Deny 语句更新/附加 IAM 角色信任策略。如果我使用 update_assume_role_policy,它会覆盖以前的策略,而不是附加新的更改。因此,我尝试使用 get_role 阅读现有政策,然后将我的声明附加到其中,但遇到了以下挑战

  1. 如果我进行字符串替换 - 我的代码示例
    policy = '"Statement" : [ {"Sid": "Test","Effect": "Deny","Principal":{"AWS": "123456"},"Action": "*","Resource": "*"},{'        
            response = iam.get_role(RoleName= ResourceName)
            current_policy=str(response['Role']['AssumeRolePolicyDocument'])
            updated_policy = current_policy.replace('"Statement" : [ {', policy)

仅当策略字符串匹配 '"Statement" : [ {' 时才有效。它区分大小写,如果以前的策略在 Statement 周围有单引号(')而不是双引号(“),它就不起作用。我可以使用“re”模块并围绕它编写多个条件,但它增加了太多的复杂性。

  1. 如果我将策略作为字典并附加值,它会在我的更新周围添加一个“”,它的策略看起来像
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    },
    "{
      "Effect": "Deny",
      "Principal": {
        "AWS": "arn:aws:iam::890123:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }"
  ]
}

是否有更好、更简单的方法来更新 IAM 角色信任策略?

【问题讨论】:

    标签: amazon-web-services boto3 amazon-iam


    【解决方案1】:

    我不确定你为什么需要字符串操作。您只需替换信任策略的单个组件

    例如:

    import boto3
    
    iam = boto3.client('iam')
    
    response = iam.get_role(RoleName='<role-name>') 
    
    trust_policy = response['Role']['AssumeRolePolicyDocument']
    
    print(trust_policy)
    
    # change effect to `Deny`
    trust_policy['Statement'][0]['Effect'] = 'Deny'
    
    # change principle to '123456'
    trust_policy['Statement'][0]['Principal']['AWS'] = '123456'
    
    print(trust_policy)
    

    您可以对其他组件执行相同操作。

    【讨论】:

    • 感谢 Marcin 的快速回复。我不是要替换现有的权限。我需要在现有政策中添加新政策声明。这就是原因,我正在尝试字符串替换或字典更新之类的东西。
    • @user1550159 然后您可以添加新元素,就像添加到常规 python dict 或列表中一样。
    猜你喜欢
    • 2020-05-29
    • 2018-09-29
    • 2017-12-24
    • 1970-01-01
    • 2021-01-05
    • 2019-01-13
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多