簡體   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