2017-07-10 3 views
0

J'essaie d'obtenir la politique active TLS sur un équilibreur de charge classique (elb, non elbv2) et je vais avoir du mal à identifier ce qui se passe mal ici:AWS Boto3 et 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() 

Alors Lorsque je renvoie la stratégie lors de l'appel describe_load_balancer_policies(), il n'existe aucun moyen de distinguer quelle stratégie est sélectionnée.

Une aide?

TIA!

+0

En utilisant la version 1.4.4 Boto3 si cette matière. – mumbles

Répondre

0

Ok, après une longue discussion avec l'API et E Les membres de l'équipe LB chez Amazon ... voici ce que nous avons trouvé, notez que c'est seulement pour les ELB classiques. Cela retournera en effet la stratégie ELB que vous voyez dans la console Web AWS, à chaque fois.

J'ai passé beaucoup de temps à ce sujet et je l'espère, il bénéficie quelqu'un d'autre qui a aussi examiné cette fois-téter, effort quasi inutile:

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

Il est difficile de vous aider si vous ne collez pas le message d'erreur associé.

Du point de vue rapide, je suppose que vous définissez la variable locale session dans assume_role_into_account qui ne peut être consulté à main()

Si tel est le problème, vous pouvez modifier à

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

Reportez-vous:

Python - Global, Local and nonlocal Variables

+0

Je ne reçois pas un message d'erreur, je reçois des résultats identiques de deux politiques différentes. Comme dans, je n'ai rien à filtrer. Même position dans la dict varie d'elb à elb. – mumbles