通过安全组授权入网经典网络的安全组

简介: 安全组入网规则授权说明 如果有两个用户,用户A有一个安全组A1,另外一个安全组A2, 另外一个用户B有一个安全组B1,安全组A2和安全组B1的云服务器想要实现对安全组A中的云服务器进行网络访问,需要进行下面的设置。

安全组入网规则授权说明

如果有两个用户,用户A有一个安全组A1,另外一个安全组A2, 另外一个用户B有一个安全组B1,安全组A2和安全组B1的云服务器想要实现对安全组A中的云服务器进行网络访问,需要进行下面的设置。

访问经典网络user-A-sg-1安全组内资源的入网规则设置如下表所示,您可以通过控制台直接操作也可以调用OpenApi来实现.

设置 同一用户的安全组 user-A-sg-1的服务器 同一用户的安全组 user-A-sg-2的服务器 另一个用户B的安全组 user-B-sg-1 服务器
入方向访问 互通 不通 不通
入方向设置 不需要设置 1. 在user-A-sg-1的安全组内网入规则加一条规则, ["SourceGroupId": "user-A-sg-2", "IpProtocol": "tcp", "PortRange": "80/80"] 2. 在user-A-sg-1的安全组内网入规则加一条规则, ["SourceCidrIp": "IP地址/32", "IpProtocol": "tcp", "PortRange": "80/80"] 1. 在user-A-sg-1的安全组内网入规则加一条规则, ["SourceGroupId": "user-B-sg-1", "SourceGroupOwnerId": "user-B", "IpProtocol": "tcp", "PortRange": "80/80"] 2. 在user-A-sg-1的安全组内网入规则加一条规则, ["SourceCidrIp": "IP地址/32", "IpProtocol": "tcp", "PortRange": "80/80"]

安全组设置内网互通的方法

操作指引 参见 安全组设置内网互通的方法

将当前账号下的经典网络安全组通过安全组授权入网

如果之前已经在经典网络上设置了允许过大的入网网段访问,例如 0.0.0.0/0 或者 10.0.0.0/8。如果你没有授权其他的用户访问当前安全组内资源的计划,你可以选择添加其他的安全组作为入网的授权规则,逐个添加完其他的安全组之后测试您的应用,逐个删除之前过大的CIDR网段。

下面提供了一个脚本,它将会根据您的入参安全组ID,将本region内其他的有云服务器的安全组作为入网规则加入您的安全组之中。目前这个版本有如下限制, 附件中包含所有的代码。

  • 不支持VPC类型的安全组
  • 不支持已添加和即将添加的规则超过100条的场景
  • 您可以选择ignore一些安全组,不加入
  • 只支持单个region 50个安全组的场景
#  coding=utf-8

# if the python sdk is not install using 'sudo pip install aliyun-python-sdk-ecs'
# if the python sdk is install using 'sudo pip install --upgrade aliyun-python-sdk-ecs'
# make sure the sdk version is 2.1.2, you can use command 'pip show aliyun-python-sdk-ecs' to check

import json
import logging

from aliyunsdkcore import client
from aliyunsdkecs.request.v20140526.AuthorizeSecurityGroupRequest import \
    AuthorizeSecurityGroupRequest
from aliyunsdkecs.request.v20140526.DescribeSecurityGroupAttributeRequest import \
    DescribeSecurityGroupAttributeRequest
from aliyunsdkecs.request.v20140526.DescribeInstancesRequest import DescribeInstancesRequest


# configuration the log output formatter, if you want to save the output to file,
# append ",filename='ecs_invoke.log'" after datefmt.
from aliyunsdkecs.request.v20140526.DescribeSecurityGroupsRequest import \
    DescribeSecurityGroupsRequest

logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S')

clt = client.AcsClient('Your Access Key Id', 'Your Access Key Secrect', 'cn-beijing')

TOTAL_COUNT = 'TotalCount'
# 需要开放的端口范围 协议为tcp、udp时默认端口号,取值范围为1~65535;例如“1/200”意思是端口号范围为1~200,若输入值为:“200/1”接口调用将报错。
# 协议为icmp时端口号范围值为-1/-1;
# gre协议时端口号范围值为-1/-1;
# 协议为all时端口号范围值为-1/-1
PORT_RANGE = '-1/-1'

# IP协议,取值:tcp | udp | icmp | gre | all;
# all表示同时支持四种协议
IP_PROTOCOL = 'all'

# 网络协议,这里只设置经典网络的安全组的内网规则
NIC_TYPE = 'intranet'

# 接受协议
POLICY = 'accept'

# 优先级 1-100, 1最高 100最容易被覆盖
PRIORITY = 10

# 经典网络的ID不需要添加到规则里面的接受规则里面的
SECURITY_GROUP_IDS_IGNORE_ADD = ['sg-ignore-1', 'sg-ignore-2', 'sg-ignore-3']

# 这个工具用来扫描您的经典网络安全组,并且将同一个Region下其它有ECS的经典网络的安全组ID添加到您的内网入规则中,
# 以实现您的一个region内的所有的ECS内网互通。目前这个脚本只支持单region下50个安全组。
# dry run 仅仅计算不执行
def add_security_group_rule(sg_id, priority=10, dry_run=True):
    request = DescribeSecurityGroupsRequest()
    request.set_SecurityGroupId(sg_id)
    response = _send_request(request)
    security_groups = response.get('SecurityGroups').get('SecurityGroup')
    if len(security_groups) == 0:
        logging.error("Current input security group id %s can not be found in current region",
                      sg_id)
    else:
        sg_detail = security_groups[0]
        if sg_detail is not None:
            vpc_id = sg_detail.get('VpcId')
            if vpc_id != '':
                logging.error(
                    "The tools is only for classical security group now, not support vpc security group %s.",
                    sg_id)
            else:
                current_permissions = query_sg_rules_for_sg(sg_id)
                logging.info(current_permissions)
                SECURITY_GROUP_IDS_IGNORE_ADD.append(sg_id)
                sg_ids = query_all_classical_security_group_include_instance(
                    SECURITY_GROUP_IDS_IGNORE_ADD)
                if len(current_permissions) + len(sg_ids) > 100:
                    logging.error(
                        "Current security group  %s already with too many rules, the max rules is 100 for all the ruels.",
                        sg_id)
                logging.info("it will add %s total in %d rules for security group %s.", sg_ids,
                             len(sg_ids), sg_id)
                if dry_run == False:
                    for sg_id_in in sg_ids:
                        execute_add_classical_intranat_ingress(sg_id, sg_id_in, priority, dry_run)


# 为经典网络的云服务器添加内网的入规则
def execute_add_classical_intranat_ingress(source_sg_id, in_sg_id, priority, dry_run):
    request = AuthorizeSecurityGroupRequest()
    request.set_SecurityGroupId(source_sg_id)
    request.set_IpProtocol(IP_PROTOCOL)
    request.set_Policy(POLICY)
    request.set_NicType(NIC_TYPE)
    request.set_Priority(priority)
    request.set_PortRange(PORT_RANGE)
    request.set_SourceGroupId(in_sg_id)
    if dry_run:
        logging.info("add sg id %s as the in security group id %s", in_sg_id, source_sg_id)
    else:
        response = _send_request(request)
        return response


# 查询当前的安全组下有多少条规则
def query_sg_rules_for_sg(security_group_id):
    request = DescribeSecurityGroupAttributeRequest()
    request.set_SecurityGroupId(security_group_id)
    response = _send_request(request)
    permissions = response.get('Permissions').get('Permission')
    total_count = len(permissions)
    logging.info("Current security group %s with rule %d", security_group_id, total_count)
    return permissions


# 过滤那些安全组有云服务器实例
def query_all_classical_security_group_include_instance(exclude_security_group_ids=[]):
    request = DescribeSecurityGroupsRequest()
    request.set_PageSize(50)
    response = _send_request(request)
    with_instance_sg_ids = []
    total_count = response.get(TOTAL_COUNT)
    if total_count > 100:
        logging.warning("you have more than 100 security group in current region....")
    security_groups = response.get('SecurityGroups').get('SecurityGroup')
    for security_group in security_groups:
        vpc_id = security_group.get('VpcId')
        sg_id = security_group.get('SecurityGroupId')
        if vpc_id == '':
            request = DescribeInstancesRequest()
            request.set_PageSize(1)
            request.set_SecurityGroupId(sg_id)
            list_instance_response = _send_request(request)
            sg_with_instance_count = list_instance_response.get(TOTAL_COUNT)
            if sg_with_instance_count > 0:
                with_instance_sg_ids.append(sg_id)
        else:
            logging.info("security group %s is vpc ", sg_id)
    return list(set(with_instance_sg_ids).difference(set(exclude_security_group_ids)))


# send open api request
def _send_request(request):
    request.set_accept_format('json')
    try:
        response_str = clt.do_action(request)
        logging.info(response_str)
        response_detail = json.loads(response_str)
        return response_detail
    except Exception as e:
        logging.error(e)


if __name__ == '__main__':
    logging.info("Hello!")
    # 实际运行中,请选择您的安全组Id,并将Dry_Run设置为False
    # 如果为VPC的安全组就会报错。
    add_security_group_rule('sg-add-rules', PRIORITY, True)
相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
存储 安全 算法
网络安全与信息安全:构建安全数字生活的基石
【10月更文挑战第5天】 在数字化时代,网络安全与信息安全已成为维护个人隐私、企业机密和国家安全的重要防线。本文旨在探讨网络安全漏洞的形成与防范、加密技术的应用及其重要性,以及提升公众安全意识的必要性。通过深入浅出的方式,帮助读者理解网络安全的核心要素,并强调每个人都是网络安全生态中不可或缺的一环。
37 1
|
11天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务中的安全挑战与对策
【10月更文挑战第6天】在数字化转型的浪潮中,云计算已成为企业IT架构的核心。然而,随着其应用的广泛性,网络安全问题也日益凸显。本文将深入探讨云计算环境下的安全挑战,并提出相应的安全策略和最佳实践,以帮助组织构建更加安全的云环境。我们将从云服务的基础知识出发,逐步深入到网络安全和信息安全的关键领域,最后通过代码示例展示如何实施这些安全措施。
|
19天前
|
存储 安全 网络安全
云计算与网络安全:构建安全的数字基石## 一、
本文探讨了云计算与网络安全之间的紧密联系,强调在享受云服务带来的便利与效率的同时,必须重视并加强信息安全管理。通过分析云服务的基本概念、特点及面临的主要安全风险,提出了一系列增强网络安全的策略与措施,旨在为企业和个人用户提供一个更加安全、可靠的云计算环境。 ## 二、
|
17天前
|
安全 网络安全 区块链
网络安全与信息安全:构建数字世界的防线在当今数字化时代,网络安全已成为维护个人隐私、企业机密和国家安全的重要屏障。随着网络攻击手段的不断升级,从社交工程到先进的持续性威胁(APT),我们必须采取更加严密的防护措施。本文将深入探讨网络安全漏洞的形成原因、加密技术的应用以及提高公众安全意识的重要性,旨在为读者提供一个全面的网络安全知识框架。
在这个数字信息日益膨胀的时代,网络安全问题成为了每一个网民不可忽视的重大议题。从个人信息泄露到企业数据被盗,再到国家安全受到威胁,网络安全漏洞如同隐藏在暗处的“黑洞”,时刻准备吞噬掉我们的信息安全。而加密技术作为守护网络安全的重要工具之一,其重要性不言而喻。同时,提高公众的安全意识,也是防范网络风险的关键所在。本文将从网络安全漏洞的定义及成因出发,解析当前主流的加密技术,并强调提升安全意识的必要性,为读者提供一份详尽的网络安全指南。
|
21天前
|
安全 物联网 物联网安全
量子通信网络:安全信息交换的新平台
【10月更文挑战第6天】量子通信网络作为一种全新的安全信息交换平台,正逐步展现出其独特的优势和巨大的潜力。通过深入研究和不断探索,我们有理由相信,量子通信网络将成为未来信息安全领域的重要支柱,为构建更加安全、高效、可靠的信息社会贡献力量。让我们共同期待量子通信网络在未来的广泛应用和美好前景!
|
8天前
|
存储 安全 5G
|
13天前
|
安全 算法 网络安全
网络安全与信息安全:守护数字世界的坚盾在这个高度数字化的时代,网络安全和信息安全已成为全球关注的焦点。无论是个人隐私还是企业数据,都面临着前所未有的风险和挑战。本文将深入探讨网络安全漏洞、加密技术以及安全意识的重要性,旨在为读者提供实用的知识,帮助构建更加安全的网络环境。
【10月更文挑战第4天】 在数字化浪潮中,网络安全与信息安全成为不可忽视的议题。本文通过分析网络安全漏洞的类型与成因,探讨加密技术的原理与应用,并强调提升安全意识的必要性,为读者提供一套全面的网络安全知识框架。旨在帮助个人和企业更好地应对网络威胁,保护数字资产安全。
104 65
|
10天前
|
存储 安全 网络安全
云端盾牌:云计算时代的网络安全守护在数字化浪潮中,云计算以其高效、灵活的特性成为企业转型的加速器。然而,伴随其迅猛发展,网络安全问题亦如影随形,成为悬在每个组织头顶的达摩克利斯之剑。本文旨在探讨云计算服务中的网络安全挑战,分析信息安全的重要性,并提出相应对策,以期为企业构建一道坚实的云端防护网。
在当今这个数据驱动的时代,云计算已成为推动创新与效率的关键力量。它允许用户随时随地访问强大的计算资源,降低了企业的运营成本,加速了产品上市时间。但随之而来的网络威胁也日益猖獗,尤其是对于依赖云服务的企业而言,数据泄露、身份盗用等安全事件频发,不仅造成经济损失,更严重损害品牌信誉。本文深入剖析云计算环境中的安全风险,强调建立健全的信息安全管理机制的重要性,并分享一系列有效策略,旨在帮助企业和个人用户在享受云服务带来的便利的同时,也能构筑起强有力的网络防线。
|
11天前
|
存储 安全 网络安全
云计算与网络安全的融合之路:探索云服务的安全边界
【10月更文挑战第6天】随着云计算技术的飞速发展,越来越多的企业和个人选择将数据和应用迁移到云端。然而,随之而来的网络安全问题也日益凸显。本文将从云计算的基础概念入手,探讨云服务中的网络安全挑战,并提出相应的信息安全策略。文章旨在为读者提供一个关于如何在享受云计算便捷的同时,保障数据安全和隐私保护的全面视角。
|
14天前
|
安全 网络安全 数据安全/隐私保护
智能家居安全:如何保护你的家庭免受网络威胁
在这篇技术性文章中,我们将深入探讨智能家居设备的安全性问题。随着越来越多的家庭采用智能技术,确保这些设备免受网络攻击变得至关重要。文章将涵盖常见的安全风险、预防措施以及如何应对潜在的网络威胁,以帮助读者保护自己的家庭网络安全。