Не могу отозвать вход с boto3 в диапазоне TCP - PullRequest
0 голосов
/ 29 февраля 2020

Это мой фрагмент кода, который я использую:

import boto3

ip_check_list = [
  "1.2.3.4/32",
  "5.6.7.8/32",

]

for region in ['us-east-1']:
  client = boto3.client('ec2',region_name=region)
  paginator = client.get_paginator('describe_security_groups')
  page_iterator = paginator.paginate()
  for page in page_iterator:
    for sg in page['SecurityGroups']:
      for lb in sg['IpPermissions']:
        for ip in lb['IpRanges']:
          from_port = lb.get('FromPort')
          to_port = lb.get('ToPort')
          ip_proto=lb['IpProtocol']
          if sg['GroupId'] == 'sg-12345' and ip['CidrIp'] in ip_check_list:
            try:
              if from_port:
                response = client.revoke_security_group_ingress (
                  GroupId=sg['GroupId'],
                  IpPermissions=[
                    {
                      'FromPort': from_port,
                      'ToPort': to_port,
                      'IpProtocol': ip_proto,
                      'IpRanges': [
                        {
                          'CidrIp': ip['CidrIp']
                        }
                      ]
                    }
                  ]
                )
              else:
                response = client.revoke_security_group_ingress (
                  GroupId=sg['GroupId'],
                  IpPermissions=[
                    {
                      'IpProtocol': ip_proto,
                      'IpRanges': [
                        {
                          'CidrIp': ip['CidrIp']
                        }
                      ]
                    }
                  ]
                )
            except Exception as e:
              print e
              print sg['GroupId']

Однако я получаю следующую ошибку:

An error occurred (InvalidParameterValue) when calling the RevokeSecurityGroupIngress operation: Invalid value 'Must specify both from and to ports with TCP/UDP.' for portRange.

Правило SG, о котором идет речь:

           "IpPermissions": [
                {
                    "PrefixListIds": [],
                    "FromPort": 0,
                    "IpRanges": [
                        {
                            "CidrIp": "1.2.3.4/32"
                        }
                    ],
                    "ToPort": 65535,
                    "IpProtocol": "tcp",
                    "UserIdGroupPairs": [],
                    "Ipv6Ranges": []
                }
            ],

* РЕДАКТИРОВАТЬ *: обнаружил мою ошибку, когда я проверял «если из_порта», я не принимал действительное значение 0, поэтому блок случайно пропускался.

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Boto3 docs скажем :

Для протоколов TCP и UDP вы должны также указать порт назначения или диапазон портов.

Таким образом, вам нужно предоставить некоторые значения порта для второго revoke_security_group_ingress. Может быть, некоторые значения по умолчанию или весь диапазон портов.

0 голосов
/ 03 марта 2020

Обнаружил мою ошибку, когда я проверял «if from_port», я не принимал действительное значение 0, поэтому блок случайно пропускался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...