簡體   English   中英

Boto3訪問對象

[英]Boto3 accessing Objects

我是boto3的新手,正在嘗試訪問對象中的某些項目:

acl = ec2_client.describe_network_acls( Filters=[{'Name':'tag:demo','Values': ['true']}] )

這將從AWS返回正確標記的ACL,並將對象存儲在“ acl”中。 現在,我想從對象中取出一些物品。 我需要能夠從以下數據集中找到編號為100和105的入站和出站規則:

{
u 'NetworkAcls': [{
    u 'Associations': [],
    u 'NetworkAclId': 'acl-xxxxxxxx',
    u 'VpcId': 'vpc-xxxxxxx',
    u 'Tags': [{
        u 'Value': 'test-demo-dev',
        u 'Key': 'Name'
    }, {
        u 'Value': 'dev',
        u 'Key': 'env'
    }, {
        u 'Value': 'true',
        u 'Key': 'demo'
    }],
    u 'Entries': [{
        u 'RuleNumber': 100,
        u 'Protocol': '6',
        u 'PortRange': {
            u 'To': 443,
            u 'From': 443
        },
        u 'Egress': True,
        u 'RuleAction': 'allow',
        u 'CidrBlock': '34.x.x.x/32'
    }, {
        u 'RuleNumber': 105,
        u 'Protocol': '6',
        u 'PortRange': {
            u 'To': 443,
            u 'From': 443
        },
        u 'Egress': True,
        u 'RuleAction': 'allow',
        u 'CidrBlock': '54.x.x.x/32'
    }, {
        u 'RuleNumber': 110,
        u 'Protocol': '6',
        u 'PortRange': {
            u 'To': 65535,
            u 'From': 1024
        },
        u 'Egress': True,
        u 'RuleAction': 'allow',
        u 'CidrBlock': '10.x.x.x/x'
    }, {
        u 'RuleNumber': 115,
        u 'Protocol': '6',
        u 'PortRange': {
            u 'To': 65535,
            u 'From': 1024
        },
        u 'Egress': True,
        u 'RuleAction': 'allow',
        u 'CidrBlock': '10.x.x.x/x'
    }, {
        u 'RuleNumber': 120,
        u 'Protocol': '6',
        u 'PortRange': {
            u 'To': 65535,
            u 'From': 1024
        },
        u 'Egress': True,
        u 'RuleAction': 'allow',
        u 'CidrBlock': '10.x.x.x/x'
    }, {
        u 'RuleNumber': 32767,
        u 'Protocol': '-1',
        u 'Egress': True,
        u 'CidrBlock': '0.0.0.0/0',
        u 'RuleAction': 'deny'
    }, {
        u 'RuleNumber': 100,
        u 'Protocol': '6',
        u 'PortRange': {
            u 'To': 65535,
            u 'From': 1024
        },
        u 'Egress': False,
        u 'RuleAction': 'allow',
        u 'CidrBlock': '34.x.x.x/32'
    }, {
        u 'RuleNumber': 105,
        u 'Protocol': '6',
        u 'PortRange': {
            u 'To': 65535,
            u 'From': 1024
        },
        u 'Egress': False,
        u 'RuleAction': 'allow',
        u 'CidrBlock': '54.x.x.x/32'
    }, {
        u 'RuleNumber': 110,
        u 'Protocol': '6',
        u 'PortRange': {
            u 'To': 443,
            u 'From': 443
        },
        u 'Egress': False,
        u 'RuleAction': 'allow',
        u 'CidrBlock': '10.x.x.x/x'
    }, {
        u 'RuleNumber': 115,
        u 'Protocol': '6',
        u 'PortRange': {
            u 'To': 443,
            u 'From': 443
        },
        u 'Egress': False,
        u 'RuleAction': 'allow',
        u 'CidrBlock': '10.x.x.x/x'
    }, {
        u 'RuleNumber': 120,
        u 'Protocol': '6',
        u 'PortRange': {
            u 'To': 443,
            u 'From': 443
        },
        u 'Egress': False,
        u 'RuleAction': 'allow',
        u 'CidrBlock': '10.x.x.x/x'
    }, {
        u 'RuleNumber': 32767,
        u 'Protocol': '-1',
        u 'Egress': False,
        u 'CidrBlock': '0.0.0.0/0',
        u 'RuleAction': 'deny'
    }],
    u 'IsDefault': False
}], 'ResponseMetadata': {
    'RetryAttempts': 0,
    'HTTPStatusCode': 200,
    'RequestId': '37258db0-6b9e-4a20-96f3-dc3bc5214b52',
    'HTTPHeaders': {
        'transfer-encoding': 'chunked',
        'vary': 'Accept-Encoding',
        'server': 'AmazonEC2',
        'content-type': 'text/xml;charset=UTF-8',
        'date': 'Tue, 20 Jun 2017 11:22:47 GMT'
    }
}

}

特別是,我希望能夠找到入站和出站規則100和105的'CidrBlock'值。

有人可以幫忙嗎? 我確信一旦我第一次看到它可以工作,就可以繼續適用於其他場景,但是似乎無法第一次繞開它。

我想我需要循環遍歷對象的某些部分(條目),如果“ RuleNumber”為100或105,並且我需要分別存儲入口和出口,但從何處開始.....

您提到的數據包含unicode字符串鍵,並且您在提問時不小心添加了額外的空間。

例如-

 InCorrect - u 'NetworkAcls'
 Correct - u'NetworkAcls'

為了從您上面提到的數據中獲取CIDR規則100和105塊,您可以這樣獲得-

   NetworkAcls = acl['NetworkAcls']
   for netacl in NetworkAcls:
      entries = netacl['Entries']
      for entry in entries:
         if entry.get('RuleNumber') == 100 or entry.get('RuleNumber') == 105 :
            print(entry.get('CidrBlock' ,None))

輸出量

 34.x.x.x/32
 54.x.x.x/32
 34.x.x.x/32
 54.x.x.x/32

那是您要找的東西嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM