簡體   English   中英

使用 boto3 編輯現有 IAM 角色信任策略

[英]Edit an existing IAM Role trust policy using boto3

我需要使用 boto3 使用 Deny 語句更新/附加 IAM 角色信任策略。 如果我使用update_assume_role_policy ,它會覆蓋以前的策略,而不是附加新的更改。 所以我嘗試使用get_role閱讀現有政策,然后使用 append 我對它的聲明,但遇到以下挑戰

  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. 如果我將策略作為字典和 append 值,它會在我的更新周圍添加一個“”,它的策略看起來像
{
  "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 角色信任策略?

我不確定你為什么需要字符串操作。 您可以只替換信任策略的各個組件

例如:

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)

您可以對其他組件執行相同操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM