티스토리 뷰
반응형
import boto3
from botocore.exceptions import ClientError
import json
def get_policy_document(iam_client, policy_arn):
"""
IAM 정책의 문서를 가져옵니다.
:param iam_client: Boto3 IAM 클라이언트
:param policy_arn: 조회할 IAM 정책의 ARN
:return: 정책 문서 (JSON 형식)
"""
try:
response = iam_client.get_policy(PolicyArn=policy_arn)
policy_version_id = response['Policy']['DefaultVersionId']
response = iam_client.get_policy_version(
PolicyArn=policy_arn,
VersionId=policy_version_id
)
policy_document = response['PolicyVersion']['Document']
return policy_document
except ClientError as e:
print(f"Error getting policy document: {e}")
return None
def create_policy_version(iam_client, policy_arn, policy_document):
"""
IAM 정책에 새 버전을 생성하고 기본 버전으로 설정합니다.
:param iam_client: Boto3 IAM 클라이언트
:param policy_arn: 정책의 ARN
:param policy_document: 정책 문서 (JSON 형식)
"""
try:
# 새 정책 버전 생성
response = iam_client.create_policy_version(
PolicyArn=policy_arn,
PolicyDocument=json.dumps(policy_document),
SetAsDefault=True
)
# 가장 오래된 정책 버전을 삭제 (기본 버전이 아닌 경우)
policy_versions = iam_client.list_policy_versions(PolicyArn=policy_arn)
versions = sorted(policy_versions['Versions'], key=lambda v: v['CreateDate'])
# 기본 버전 외에 다른 모든 버전 삭제
for version in versions[:-1]: # 최신 버전은 유지
if version['IsDefaultVersion']:
continue
iam_client.delete_policy_version(
PolicyArn=policy_arn,
VersionId=version['VersionId']
)
print(f"Updated policy {policy_arn} with a new version.")
except ClientError as e:
print(f"Error creating policy version: {e}")
if __name__ == "__main__":
# 다중 계정의 프로파일 리스트 정의
account_profiles = [
{"profile_name": "fendys-prod", "account_id": "123456789012", "policy_name": "fendys_policy"}
{"profile_name": "fendys-dev", "account_id": "123456789013", "policy_name": "fendys_policy"}
# 추가적인 계정을 여기에 추가
]
for account in account_profiles:
profile_name = account["profile_name"]
account_id = account["account_id"]
policy_name = account["policy_name"]
# Boto3 IAM 클라이언트 생성
session = boto3.Session(profile_name=profile_name)
iam_client = session.client('iam')
# 수정할 정책의 ARN 동적으로 생성
policy_arn = f"arn:aws:iam::{account_id}:policy/{policy_name}"
# 정책 문서 가져오기
policy_document = get_policy_document(iam_client, policy_arn)
if policy_document:
# 수정할 정책 문서 적용
# 예를 들어, 정책 문서에 새 권한 추가
policy_document['Statement'].append({
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/maker": "fendys"
}
}
})
# 정책 버전 생성 및 업데이트
create_policy_version(iam_client, policy_arn, policy_document)
else:
print(f"Policy {policy_name} does not exist in account {account_id}.")
반응형
'AWS' 카테고리의 다른 글
aws multi account attach iam role & policy python (boto3) (0) | 2024.09.02 |
---|---|
aws multi account create iam policy python (boto3) (0) | 2024.09.02 |
aws multi account create iam role python (boto3) (0) | 2024.09.02 |
aws s3 bucket lifecycle set (0) | 2023.07.12 |
install on centos7 + docker +awx 17.1.0 (0) | 2022.06.02 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- vm rac
- windows.old 강제삭제
- ios ansible
- ipmi
- dl20 centos7
- chrony
- cmd로 계정 생성
- shell connmad log
- kernel 변경
- cmd로 윈도우 계정 관리
- dl20
- 특정 라인삭제
- oracle linux8 kernel
- nxos ansible
- cgroup
- centos7 ntp
- ansible network
- dl20 g9 centos7 설치
- DL20 GEN9 장비에 CentOS 7
- ILO
- CentOS 7 GUI
- 윈도우 cmd 계정 관리
- 윈도우서버 계정 관려
- linux command log
- ISCSI 볼륨 RAC
- ansible ios
- 특정 문구 치환
- cisco ansible
- 리눅스 커맨드 로그남기기
- nutanix rac
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함