ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Boto3 实战:使用 AWS SDK for Python 管理 Amazon EC2 安全组(Security Group)

Boto3 实战:使用 AWS SDK for Python 管理 Amazon EC2 安全组(Security Group) 后端云原生【免费下载链接】boto3AWS SDK for Python (Boto3)项目地址https://gitcode.com/gh_mirrors/bo/boto3点击查看免费下载本指南基于 Boto3 官方指南 docs/source/guide/ec2-example-security-group.rst 展开系统讲解如何用 AWS SDK for PythonBoto3查询、创建、授权入站规则并删除 EC2 安全组。你将掌握describe_security_groups、create_security_group、authorize_security_group_ingress、delete_security_group四个 EC2 客户端方法的完整用法、参数语义与异常处理并结合仓库源码理解 Boto3 客户端与资源接口的底层组织方式。背景EC2 安全组是什么Amazon EC2 安全组Security Group本质上是一台虚拟防火墙负责控制一个或多个实例的出入站流量。你可以为每个安全组添加规则Rules决定允许哪些流量进入或离开其关联的实例规则可以随时修改修改后的新规则会自动应用到与该安全组关联的所有实例通常即时生效极小概率存在短暂的传播延迟。在本例场景中Python 代码通过 AWS SDK for Python 完成如下与安全组相关的 EC2 操作涉及 EC2 客户端Client类的以下四个方法方法作用describe_security_groups查询一个或多个安全组的详细信息create_security_group创建一个新的安全组authorize_security_group_ingress为安全组添加入站Ingress规则delete_security_group删除一个已存在的安全组说明原文中该段文字存在笔误manage IAM access keys实际管理对象为安全组本文按真实语义表述。前置条件在运行本文所有示例前你需要先完成两件事安装 Boto3使用pip install boto3建议在虚拟环境中安装详见 docs/source/guide/quickstart.rst。配置 AWS 凭证按 docs/source/guide/quickstart.rst 中的说明配置 AWS 凭证通常是通过aws configure或在~/.aws/credentials中写入访问密钥并在~/.aws/config中指定默认区域例如regionus-east-1。也可以直接在创建客户端时传入region_name。凭证配置完成之前所有 API 调用都会因身份认证失败而抛出ClientError。查询安全组describe_security_groups安全组既可以用于 EC2-Classic 平台的实例也可以用于特定 VPC 中的实例。调用describe_security_groups可以查询一个或多个安全组通过GroupIds参数按安全组 ID 精确查询。import boto3 from botocore.exceptions import ClientError ec2 boto3.client(ec2) try: response ec2.describe_security_groups(GroupIds[SECURITY_GROUP_ID]) print(response) except ClientError as e: print(e)要点说明SECURITY_GROUP_ID需要替换为形如sg-xxxxxxxx的真实安全组 ID。返回值response中SecurityGroups数组包含安全组详情例如GroupId、GroupName、Description、VpcId、IpPermissions入站规则、IpPermissionsEgress出站规则等。若未指定任何筛选条件describe_security_groups默认返回当前账号/区域内全部安全组自动分页可通过MaxResults/NextToken控制。GroupIds与Filters如{Name: group-name, Values: [...]}可组合使用。查询不存在的安全组 ID 时会抛出ClientError因此必须用try/except包裹。⚠️ EC2-Classic 已于 2022 年 8 月 15 日退役官方强烈建议将工作负载迁移到 VPC。新建安全组时务必指定VpcId不要再依赖 EC2-Classic 平台。创建安全组并添加入站规则创建安全组的完整流程分为两步先用create_security_group创建安全组再用authorize_security_group_ingress添加入站规则。规则变更会尽可能快地传播到组内实例但可能仍有少量延迟。import boto3 from botocore.exceptions import ClientError ec2 boto3.client(ec2) response ec2.describe_vpcs() vpc_id response.get(Vpcs, [{}])[0].get(VpcId, ) try: response ec2.create_security_group(GroupNameSECURITY_GROUP_NAME, DescriptionDESCRIPTION, VpcIdvpc_id) security_group_id response[GroupId] print(Security Group Created %s in vpc %s. % (security_group_id, vpc_id)) data ec2.authorize_security_group_ingress( GroupIdsecurity_group_id, IpPermissions[ {IpProtocol: tcp, FromPort: 80, ToPort: 80, IpRanges: [{CidrIp: 0.0.0.0/0}]}, {IpProtocol: tcp, FromPort: 22, ToPort: 22, IpRanges: [{CidrIp: 0.0.0.0/0}]} ]) print(Ingress Successfully Set %s % data) except ClientError as e: print(e)参数详解与实战建议create_security_group参数GroupName安全组名称在 VPC 内必须唯一。Description安全组描述必填参数建议写明用途例如Web server access。VpcId安全组所属 VPC 的 ID。示例中通过describe_vpcs自动获取第一个 VPC 的 ID若账号下没有 VPCresponse.get(Vpcs, [{}])[0].get(VpcId, )会返回空字符串此时创建可能失败或落入非预期平台生产代码中建议显式指定 VPC。返回值response[GroupId]是新创建安全组的 ID必须保存下来供后续授权规则和删除使用。authorize_security_group_ingress参数GroupId目标安全组 ID。IpPermissions入站规则列表每条规则包含IpProtocol协议例如tcp、udp、icmp或-1全部协议。FromPort/ToPort端口范围ICMP 场景下为类型/代码。IpRanges源 CIDR 列表{CidrIp: 0.0.0.0/0}表示允许所有来源 IP。还可用Ipv6Ranges、PrefixListIds、UserIdGroupPairs引用其他安全组等字段。⚠️ 安全提醒示例中同时开放 80HTTP与 22SSH到0.0.0.0/0意味着任何 IP 都能 SSH 登录你的实例仅适用于测试环境。生产环境应将CidrIp收紧为办公网段或跳板机 IP并考虑只开放必要的端口。关于端口复用与幂等性AWS 安全组规则是幂等的重复添加完全相同的规则不会报错Duplicate场景会被服务端去重但删除不存在的规则会失败。删除安全组delete_security_group删除安全组使用delete_security_group(GroupId...)。需要注意如果该安全组仍与某个实例关联或被另一个安全组引用删除操作会失败——在 EC2-Classic 中返回InvalidGroup.InUse在 EC2-VPC 中返回DependencyViolation。因此删除前必须确保先解除关联。import boto3 from botocore.exceptions import ClientError # Create EC2 client ec2 boto3.client(ec2) # Delete security group try: response ec2.delete_security_group(GroupIdSECURITY_GROUP_ID) print(Security Group Deleted) except ClientError as e: print(e)要点说明GroupId为必填也可以使用GroupName仅 EC2-Classic 支持按名称删除VPC 场景必须使用 ID。删除成功时返回值为空字典打印Security Group Deleted即可确认。若安全组仍在被使用ClientError的response[Error][Code]为DependencyViolation或InvalidGroup.InUse可通过判断该错误码给用户更友好的提示。结合仓库源码理解底层实现EC2 客户端方法的来源上述四个方法均来自 Boto3 的底层客户端ClientAPI。在 boto3/init.py 中boto3.client(ec2)经由 boto3/session.py 的Session.client()构造底层依赖 Botocore 加载 EC2 服务的service-2.json模型由botocore包提供从而生成EC2客户端。这意味着方法的参数校验、请求签名、重试逻辑均由该服务模型驱动。安全组的资源级封装除了客户端方法Boto3 还为 EC2 提供了资源Resource级接口。在 boto3/data/ec2/2016-11-15/resources-1.json 以及更早的2014-10-01、2015-03-01、2015-04-15、2015-10-01、2016-04-01、2016-09-15等版本的数据文件中均定义了SecurityGroup资源类型。从源码结构可以推断资源接口会把describe_security_groups等操作封装为高层的ec2.SecurityGroup(id)对象及其方法如sg.create_tags(...)、sg.load()等方便以面向对象方式操作而本文示例采用客户端风格更贴近底层 API 语义。测试与验证仓库的功能测试 tests/functional/test_ec2.py 展示了如何用botocore.stub.Stubber对 EC2 客户端/资源做离线桩测试先stubber.add_response(...)注入期望响应再断言调用结果这为安全组相关代码的单元测试提供了可复用的模式——即使不连真实 AWS也能验证请求参数是否按预期发送。完整运行流程小结配置凭证与区域aws configure或手工编辑~/.aws/credentials、~/.aws/config。用ec2.describe_security_groups()确认现有安全组。用ec2.describe_vpcs()获取 VPC ID再ec2.create_security_group(...)创建安全组。用ec2.authorize_security_group_ingress(...)添加入站规则。不再需要时先解除实例关联再ec2.delete_security_group(...)删除。每一步都应以try/except ClientError包裹并打印错误便于定位权限、参数或依赖问题。更多 EC2 相关示例实例管理、密钥对、区域可用区、弹性 IP见 docs/source/guide/ec2-examples.rst。赞分享后端云原生【免费下载链接】boto3AWS SDK for Python (Boto3)项目地址https://gitcode.com/gh_mirrors/bo/boto3点击查看免费下载相关推荐AWS SDK for Python (Boto3) 操作 Amazon Aurora 数据库实战指南AWS SDK for Python Boto3 操作 Amazon Aurora 数据库实战指南 概述 Amazon Aurora 是 AWS 提供的完全托管示例工程教程后端使用 AWS SDK for C 管理 Amazon EC2 Auto Scaling 组与实例完整场景示例详解使用 AWS SDK for C 管理 Amazon EC2 Auto Scaling 组与实例完整场景示例详解 导读 本文基于 AWS 官方文档示例仓库示例工程教程后端使用 AWS SDK for C 操作 Amazon EC2代码示例全指南使用 AWS SDK for C 操作 Amazon EC2代码示例全指南 导读 本文基于 aws doc sdk examples 仓库中的 cpp/e示例工程教程后端上一篇Diablo Edit2暗黑破坏神II终极角色编辑器完全指南下一篇Diablo Edit2暗黑破坏神II角色编辑器完全指南 - 打造完美游戏体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表