티스토리 뷰

반응형
import boto3
from botocore.exceptions import ClientError
def attach_policy_to_role(profile_name, role_name, policy_arn):
    """
    IAM 역할에 정책을 연결합니다.
    :param profile_name: AWS CLI 프로파일 이름
    :param role_name: 정책을 연결할 IAM 역할의 이름
    :param policy_arn: 연결할 IAM 정책의 ARN
    """
    # 지정된 프로파일을 사용하는 세션 생성
    session = boto3.Session(profile_name=profile_name)
    # 세션에서 IAM 클라이언트 생성
    iam_client = session.client('iam')
    try:
        # IAM 역할에 정책 연결
        iam_client.attach_role_policy(
            RoleName=role_name,
            PolicyArn=policy_arn
        )
        print(f"Successfully attached policy {policy_arn} to role {role_name} in profile {profile_name}")
    except ClientError as e:
        print(f"Error attaching policy in profile {profile_name}: {e}")
if __name__ == "__main__":
    # 프로파일과 계정 ID의 리스트 정의
    account_profiles = [
        {"profile_name": "fendys-prod", "role_name": saml_fendys_role", "account_id": "123456789012"}
        {"profile_name": "fendys-dev", "role_name": "saml_fendys_role", "account_id": "123456789013"}
        # 더 많은 계정을 추가할 수 있습니다
    ]
    # 각 프로파일에 대해 루프 실행
    for account in account_profiles:
        profile_name = account["profile_name"]
        role_name = account["role_name"]
        account_id = account["account_id"]
        # 연결할 정책의 ARN 동적으로 생성
        policy_arn = f"arn:aws:iam::{account_id}:policy/fendys_policy"
        print(f"Processing account: {account_id} with profile: {profile_name}")
        # 역할에 정책 연결 함수 호출
        attach_policy_to_role(profile_name, role_name, policy_arn)
반응형