예제 #1
0
    async def _get_and_set_inline_policies(self, resource, iam_resource_type):
        client = AWSFacadeUtils.get_client('iam', self.session)
        list_policy_method = getattr(client,
                                     'list_' + iam_resource_type + '_policies')
        resource_name = resource[iam_resource_type.title() + 'Name']
        args = {iam_resource_type.title() + 'Name': resource_name}

        resource['inline_policies'] = {}
        policy_names = await run_concurrently(
            lambda: list_policy_method(**args)['PolicyNames'])
        if len(policy_names) == 0:
            resource['inline_policies_count'] = 0
            return

        get_policy_method = getattr(client,
                                    'get_' + iam_resource_type + '_policy')
        tasks = {
            asyncio.ensure_future(
                run_concurrently(lambda: get_policy_method(**dict(
                    args, PolicyName=policy_name))))
            for policy_name in policy_names
        }
        for task in asyncio.as_completed(tasks):
            policy = await task
            policy_name = policy['PolicyName']
            policy_id = get_non_provider_id(policy_name)
            policy_document = policy['PolicyDocument']

            resource['inline_policies'][policy_id] = {}
            resource['inline_policies'][policy_id][
                'PolicyDocument'] = self._normalize_statements(policy_document)
            resource['inline_policies'][policy_id]['name'] = policy_name
        resource['inline_policies_count'] = len(resource['inline_policies'])
예제 #2
0
    async def get_clusters(self, region):
        cluster_list = await AWSFacadeUtils.get_all_pages(
            'emr', region, self.session, 'list_clusters', 'Clusters')
        cluster_ids = [cluster['Id'] for cluster in cluster_list]
        client = AWSFacadeUtils.get_client('emr', self.session, region)

        return await map_concurrently(
            lambda cluster_id: run_concurrently(
                lambda: client.describe_cluster(ClusterId=cluster_id)[
                    'Cluster']), cluster_ids)
예제 #3
0
 async def _get_and_set_mount_target_security_groups(self, mount_target: {}, region: str):
     client = AWSFacadeUtils.get_client('efs', self.session, region)
     mount_target['SecurityGroups'] = run_concurrently(lambda: client.describe_mount_target_security_groups(
             MountTargetId=mount_target['MountTargetId'])['SecurityGroups'])