Получить саб для пользователя Cognito в Python коде - PullRequest
0 голосов
/ 07 февраля 2020

Я использую шаблон CloudFormation для автоматической пометки ресурсов в AWS, скрипт здесь

Ниже приведена лямбда-функция, которую я использую для пометки ресурсов, я новичок в AWS и я не имею представления о Python.

Текущий он помечается как

Владелец ------------- CognitoIdentityCredentials // он должен быть заменен на пользователя уникальный идентификатор, т. е. sub PrincipalId -------: CognitoIdentityCredentials

 from __future__ import print_function
 import json
 import boto3
 import logging
 import time
 import datetime

 logger = logging.getLogger()
 logger.setLevel(logging.INFO)

  def lambda_handler(event, context):
#logger.info('Event: ' + str(event))
#print('Received event: ' + json.dumps(event, indent=2))

ids = []

try:
    region = event['region']
    detail = event['detail']
    eventname = detail['eventName']
    arn = detail['userIdentity']['arn']
    principal = detail['userIdentity']['principalId']
    userType = detail['userIdentity']['type']

    if userType == 'IAMUser':
        user = detail['userIdentity']['userName'] //here i want replace with sub

    else:
        user = principal.split(':')[1]


    logger.info('principalId: ' + str(principal))
    logger.info('region: ' + str(region))
    logger.info('eventName: ' + str(eventname))
    logger.info('detail: ' + str(detail))

    if not detail['responseElements']:
        logger.warning('Not responseElements found')
        if detail['errorCode']:
            logger.error('errorCode: ' + detail['errorCode'])
        if detail['errorMessage']:
            logger.error('errorMessage: ' + detail['errorMessage'])
        return False

    ec2 = boto3.resource('ec2')

    if eventname == 'CreateVolume':
        ids.append(detail['responseElements']['volumeId'])
        logger.info(ids)

    elif eventname == 'RunInstances':
        items = detail['responseElements']['instancesSet']['items']
        for item in items:
            ids.append(item['instanceId'])
        logger.info(ids)
        logger.info('number of instances: ' + str(len(ids)))

        base = ec2.instances.filter(InstanceIds=ids)

        #loop through the instances
        for instance in base:
            for vol in instance.volumes.all():
                ids.append(vol.id)
            for eni in instance.network_interfaces:
                ids.append(eni.id)

    elif eventname == 'CreateImage':
        ids.append(detail['responseElements']['imageId'])
        logger.info(ids)

    elif eventname == 'CreateSnapshot':
        ids.append(detail['responseElements']['snapshotId'])
        logger.info(ids)
    else:
        logger.warning('Not supported action')

    if ids:
        for resourceid in ids:
            print('Tagging resource ' + resourceid)
        ec2.create_tags(Resources=ids, Tags=[{'Key': 'Owner', 'Value': user}, {'Key': 'PrincipalId', 'Value': principal}])

    logger.info(' Remaining time (ms): ' + str(context.get_remaining_time_in_millis()) + '\n')
    return True
except Exception as e:
    logger.error('Something went wrong: ' + str(e))
    return False

Я хочу вместо имени пользователя, я хочу подчинить пользователя Cognito Sub. Может кто-нибудь предложить мне, как это сделать? Мой Репо для справки

...