![](/img/trans.png)
[英]Trying to create IAM Policy, Role and Users using Python (Boto3)
[英]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.