2017-07-10 2 views
0

Ich versuche, die aktive TLS-Richtlinie auf einem klassischen Load Balancer (elb, nicht elbv2) und ich habe Probleme, herauszufinden, was falsch läuft hier zu bekommen:AWS Boto3 und Classic ELB

import boto3 
from botocore.exceptions import ClientError 

#Declare Constant 
EXPECTED_POLICY = 'ELBSecurityPolicy-TLS-1-1-2017-01' 
IAMID = '518031149234' 

def set_session(awsprofile, awsregion): 
    try: 
     session = boto3.Session(profile_name=awsprofile, region_name=awsregion) 
     return session 
    except ClientError as e: 
     print("Failed to run session setter for profile: {0} %s" % e).format(awsprofile) 

def assume_role_into_account(profileId, assumeId, sessionName, assetType, regionName): 
    try: 
     setSession = set_session(profileId, regionName) 
     stsSession = setSession.client('sts') 
     response = stsSession.assume_role(RoleArn=("arn:aws:iam::{0}:role/security").format(assumeId),RoleSessionName=sessionName) 
     credentials = response['Credentials'] 
     session = setSession.client(assetType, aws_access_key_id=credentials['AccessKeyId'],aws_secret_access_key=credentials['SecretAccessKey'],aws_session_token=credentials['SessionToken']) 
     return session 
    except ClientError as e: 
     print("AssumeRole exception for profile: {0} %s" % e).format(profileId) 

def main(): 

    try: 
     srev2 = assume_role_into_account('sre', IAMID,'Security-Audit-AssumeRole-Session2', 'elb', 'us-east-1') 
     print("AssumeRole into Account: {0} for Region: {1} .").format(IAMID, 'us-east-1') 

    elbs = srev2.describe_load_balancers() 

    for elb in elbs: 
     policy = session.describe_load_balancer_policies(LoadBalancerName=elb) 

    except ClientError as e: 
     print("AssumeRole: Cannot assumerole for id: {0}." % e).format(IAMID) 

if __name__ == '__main__': 
    main() 

So Wenn ich die Richtlinie beim Aufruf von describe_load_balancer_policies() zurücksende, gibt es keine Möglichkeit zu unterscheiden, welche Richtlinie ausgewählt ist.

Irgendwelche Hilfe?

TIA!

+0

Mit Boto3 Version 1.4.4 wenn es ankommt. – mumbles

Antwort

0

Ok, nach einem langen Gespräch mit der API und E LB Team Leute bei Amazon ... hier ist, was wir uns ausgedacht haben, beachten Sie, dass dies nur für klassische ELBs ist. Dadurch wird die ELB-Richtlinie, die Sie in der AWS-Webkonsole sehen, jedes Mal zurückgegeben.

verbrachte ich viel Zeit auf dieser und ich hoffe, dass es zugute kommt jemand anderes, das auch in dieser Zeit-saugen, nahezu vergeblichen Bemühung geschaut hat:

elbs = client.describe_load_balancers() 

for elb in elbs: 
    #Get Named Policy to pass to get the active policy. -1 denotes the last in the list. 
    policy_name = jmespath.search('ListenerDescriptions[].PolicyNames[] | [-1]', elb) 

    policy_description = client.describe_load_balancer_policies(LoadBalancerName=elb, PolicyNames=[policyname]) 
    console_policy = jmespath.search('PolicyDescriptions[?PolicyName==`{0}`] | [0].PolicyAttributeDescriptions[0].AttributeValue'.format(policyname), policy_description) 

    return console_policy 
0

Es ist schwer zu helfen, wenn Sie die zugehörige Fehlermeldung nicht einfügen.

Von einem schnellen Blick, ich denke, Sie lokale Variable session in assume_role_into_account definieren, die in main()

nicht zugegriffen werden kann, ob das Problem ist, können Sie es

def assume_role_into_account(profileId, assumeId, sessionName, assetType, regionName): 
    global session 
    .... 

Siehe ändern:

Python - Global, Local and nonlocal Variables

+0

Ich bekomme keine Fehlermeldung, ich bekomme identische Ergebnisse von zwei verschiedenen Richtlinien. Wie in, ich habe nichts zu filtern. Sogar die Position im Diktat variiert von Elb zu Elb. – mumbles