[英]Trying to create IAM Policy, Role and Users using Python (Boto3)
[英]Edit an existing IAM Role trust policy using boto3
我需要使用 boto3 使用 Deny 语句更新/附加 IAM 角色信任策略。 如果我使用update_assume_role_policy ,它会覆盖以前的策略,而不是附加新的更改。 所以我尝试使用get_role阅读现有政策,然后使用 append 我对它的声明,但遇到以下挑战
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 角色信任策略?
我不确定你为什么需要字符串操作。 您可以只替换信任策略的各个组件。
例如:
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.