繁体   English   中英

如何使用Boto3 Python更新IAM策略

[英]How to update IAM Policy using Boto3 Python

我有一个S3存储桶读取策略:

   {
      "Version":"2012-10-17",
      "Statement":[
        {
          "Effect":"Allow",
          "Action":["s3:GetObject"],
          "Resource":["arn:aws:s3:::examplebucket/*"]
        }
      ]
    }

基于创建新存储桶时的云跟踪日志,我正在创建一个事件,该事件将调用Lambda函数。

能够读取该策略的json并将新资源(存储桶)添加到同一策略。 是否有要调用的直接python API,它将使用新资源更新现有的IAM策略?

我找到了正确的方法:

您必须创建现有策略的策略版本(包括策略更改)并将其标记为默认值。 因此,新版本将替换现有策略。

获取您现有的政策:

policy = iam.Policy('arn:aws:iam::' + ACCOUNT_ID + ':policy/' + POLICY_NAME)

从此策略获取JSON:

policyJson = policy.default_version.document

根据需要进行更改:

policyJson['Statement'].append({  
'Action': '*',
'Resource': 'arn:aws:ec2:::*/*',
'Effect': 'Allow'
})

使用新的JSON和选项SetAsDefault为True创建策略版本

response = client.create_policy_version(
    PolicyArn= 'arn:aws:iam::' + ACCOUNT_ID + ':policy/' + POLICY_NAME,
    PolicyDocument= json.dumps(policyJson),
    SetAsDefault= True
)

删除以前的版本(可选,但建议最多5个版本):

response = client.delete_policy_version(
    PolicyArn= 'arn:aws:iam::' + ACCOUNT_ID + ':policy/' + POLICY_NAME,
    VersionId= version.version_id
    ) 

而且你很好走!

托马斯。

参考: IAM DOC

您必须获取IAM策略,然后删除,最后再使用修改过的JSON重新创建(如先前建议的那样)。

代码段

import boto3, json

# Create IAM client
iam = boto3.resource('iam')

policy = iam.Policy('arn:aws:iam::ACCCOUNT_ID:policy/CustomS3Policy')
version = policy.default_version
policyJson = version.document
policyJson['Statement'][0]['Resource'].append('arn:aws:s3:::anotherbucket/*')

print(policyJson)

client = boto3.client('iam')
response = client.delete_policy(
    PolicyArn='arn:aws:iam::ACCCOUNT_ID:policy/CustomS3Policy'
)
print(response)

response = client.create_policy(
  PolicyName='CustomS3Policy',
  PolicyDocument=json.dumps(policyJson)
)
print(response)

参考文献

http://boto3.readthedocs.io/en/latest/guide/iam-example-policies.html https://boto3.readthedocs.io/en/latest/reference/services/iam.html#IAM.Client.delete_policy https://gist.github.com/alexcasalboni/07414d62290828ea03a14b4bf2157fd1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM