【发布时间】:2020-11-29 16:24:28
【问题描述】:
我需要使用 boto3 使用 Deny 语句更新/附加 IAM 角色信任策略。如果我使用 update_assume_role_policy,它会覆盖以前的策略,而不是附加新的更改。因此,我尝试使用 get_role 阅读现有政策,然后将我的声明附加到其中,但遇到了以下挑战
- 如果我进行字符串替换 - 我的代码示例
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”模块并围绕它编写多个条件,但它增加了太多的复杂性。
- 如果我将策略作为字典并附加值,它会在我的更新周围添加一个“”,它的策略看起来像
{
"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