Automatically updating AWS WAF Rule in real time using Amazon EventBridge

Post Syndicated from Adam Cerini original https://aws.amazon.com/blogs/security/automatically-updating-aws-waf-rule-in-real-time-using-amazon-eventbridge/

In this post, I demonstrate a method for collecting and sharing threat intelligence between Amazon Web Services (AWS) accounts by using AWS WAF, Amazon Kinesis Data Analytics, and Amazon EventBridge. AWS WAF helps protect against common web exploits and gives you control over which traffic can reach your application.

Attempted exploitation blocked by AWS WAF provides a data source on potential attackers that can be shared proactively across AWS accounts. This solution can be an effective way to block traffic known to be malicious across accounts and public endpoints. AWS WAF managed rules provide an easy way to mitigate and record the details of common web exploit attempts. This solution will use the Admin protection managed rule for demonstration purposes.

In this post you will see references to the Sender account and the Receiver account. There is only one receiver in this example, but the receiving process can be duplicated multiple times across multiple accounts. This post walks through how to set up the solution. You’ll notice there is also an AWS CloudFormation template that makes it easy to test the solution in your own AWS account. The diagram in figure 1 illustrates how this architecture fits together at a high level.
 

Figure 1: Architecture diagram showing the activity flow of traffic blocked on the Sender AWS WAF

Figure 1: Architecture diagram showing the activity flow of traffic blocked on the Sender AWS WAF

Prerequisites

You should know how to do the following tasks:

Extracting threat intelligence

AWS WAF logs using a Kinesis Data Firehose delivery stream. This allows you to not only log to a destination S3 bucket, but also act on the stream in real time using a Kinesis Data Analytics Application. The following SQL code demonstrates how to extract any unique IP addresses that have been blocked by AWS WAF. While this example returns all blocked IPs, more complex SQL could be used for a more granular result. The full list of log fields is included in the documentation.


CREATE OR REPLACE STREAM "wafstream" (
 "clientIp" VARCHAR(16),
 "action" VARCHAR(8),
 "time_stamp" TIMESTAMP
 );

CREATE OR REPLACE PUMP "WAFPUMP" as
INSERT INTO "wafstream" (
"clientIp",
"action",
"time_stamp"
) 

Select STREAM DISTINCT "clientIp", "action", FLOOR(WAF_001.ROWTIME TO MINUTE) as "time_stamp"
FROM "WAF_001"
WHERE "action" = 'BLOCK';

Proactively blocking unwanted traffic

After extracting the IP addresses involved in the abnormal traffic, you will want to proactively block those IPs on your other web facing resources. You can accomplish this in a scalable way using Amazon EventBridge. After the Kinesis Application extracts the IP address, it will use an AWS Lambda function to call PutEvents on an EventBridge event bus. This process will create the event pattern, which is used to determine when to trigger an event bus rule. This example uses a simple pattern, which acts on any event with a source of “custom.waflogs” as shown in Figure 2. A more complex pattern could be used to for finer grain control of when a rule triggers.
 

Figure 2: EventBridge Rule creation

Figure 2: EventBridge Rule creation

Once the event reaches the event bus, the rule will forward the event to an event bus in “Receiver” account, where a second rule will trigger to call a Lambda function to update a WAF IPSet. A Web ACL rule is used to block all traffic sourcing from an IP address contained in the IPSet.

Test the solution by using AWS CloudFormation

Now that you’ve walked through the design of this solution, you can follow these instructions to test it in your own AWS account by using CloudFormation stacks.

To deploy using CloudFormation

  1. Launch the stack to provision resources in the Receiver account.
  2. Provide the account ID of the Sender account. This will correctly configure the permissions for the EventBridge event bus.
  3. Wait for the stack to complete, and then capture the event bus ARN from the output tab.

    This stack creates the following resources:

    • An AWS WAF v2 web ACL
    • An IPSet which will be used to contain the IP addresses to block
    • An AWS WAF rule that will block IP addresses contained in the IPSet
    • A Lambda function to update the IPSet
    • An IAM policy and execution role for the Lambda function
    • An event bus
    • An event bus rule that will trigger the Lambda function
  4. Switch to the Sender account. This should be the account you used in step 2 of this procedure.
  5. Provide the ARN of the event bus that was captured in step 3. This stack will provision the following resources in your account:
    • A virtual private cloud (VPC) with public and private subnets
    • Route tables for the VPC resources
    • An Application Load Balancer (ALB) with a fixed response rule
    • A security group that allows ingress traffic on port 80 to the ALB
    • A web ACL with the AWS Managed Rule for Admin Protection enabled
    • An S3 bucket for AWS WAF logs
    • A Kinesis Data Firehose delivery stream
    • A Kinesis Data Analytics application
    • An EventBridge event bus
    • An event bus rule
    • A Lambda function to send information to the Receiver account event bus
    • A custom CloudFormation resource which enables WAF logging and starts the Kinesis Application
    • An IAM policy and execution role that allows a Lamba function to put events into the event bus
    • An IAM policy and role to allow the custom CloudFormation resource to enable WAF logging and start the Kinesis Application
    • An IAM policy and role that allows the Kinesis Firehose to put logs into S3
    • An IAM policy that allows the WAF Web ACL to put records into the Firehose
    • An IAM policy and role that allows the Kinesis Application to invoke a Lambda function and log to CloudWatch
    • An IAM policy and role that allows the “Sender” account to put events in the “Receiver” event bus

After the CloudFormation stack completes, you should test your environment. To test the solution, check the output tab for the DNS name of the Application Load Balancer and run the following command:

curl ALBDNSname/admin

You should be able to check the Receiver account’s AWS WAF IPSet named WAFBlockIPset and find your IP.

Conclusion

This example is intentionally simple to clearly demonstrate how each component works. You can take these principles and apply them to your own environment. Layering the Amazon managed rules with your own custom rules is the best way to get started with AWS WAF. This example shows how you can use automation to update your WAF rules without needing to rely on humans. A more complete solution would source log data from each Web ACL and update an active IP Set in each account to protect all resources. As seen in Figure 3, a more complete implementation would send all logs in a region to a centralized Kinesis Firehose to be processed by the Kinesis Analytics Application, EventBridge would be used to update a local IPset as well as forward the event to other accounts event buses for processing.
 

Figure 3: Updating across accounts

Figure 3: Updating across accounts

You can also add additional targets to the event bus to do things such as send to a Simple Notification Service topic for notifications, or run additional automation. To learn more about AWS WAF web ACLs, visit the AWS WAF Developer Guide. Using Amazon EventBridge opens up the possibility to send events to partner integrations. Customers or APN Partners like PagerDuty or Zendesk can enrich this solution by taking actions such as automatically opening a ticket or starting an incident. To learn more about the power of Amazon EventBridge, see the EventBridge User Guide.

If you have feedback about this post, submit comments in the Comments section below. If you have questions about this post, start a new thread on the AWS WAF forum or contact AWS Support.

Want more AWS Security how-to content, news, and feature announcements? Follow us on Twitter.

Author

Adam Cerini

Adam is a Senior Solutions Architect with Amazon Web Services. He focuses on helping Public Sector customers architect scalable, secure, and cost effective systems. Adam holds 5 AWS certifications including AWS Certified Solutions Architect – Professional and AWS Certified Security – Specialist.

EFA-enabled C5n instances to scale Simcenter STAR-CCM+

Post Syndicated from Ben Peven original https://aws.amazon.com/blogs/compute/efa-enabled-c5n-instances-to-scale-simcenter-star-ccm/

This post was contributed by Dnyanesh Digraskar, Senior Partner SA, High Performance Computing; Linda Hedges, Principal SA, High Performance Computing

In this blog, we define and demonstrate the scalability metrics for a typical real-world application using Computational Fluid Dynamics (CFD) software from Siemens, Simcenter STAR-CCM+, running on a High Performance Computing (HPC) cluster on Amazon Web Services (AWS). This scenario demonstrates the scaling of an external aerodynamics CFD case with 97 million cells to over 4,000 cores of Amazon EC2 C5n.18xlarge instances using the Simcenter STAR-CCM+ software. We also discuss the effects of scaling on efficiency, simulation turn-around time, and total simulation costs. TLG Aerospace, a Seattle-based aerospace engineering services company, contributed the data used in this blog. For a detailed case study describing TLG Aerospace’s experience and the results they achieved, see the TLG Aerospace case study.

For HPC workloads that use multiple nodes, the cluster setup including the network is at the heart of scalability concerns. Some of the most common concerns from CFD or HPC engineers are “how well will my application scale on AWS?”, “how do I optimize the associated costs for best performance of my application on AWS?”, “what are the best practices in setting up an HPC cluster on AWS to reduce the simulation turn-around time and maintain high efficiency?” This post aims to answer these concerns by defining and explaining important scalability-related parameters by illustrating the results from the CFD case. For detailed HPC-specific information, see visit the High Performance Computing page and download the CFD whitepaper, Computational Fluid Dynamics on AWS.

CFD scaling on AWS

Scale-up

HPC applications, such as CFD, depend heavily on the applications’ ability to scale compute tasks efficiently in parallel across multiple compute resources. We often evaluate parallel performance by determining an application’s scale-up. Scale-up – a function of the number of processors used – is the time to complete a run on one processor, divided by the time to complete the same run on the number of processors used for the parallel run.

Scale-up formula

In addition to characterizing the scale-up of an application, scalability can be further characterized as “strong” or “weak”. Strong scaling offers a traditional view of application scaling, where a problem size is fixed and spread over an increasing number of processors. As more processors are added to the calculation, good strong scaling means that the time to complete the calculation decreases proportionally with increasing processor count. In comparison, weak scaling does not fix the problem size used in the evaluation, but purposely increases the problem size as the number of processors also increases. An application demonstrates good weak scaling when the time to complete the calculation remains constant as the ratio of compute effort to the number of processors is held constant. Weak scaling offers insight into how an application behaves with varying case size.

Figure 1, the following image, shows scale-up as a function of increasing processor count for the Simcenter STAR-CCM+ case data provided by TLG Aerospace. This is a demonstration of “strong” scalability. The blue line shows what ideal or perfect scalability looks like. The purple triangles show the actual scale-up for the case as a function of increasing processor count. The closeness of these two curves demonstrates excellent scaling to well over 3,000 processors for this mid-to-large-sized 97M cell case. This example was run on Amazon EC2 C5n.18xlarge Intel Skylake instances, 3.0 GHz, each providing 36 cores with Hyper-Threading disabled.

Figure 1. Strong scaling demonstrated for a 97M cell Simcenter STAR-CCM+ CFD calculation

Efficiency

Now that you understand the variation of scale-up with the number of processors, we discuss the relation of scale-up with number of grid cells per processor, which determines the efficiency of the parallel simulation. Efficiency is the scale-up divided by the number of processors used in the calculation. By plotting grid cells per processor, as in Figure 2, scaling estimates can be made for simulations with different grid sizes with Simcenter STAR-CCM+. The purple line in Figure 2 shows scale-up as a function of grid cells per processor. The vertical axis for scale-up is on the left-hand side of the graph as indicated by the purple arrow. The green line in Figure 2 shows efficiency as a function of grid cells per processor. The vertical axis for efficiency is on the right side of the graph and is indicated by the green arrow.

Figure 2. Scale-up and efficiency as a function of cells per processor.

Fewer grid cells per processor means reduced computational effort per processor. Maintaining efficiency while reducing cells per processor demonstrates the strong scalability of Simcenter STAR-CCM+ on AWS.

Efficiency remains at about 100% between approximately 700,000 cells per processor core and 60,000 cells per processor core. Efficiency starts to fall off at about 60,000 cells per core. An efficiency of at least 80% is maintained until 25,000 cells per core. Decreasing cells per core leads to decreased efficiency because the total computational effort per processor core is reduced. The goal of achieving more than 100% efficiency (here, at about 250,000 cells per core) is common in scaling studies, is case-specific, and often related to smaller effects such as timing variation and memory caching.

Turn-around time and cost

Case turn-around time and cost is what really matters to most HPC users. A plot of turn-around time versus CPU cost for this case is shown in Figure 3. As the number of cores increases, the total turn-around time decreases. But as the number of cores increases, the inefficiency also increases, which leads to increased costs. The cost, represented by solid blue curve, is based on the On-Demand price for the C5n.18xlarge, and only includes the computational costs. Small costs are also incurred for data storage. Minimum cost and turn-around time are achieved with approximately 60,000 cells per core.

Figure 3. Cost per run for: On-Demand pricing ($3.888 per hour for C5n.18xlarge in US-East-1) with and without the Simcenter STAR-CCM+ POD license cost as a function of turn-around time [Blue]; 3-yr all-upfront pricing ($1.475 per hour for C5n.18xlarge in US-East-1) [Green]

Many users choose a cell count per core count to achieve the lowest possible cost. Others may choose a cell count per core count to achieve the fastest turn-around time. If a run is desired in 1/3rd the time of the lowest price point, it can be achieved with approximately 25,000 cells per core.

Additional information about the test scenario

TLG Aerospace has used the Simcenter STAR-CCM+ Power-On-Demand (POD) license for running the simulations for this case. POD license enables flexible On-Demand usage of the software on unlimited cores for a fixed price of $22 per hour. The total cost per run, which includes the computational cost, plus the POD license cost is represented in Figure 3 by the dashed blue curve. As POD license is charged per hour, the total cost per run increases for higher turn-around times. Note that many users run Simcenter STAR-CCM+ with fewer cells per core than this case. While this increases the compute cost, other concerns—such as license costs or schedules—can be overriding factors. However, many find the reduced turn-around time well worth the price of the additional instances.

AWS also offers Savings Plans, which are a flexible pricing model offering substantially lower price on EC2 instances compared to On-Demand prices for a committed usage of 1- or 3-year term. For example, the 3-year all-upfront pricing of C5n.18xlarge instance is 62% cheaper than the On-Demand pricing. The total cost per run using the 3-year all-upfront pricing model is illustrated in Figure 3 by solid green line. The 3-year all-upfront pricing plan offers a substantial reduction in price for running the simulations.

Amazon Linux is optimized to run on AWS and offers excellent performance for running HPC applications. For the case presented here, the operating system used was Amazon Linux 2. While other Linux distributions are also performant, we strongly recommend that for Linux HPC applications, you use a current Linux kernel.

Amazon Elastic Block Store (Amazon EBS) is a persistent, block-level storage device that is often used for cluster storage on AWS. A standard EBS General Purpose SSD (gp2) volume was used for this scenario. For other HPC applications that may require faster I/O to prevent data writes from being a bottleneck to turn-around speed, we recommend FSx for Lustre. FSx for Lustre seamlessly integrates with Amazon S3, allowing users for efficient data interaction with Amazon S3.

AWS customers can choose to run their applications on either threads or cores. With hyper-threading, a single CPU physical core appears as two logical CPUs to the operating system. For an application like Simcenter STAR-CCM+, excellent linear scaling can be seen when using either threads or cores, though we generally recommend disabling hyper-threading. Most HPC applications benefit from disabling hyper-threading, and therefore, it tends to be the preferred environment for running HPC workloads. For more information, see Well-Architected Framework HPC Lens.

Elastic Fabric Adapter (EFA)

Elastic Fabric Adapter (EFA) is a network device that can be attached to Amazon EC2 instances to accelerate HPC applications by providing lower and consistent latency and higher throughput than the Transmission Control Protocol (TCP) transport. C5n.18xlarge instances used for running Simcenter STAR-CCM+ for this case support EFA technology, which is generally recommended for best scaling.

Summary

This post demonstrates the scalability of a commercial CFD software Simcenter STAR-CCM+ for an external aerodynamics simulation performed on the Amazon EC2 C5n.18xlarge instances. The availability of EFA, a high-performing network device on these instances result in excellent scalability of the application. The case turn-around time and associated costs of running Simcenter STAR-CCM+ on AWS hardware are discussed. In general, excellent performance can be achieved on AWS for most HPC applications. In addition to low cost and quick turn-around time, important considerations for HPC also include throughput and availability. AWS offers high throughput, scalability, security, cost-savings, and high availability, decreasing a long queue time and reducing the case turn-around time.

Building an AWS Glue ETL pipeline locally without an AWS account

Post Syndicated from Adnan Alvee original https://aws.amazon.com/blogs/big-data/building-an-aws-glue-etl-pipeline-locally-without-an-aws-account/

If you’re new to AWS Glue and looking to understand its transformation capabilities without incurring an added expense, or if you’re simply wondering if AWS Glue ETL is the right tool for your use case and want a holistic view of AWS Glue ETL functions, then please continue reading. In this post, we walk you through several AWS Glue ETL functions with supporting examples, using a local PySpark shell in a containerized environment with no AWS artifact dependency. If you’re already familiar with AWS Glue and Apache Spark, you can use this solution as a quick cheat sheet for AWS Glue PySpark validations.

You don’t need an AWS account to follow along with this walkthrough. We use small example datasets for our use case and go through the transformations of several AWS Glue ETL PySpark functions: ApplyMapping, Filter, SplitRows, SelectFields, Join, DropFields, Relationalize, SelectFromCollection, RenameField, Unbox, Unnest, DropNullFields, SplitFields, Spigot and Write Dynamic Frame.

This post provides an introduction of the transformation capabilities of AWS Glue and provides insights towards possible uses of the supported functions. The goal is to get up and running with AWS Glue ETL functions in the shortest possible time, at no cost and without any AWS environment dependency.

Prerequisites

To follow along, you should have the following resources:

  • Basic programming experience
  • Basic Python and Spark knowledge (not required but good to have)
  • A desktop or workstation with Docker installed and running

If you prefer to set up the environment locally outside of a Docker container, you can follow the instructions provided in the GitHub repo, which hosts libraries used in AWS Glue. These libraries extend Apache Spark with additional data types and operations for ETL workflows.

Setting up resources

For this post, we use the amazon/aws-glue-libs:glue_libs_1.0.0_image_01 image from Dockerhub. This image has only been tested for AWS Glue 1.0 spark shell (PySpark). Additionally, this image also supports Jupyter and Zeppelin notebooks and a CLI interpreter. For the purpose of this post, we use the CLI interpreter. For more information on the container, please read Developing AWS Glue ETL jobs locally using a container.

To pull the relevant image from the Docker repository, enter the following command in a terminal prompt:

docker pull amazon/aws-glue-libs:glue_libs_1.0.0_image_01

To test on the command prompt, enter the following code:

docker run -itd --name glue_without_notebook amazon/aws-glue-libs:glue_libs_1.0.0_image_01
docker exec -it glue_without_notebook bash
/home/spark-2.4.3-bin-spark-2.4.3-bin-hadoop2.8/bin/pyspark

To test on Jupyter notebooks, enter the following code:

docker run -itd -p 8888:8888 -p 4040:4040 -v ~/.aws:/root/.aws:ro --name glue_jupyter \amazon/aws-glue-libs:glue_libs_1.0.0_image_01 \
/home/jupyter/jupyter_start.sh

Browse to ‘localhost:8888’ in a browser to open Jupyter notebooks.

Importing GlueContext

To get started, enter the following import statements in the PySpark shell. We import GlueContext, which wraps the Spark SQLContext, thereby providing mechanisms to interact with Apache Spark:

import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.transforms import *
from awsglue.dynamicframe import DynamicFrame
from pyspark.sql.types import *
from pyspark.sql import Row
glueContext = GlueContext(SparkContext.getOrCreate())

Dataset 1

We first generate a Spark DataFrame consisting of dummy data of an order list for a fictional company. We process the data using AWS Glue PySpark functions.

Enter the following code into the shell:

order_list = [
               ['1005', '623', 'YES', '1418901234', '75091'],\
               ['1006', '547', 'NO', '1418901256', '75034'],\
               ['1007', '823', 'YES', '1418901300', '75023'],\
               ['1008', '912', 'NO', '1418901400', '82091'],\
               ['1009', '321', 'YES', '1418902000', '90093']\
             ]

# Define schema for the order_list
order_schema = StructType([  
                      StructField("order_id", StringType()),
                      StructField("customer_id", StringType()),
                      StructField("essential_item", StringType()),
                      StructField("timestamp", StringType()),
                      StructField("zipcode", StringType())
                    ])

# Create a Spark Dataframe from the python list and the schema
df_orders = spark.createDataFrame(order_list, schema = order_schema)

The following .show() command allows us to view the DataFrame in the shell:

df_orders.show()

# Output
+--------+-----------+--------------+----------+-------+
|order_id|customer_id|essential_item| timestamp|zipcode|
+--------+-----------+--------------+----------+-------+
|    1005|        623|           YES|1418901234|  75091|
|    1006|        547|            NO|1418901256|  75034|
|    1007|        823|           YES|1418901300|  75023|
|    1008|        912|            NO|1418901400|  82091|
|    1009|        321|           YES|1418902000|  90093|
+--------+-----------+--------------+----------+-------+

DynamicFrame

A DynamicFrame is similar to a DataFrame, except that each record is self-describing, so no schema is required initially. Instead, AWS Glue computes a schema on-the-fly when required. We convert the df_orders DataFrame into a DynamicFrame.

Enter the following code in the shell:

dyf_orders = DynamicFrame.fromDF(df_orders, glueContext, "dyf") 

Now that we have our Dynamic Frame, we can start working with the datasets with AWS Glue transform functions.

ApplyMapping

The columns in our data might be in different formats, and you may want to change their respective names. ApplyMapping is the best option for changing the names and formatting all the columns collectively. For our dataset, we change some of the columns to Long from String format to save storage space later. We also shorten the column zipcode to zip. See the following code:

# Input 
dyf_applyMapping = ApplyMapping.apply( frame = dyf_orders, mappings = [ 
  ("order_id","String","order_id","Long"), 
  ("customer_id","String","customer_id","Long"),
  ("essential_item","String","essential_item","String"),
  ("timestamp","String","timestamp","Long"),
  ("zipcode","String","zip","Long")
])

dyf_applyMapping.printSchema()

# Output
root
|-- order_id: long
|-- customer_id: long
|-- essential_item: string
|-- timestamp: long
|-- zip: long

Filter

We now want to prioritize our order delivery for essential items. We can achieve that using the Filter function:

# Input 
dyf_filter = Filter.apply(frame = dyf_applyMapping, f = lambda x: x["essential_item"] == 'YES')

dyf_filter.toDF().show()

# Output 
+--------------+-----------+-----+----------+--------+
|essential_item|customer_id|  zip| timestamp|order_id|
+--------------+-----------+-----+----------+--------+
|           YES|        623|75091|1418901234|    1005|
|           YES|        823|75023|1418901300|    1007|
|           YES|        321|90093|1418902000|    1009|
+--------------+-----------+-----+----------+--------+

Map

Map allows us to apply a transformation to each record of a Dynamic Frame. For our case, we want to target a certain zip code for next day air shipping. We implement a simple “next_day_air” function and pass it to the Dynamic Frame:

# Input 

# This function takes in a dynamic frame record and checks if zipcode # 75034 is present in it. If present, it adds another column 
# “next_day_air” with value as True

def next_day_air(rec):
  if rec["zip"] == 75034:
    rec["next_day_air"] = True
  return rec

mapped_dyF =  Map.apply(frame = dyf_applyMapping, f = next_day_air)

mapped_dyF.toDF().show()

# Output
+--------------+-----------+-----+----------+--------+------------+
|essential_item|customer_id|  zip| timestamp|order_id|next_day_air|
+--------------+-----------+-----+----------+--------+------------+
|           YES|        623|75091|1418901234|    1005|        null|
|            NO|        547|75034|1418901256|    1006|        TRUE|
|           YES|        823|75023|1418901300|    1007|        null|
|            NO|        912|82091|1418901400|    1008|        null|
|           YES|        321|90093|1418902000|    1009|        null|
+--------------+-----------+-----+----------+--------+------------+

Dataset 2

To ship essential orders to the appropriate addresses, we need customer data. We demonstrate this by generating a custom JSON dataset consisting of zip codes and customer addresses. In this use case, this data represents the customer data of the company that we want to join later on.

We generate JSON strings consisting of customer data and use the Spark json function to convert them to a JSON structure (enter each jsonStr variable one at a time in case the terminal errors out):

# Input 
jsonStr1 = u'{ "zip": 75091, "customers": [{ "id": 623, "address": "108 Park Street, TX"}, { "id": 231, "address": "763 Marsh Ln, TX" }]}'
jsonStr2 = u'{ "zip": 82091, "customers": [{ "id": 201, "address": "771 Peek Pkwy, GA" }]}'
jsonStr3 = u'{ "zip": 75023, "customers": [{ "id": 343, "address": "66 P Street, NY" }]}'
jsonStr4 = u'{ "zip": 90093, "customers": [{ "id": 932, "address": "708 Fed Ln, CA"}, { "id": 102, "address": "807 Deccan Dr, CA" }]}'
df_row = spark.createDataFrame([
  Row(json=jsonStr1),
  Row(json=jsonStr2),
  Row(json=jsonStr3),
  Row(json=jsonStr4)
])

df_json = spark.read.json(df_row.rdd.map(lambda r: r.json))
df_json.show()

# Output
+-----------------------------------------------------+-----+
|customers                                            |zip  |
+-----------------------------------------------------+-----+
|[[108 Park Street, TX, 623], [763 Marsh Ln, TX, 231]]|75091|
|[[771 Peek Pkwy, GA, 201]]                           |82091|
|[[66 P Street, NY, 343]]                             |75023|
|[[708 Fed Ln, CA, 932], [807 Deccan Dr, CA, 102]]    |90093|
+-----------------------------------------------------+-----+
# Input
df_json.printSchema()

# Output
root
 |-- customers: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- address: string (nullable = true)
 |    |    |-- id: long (nullable = true)
 |-- zip: long (nullable = true)

To convert the DataFrame back to a DynamicFrame to continue with our operations, enter the following code:

# Input
dyf_json = DynamicFrame.fromDF(df_json, glueContext, "dyf_json")

SelectFields

To join with the order list, we don’t need all the columns, so we use the SelectFields function to shortlist the columns we need. In our use case, we need the zip code column, but we can add more columns as the argument paths accepts a list:

# Input
dyf_selectFields = SelectFields.apply(frame = dyf_filter, paths=['zip'])

dyf_selectFields.toDF().show()

# Output
+-----+
|  zip|
+-----+
|75091|
|75023|
|90093|
+-----+

Join

The Join function is straightforward and manages duplicate columns. We had two columns named zip from both datasets. AWS Glue added a period (.) in one of the duplicate column names to avoid errors:

# Input
dyf_join = Join.apply(dyf_json, dyf_selectFields, 'zip', 'zip')
dyf_join.toDF().show()

# Output
+--------------------+-----+-----+
|           customers| .zip|  zip|
+--------------------+-----+-----+
|[[108 Park Street...|75091|75091|
|[[66 P Street, NY...|75023|75023|
|[[708 Fed Ln, CA,...|90093|90093|
+--------------------+-----+-----+

DropFields

Because we don’t need two columns with the same name, we can use DropFields to drop one or multiple columns all at once. The backticks (`) around .zip inside the function call are needed because the column name contains a period (.):

# Input
dyf_dropfields = DropFields.apply(
  frame = dyf_join,
  paths = "`.zip`"
)

dyf_dropfields.toDF().show()

# Output
+--------------------+-----+
|           customers|  zip|
+--------------------+-----+
|[[108 Park Street...|75091|
|[[66 P Street, NY...|75023|
|[[708 Fed Ln, CA,...|90093|
+--------------------+-----+

Relationalize

The Relationalize function can flatten nested structures and create multiple dynamic frames. Our customer column from the previous operation is a nested structure, and Relationalize can convert it into multiple flattened DynamicFrames:

# Input
dyf_relationize = dyf_dropfields.relationalize("root", "/home/glue/GlueLocalOutput")

To see the DynamicFrames, we can’t run a .show() yet because it’s a collection. We need to check what keys are present. See the following code:

# Input
dyf_relationize.keys()

# Output
dict_keys(['root', 'root_customers'])

In the follow-up function in the next section, we show how to pick the DynamicFrame from a collection of multiple DynamicFrames.

SelectFromCollection

The SelectFromCollection function allows us to retrieve the specific DynamicFrame from a collection of DynamicFrames. For this use case, we retrieve both DynamicFrames from the previous operation using this function.

To retrieve the first DynamicFrame, enter the following code:

# Input
dyf_selectFromCollection = SelectFromCollection.apply(dyf_relationize, 'root')

dyf_selectFromCollection.toDF().show()

# Output
+---------+-----+
|customers|  zip|
+---------+-----+
|        1|75091|
|        2|75023|
|        3|90093|
+---------+-----+

To retrieve the second DynamicFrame, enter the following code:

# Input
dyf_selectFromCollection = SelectFromCollection.apply(dyf_relationize, 'root_customers')

dyf_selectFromCollection.toDF().show()

# Output
+---+-----+---------------------+----------------+
| id|index|customers.val.address|customers.val.id|
+---+-----+---------------------+----------------+
|  2|    0|      66 P Street, NY|             343|
|  3|    0|       708 Fed Ln, CA|             932|
|  3|    1|    807 Deccan Dr, CA|             102|
|  1|    0|  108 Park Street, TX|             623|
|  1|    1|     763 Marsh Ln, TX|             231|
+---+-----+---------------------+----------------+

RenameField

The second DynamicFrame we retrieved from the previous operation introduces a period (.) into our column names and is very lengthy. We can change that using the RenameField function:

# Input
dyf_renameField_1 = RenameField.apply(dyf_selectFromCollection, "`customers.val.address`", "address")

dyf_renameField_2 = RenameField.apply(dyf_renameField_1, "`customers.val.id`", "cust_id")

dyf_dropfields_rf = DropFields.apply(
  frame = dyf_renameField_2,
  paths = ["index", "id"]
)

dyf_dropfields_rf.toDF().show()

# Output
+-------------------+-------+
|            address|cust_id|
+-------------------+-------+
|    66 P Street, NY|    343|
|     708 Fed Ln, CA|    932|
|  807 Deccan Dr, CA|    102|
|108 Park Street, TX|    623|
|   763 Marsh Ln, TX|    231|
+-------------------+-------+

ResolveChoice

ResloveChoice can gracefully handle column type ambiguities. For more information about the full capabilities of ResolveChoice, see the GitHub repo.

# Input
dyf_resolveChoice = dyf_dropfields_rf.resolveChoice(specs = [('cust_id','cast:String')])

dyf_resolveChoice.printSchema()

# Output
root
|-- address: string
|-- cust_id: string

Dataset 3

We generate another dataset to demonstrate a few other functions. In this use case, the company’s warehouse inventory data is in a nested JSON structure, which is initially in a String format. See the following code:

# Input
warehouse_inventory_list = [
              ['TX_WAREHOUSE', '{\
                          "strawberry":"220",\
                          "pineapple":"560",\
                          "mango":"350",\
                          "pears":null}'
               ],\
              ['CA_WAREHOUSE', '{\
                         "strawberry":"34",\
                         "pineapple":"123",\
                         "mango":"42",\
                         "pears":null}\
              '],
    		   ['CO_WAREHOUSE', '{\
                         "strawberry":"340",\
                         "pineapple":"180",\
                         "mango":"2",\
                         "pears":null}'
              ]
            ]


warehouse_schema = StructType([StructField("warehouse_loc", StringType())\
                              ,StructField("data", StringType())])

df_warehouse = spark.createDataFrame(warehouse_inventory_list, schema = warehouse_schema)
dyf_warehouse = DynamicFrame.fromDF(df_warehouse, glueContext, "dyf_warehouse")

dyf_warehouse.printSchema()

# Output
root
|-- warehouse_location: string
|-- data: string

Unbox

We use Unbox to extract JSON from String format for the new data. Compare the preceding printSchema() output with the following code:

# Input
dyf_unbox = Unbox.apply(frame = dyf_warehouse, path = "data", format="json")
dyf_unbox.printSchema()
# Output
root
|-- warehouse_loc: string
|-- data: struct
|    |-- strawberry: int
|    |-- pineapple: int
|    |-- mango: int
|    |-- pears: null

# Input 
dyf_unbox.toDF().show()

# Output
+-------------+----------------+
|warehouse_loc|            data|
+-------------+----------------+
| TX_WAREHOUSE|[220, 560, 350,]|
| CA_WAREHOUSE|  [34, 123, 42,]|
| CO_WAREHOUSE|  [340, 180, 2,]|
+-------------+----------------+

Unnest

Unnest allows us to flatten a single DynamicFrame to a more relational table format. We apply Unnest to the nested structure from the previous operation and flatten it:

# Input
dyf_unnest = UnnestFrame.apply(frame = dyf_unbox)

dyf_unnest.printSchema()

# Output 
root
|-- warehouse_loc: string
|-- data.strawberry: int
|-- data.pineapple: int
|-- data.mango: int
|-- data.pears: null

dyf_unnest.toDF().show()

# Output
+-------------+---------------+--------------+----------+----------+
|warehouse_loc|data.strawberry|data.pineapple|data.mango|data.pears|
+-------------+---------------+--------------+----------+----------+
| TX_WAREHOUSE|            220|           560|       350|      null|
| CA_WAREHOUSE|             34|           123|        42|      null|
| CO_WAREHOUSE|            340|           180|         2|      null|
+-------------+---------------+--------------+----------+----------+

DropNullFields

The DropNullFields function makes it easy to drop columns with all null values. Our warehouse data indicated that it was out of pears and can be dropped. We apply the DropNullFields function on the DynamicFrame, which automatically identifies the columns with null values and drops them:

# Input
dyf_dropNullfields = DropNullFields.apply(frame = dyf_unnest)

dyf_dropNullfields.toDF().show()

# Output
+-------------+---------------+--------------+----------+
|warehouse_loc|data.strawberry|data.pineapple|data.mango|
+-------------+---------------+--------------+----------+
| TX_WAREHOUSE|            220|           560|       350|
| CA_WAREHOUSE|             34|           123|        42|
| CO_WAREHOUSE|            340|           180|         2|
+-------------+---------------+--------------+----------+

SplitFields

SplitFields allows us to split a DyanmicFrame into two. The function takes the field names of the first DynamicFrame that we want to generate followed by the names of the two DynamicFrames:

# Input
dyf_splitFields = SplitFields.apply(frame = dyf_dropNullfields, paths = ["`data.strawberry`", "`data.pineapple`"], name1 = "a", name2 = "b")

For the first DynamicFrame, see the following code:

# Input
dyf_retrieve_a = SelectFromCollection.apply(dyf_splitFields, "a")
dyf_retrieve_a.toDF().show()

# Output
+---------------+--------------+
|data.strawberry|data.pineapple|
+---------------+--------------+
|            220|           560|
|             34|           123|
|            340|           180|
+---------------+--------------+

For the second Dynamic Frame, see the following code:

# Input
dyf_retrieve_b = SelectFromCollection.apply(dyf_splitFields, "b")
dyf_retrieve_b.toDF().show()

# Output
+-------------+----------+
|warehouse_loc|data.mango|
+-------------+----------+
| TX_WAREHOUSE|       350|
| CA_WAREHOUSE|        42|
| CO_WAREHOUSE|         2|
+-------------+----------+

SplitRows

SplitRows allows us to filter our dataset within a specific range of counts and split them into two DynamicFrames:

# Input
dyf_splitRows = SplitRows.apply(frame = dyf_dropNullfields, comparison_dict = {"`data.pineapple`": {">": "100", "<": "200"}}, name1 = 'pa_200_less', name2 = 'pa_200_more')

For the first Dynamic Frame, see the following code:

# Input
dyf_pa_200_less = SelectFromCollection.apply(dyf_splitRows, 'pa_200_less')
dyf_pa_200_less.toDF().show()

# Output
+-------------+---------------+--------------+----------+
|warehouse_loc|data.strawberry|data.pineapple|data.mango|
+-------------+---------------+--------------+----------+
| CA_WAREHOUSE|             34|           123|        42|
| CO_WAREHOUSE|            340|           180|         2|
+-------------+---------------+--------------+----------+

For the second Dynamic Frame, see the following code:

# Input
dyf_pa_200_more = SelectFromCollection.apply(dyf_splitRows, 'pa_200_more')
dyf_pa_200_more.toDF().show()

# Output
+-------------+---------------+--------------+----------+
|warehouse_loc|data.strawberry|data.pineapple|data.mango|
+-------------+---------------+--------------+----------+
| TX_WAREHOUSE|            220|           560|       350|
+-------------+---------------+--------------+----------+

Spigot

Spigot allows you to write a sample dataset to a destination during transformation. For our use case, we write the top 10 records locally:

# Input
dyf_splitFields = Spigot.apply(dyf_pa_200_less, '/home/glue/GlueLocalOutput/Spigot/', 'top10')

Depending on your local environment configuration, Spigot may run into errors. Alternatively, you can use an AWS Glue endpoint or an AWS Glue ETL job to run this function.

Write Dynamic Frame

The write_dynamic_frame function writes a DynamicFrame using the specified connection and format. For our use case, we write locally (we use a connection_type of S3 with a POSIX path argument in connection_options, which allows writing to local storage):

# Input
glueContext.write_dynamic_frame.from_options(\
frame = dyf_splitFields,\
connection_options = {'path': '/home/glue/GlueLocalOutput/'},\
connection_type = 's3',\
format = 'json')

Conclusion

This article discussed the PySpark ETL capabilities of AWS Glue. Further testing with an AWS Glue development endpoint or directly adding jobs in AWS Glue is a good pivot to take the learning forward. For more information, see General Information about Programming AWS Glue ETL Scripts.


About the Authors

Adnan Alvee is a Big Data Architect for AWS ProServe Remote Consulting Services. He helps build solutions for customers leveraging their data and AWS services. Outside of AWS, he enjoys playing badminton and drinking chai.

 

 

Imtiaz (Taz) Sayed is the World Wide Tech Leader for Data Analytics at AWS. He is an ardent data engineer and relishes connecting with the data analytics community.

 

Анна Мацоне от Tg2 (Rai2) „Не ни е страх от Камората и Ндрангетата, заляли с боклуци България”

Post Syndicated from Николай Марченко original https://bivol.bg/%D0%BD%D0%B5-%D0%BD%D0%B8-%D0%B5-%D1%81%D1%82%D1%80%D0%B0%D1%85-%D0%BE%D1%82-%D0%BA%D0%B0%D0%BC%D0%BE%D1%80%D0%B0%D1%82%D0%B0-%D0%B8-%D0%BD%D0%B4%D1%80%D0%B0%D0%BD%D0%B3%D0%B5%D1%82%D0%B0.html

понеделник 21 септември 2020


Със съд заплаши ТЕЦ „Бобов дол” италианската новинарска телевизия Telegiornale 2 (Tg2), част от Rai 2 към обществената Radiotelevisione Italiana (Rai). Екипът на Rai в партньорство с „Биволъ” успя да проведе снимки на място в Бобов Дол. Както сподели в интервюто си за „ЗовНюз” репортерът ни Димитър Стоянов, той вдигна дрон, кадри от който показа италианската телевизия. В събота репортажът на репортерката Анна Мацоне и оператора Доменико ди Руоко излезе в праймтайма в предаването Dossier, където прозвуча името на енергийния магнат Христо Ковачки до тези на “Ндрангета” и “Камора”. „Биволъ” успя да поговори с репортерката и редакторката на Tg2/Rai2 Анна Мацоне, която отрази не само протестите в България, но и темата с горенето на отпадъците в Бобов дол.

Екипът на Rai2 на жп линията край ТЕЦ “Бобов дол” (Сн.: Николай Марченко, “Биволъ”)

„Те са свободни да правят каквото си искат”, гласи коментарът й за “Биволъ” относно „опровержението” от страна на ръководството на ТЕЦ-а, обвинил италианската медия в „тенденциозност”.

“Направихме снимки пред централата „Бобов дол”, която работеше, въпреки решението на властите Ви”, гласи позицията на Анна Мацоне, която вече се е прибрала в Рим след командировката си в България.

„Имаме заснети кадри и стендъп на фона на функционираща централа, ясно видима зад гърба ми”.

Ние не бяхме използвали архивни кадри или изображения и можем да си го докажем без никакъв проблем. Също така заснехме машината, която събира отпадъци на територията на централата и ясно чухме звука, който демонстрира, че в ТЕЦ-а се разфасоват отпадъци”, казва Анна Мацоне.

Изцяло потвърждава това, което е видяла: „Каквото сме заснели и каквото чухме…”. „Затова не се страхувам от нищо. Върша си работата, както обикновено”, коментира журналистката.

„Не ме е страх от мафията”

Доменико ди Руоко снима балите с отпадъци (Сн.: Николай Марченко, “Биволъ”)

„Може би, аз не съм достатъчно съзнателна, но не се чувствам в опасност или да се страхувам да бъда заплашена. Нито се чувствам като герой. Като Вас, само си върша работата си”, казва журналистката.

„Не мисля за това, че някой ще побеснее, гледайки репортажите ми”.

Според нея по-важнотo e това как да информира добре хората, които я гледат: „Да го правя коректно и на време”. „Това е нашият дълг, тъй като наравно с правото за публично мнение е и това да бъде информиран, без информацията да се засенчва”, коментира Анна Мацоне.

Решила е да се фокусира върху темата с трафика на отпадъците, тъй като според думите й България „се е превърнала в получател и склад на боклука”.

“Трафикът се менажира от екомафиите от Европа начело с италианските ОПГ-та „Ндрангета” и „Камора”.

Италианската телевизионерка припомня, че има информация за разследвания и спецоперации, които са започнати от италианските магистрати и българската полиция. „Ние си помислихме, че също е важно да говорим за тези тайни връзки между двете ни страни”, казва Мацоне.

„България е залята с хиляди и хиляди тонове отпадъци, които се внасят от Италия”.

И тези според доставки доставки според журналистката се ръководят предимно от компаниите, които са разследвани по подозрение за това, че в качеството си на юридически лица са „проксита” на организациите като „Ндрангета” и „Камора”.

Бали с отпадъци (Сн.: Николай Марченко, “Биволъ”)

„От няколко години насам прокурорът на Катанцаро Никола Гратери беше проследявал операциите на екомафиите, които незаконно извозват боклука към България и други балкански държави”, казва Анна.

Припомня и че, в началото на тази година около 9,000 тона нелегални отпадъци са били задържани в пристанището на гр. Варна. „Спецоперацията “Rinascita-Scott”, която започна със серията блицове през 2019 г., доведе до разследване на 334 души заради евентуалните им връзки с мафията”, обобщава Мацоне.

За „физиката” на българския протест

Журналистката oт RAI сподели и защо е решила да отрази протестите в София, като на пръв поглед може да изглежда, че е логистично решение.

„Решихме да говорим за България по редица причини. RAI разполага с кореспондент в Москва, който вече следи отблизо ситуацията в Беларус. Освен това, президентът Александър Лукашенко е наложил забрана за влизане в страната за чуждестранните журналисти”.

„Фокусирахме се върху България, защото малцина предават какво се случва при вас”

На протеста (Сн.: Николай Марченко)

Според Анна Мацоне са я заинтересували антиправителствените протести, които продължават над два месеца. Както и „корупцията за която алармира гражданското общество”. „Пълна тишина е около ситуацията в България, при положение, че за разлика от Беларус, е част от Европейския съюз”, казва репортерката.

Тя даде и мнението си за медиите ни, с чиито представители успя да се запознае: „В България срещнах много журналисти, които са много добре подготвени и добри в работата си”.

„Историите, които разказват, са базирани на фактологични доказателства”

„Вярвам, че във всяка демократична и дори недемократична държава, ролята на журналистите е фундаментална”, категорична е Мацоне.

Тя я вижда в това да се осветлява щателно укриваната от хората информация. „Нашият дълг е да информираме, винаги и по всяко време, вярвам, че българските журналисти, с които успях да се запозная, вършат работата си по изключителен и смел начин”.

По време на мирните протести на площада, е успяла да срещне не само обикновени хора, но и редица интелектуалци, сред които писателят Георги Господинов.

„Видях, че той протестираше с дъщеря си за по-добрата държава”.

Анна Мацоне си спомня думите на българския писател, който й е споделил, че „физиката на протестите” е като процеса в едноименната му книга „Физика на тъгата”: тя се е проявила поради едни и същи нужди.

„А именно, да се осветлят скритите процеси, да се излезе от тази болка и да се стигне до промяна. Да се обърне енергията в нещо позитивно, за самите нас и за другите. Вярвам, че Георги беше прав в това, което каза”, споделя журналистката.

Работното  посещение в България по думите й е било кратко, но „много интензивно и интересно”: „Заедно с оператора Доменико Ди Руоко ние успяхме да се задълбочим в реалността, която не познавахме”.

„Надяваме се пак да имаме възможност да разкажем за това, което се случва в България”

„И ще се стараем да държим италианците добре информирани за историите Ви, които така тясно се преплитат с нашите”, казва Анна.

Към настоящия момент все още обаче нямало обратна връзка от страна на италианските политици и прокурори: „Но ние получаваме позитивни коментари от мнозина наши колеги и зрители, които ни поздравяват за това, че се захващаме с толкова сложни теми”.

Които според журналистката иначе само накратко се споменават в мейнстрийм медиите.

Ще продължим да го правим.

Анна Мацоне увери, че и директорът на Tg2 Дженаро Санджулиано също е известен с това, че “не се страхува да разказва за укриваните от обществото факти”. “И аз мисля в тези категории. Затова се радвам да работя с него”, обобщи тя.

 

 

Security updates for Monday

Post Syndicated from original https://lwn.net/Articles/832080/rss

Security updates have been issued by Debian (inspircd and modsecurity), Fedora (chromium, cryptsetup, gnutls, mingw-libxml2, and seamonkey), openSUSE (ark, chromium, claws-mail, docker-distribution, fossil, hylafax+, inn, knot, libetpan, libjpeg-turbo, libqt4, librepo, libvirt, libxml2, lilypond, mumble, openldap2, otrs, pdns-recursor, perl-DBI, python-Flask-Cors, singularity, slurm_18_08, and virtualbox), SUSE (jasper, less, ovmf, and rubygem-actionview-4_2), and Ubuntu (sa-exim).

Raspberry Pi turns retro radio into interactive storyteller

Post Syndicated from Ashley Whittaker original https://www.raspberrypi.org/blog/raspberry-pi-turns-retro-radio-into-interactive-storyteller/

8 Bits and a Byte created this voice-controllable, interactive, storytelling device, hidden inside a 1960s radio for extra aesthetic wonderfulness.

A Raspberry Pi 3B works with an AIY HAT, a microphone, and the device’s original speaker to run chatbot and speech-to-text artificial intelligence.

This creature is a Bajazzo TS made by Telefunken some time during the 1960s in West Germany, and this detail inspired the espionage-themed story that 8 Bits and a Byte retrofitted it to tell. Users are intelligence agents whose task is to find the evil Dr Donogood.

The device works like one of those ‘choose your own adventure’ books, asking you a series of questions and offering you several options. The story unfolds according to the options you choose, and leads you to a choice of endings.

In with the new (Raspberry Pi tucked in the lower right corner)

What’s the story?

8 Bits and a Byte designed a decision tree to provide a tight story frame, so users can’t go off on question-asking tangents.

When you see the ‘choose your own adventure’ frame set out like this, you can see how easy it is to create something that feels interactive, but really only needs to understand the difference between a few phrases: ‘laser pointer’; ‘lockpick’; ‘drink’; take bribe’, and ‘refuse bribe’.

How does it interact with the user?

Skip to 03mins 30secs to see the storytelling in action

Google Dialogflow is a free natural language understanding platform that makes it easy to design a conversational user interface, which is long-speak for ‘chatbot’.

There are a few steps between the user talking to the radio, and the radio figuring out how to respond. The speech-to-text and chatbot software need to work in tandem. For this project, the data flow runs like so:

1: The microphone detects that someone is speaking and records the audio.

2-3: Google AI (the Speech-To-Text box) processes the audio and extracts the words the user spoke as text.

4-5: The chatbot (Google Dialogflow) receives this text and matches it with the correct response, which is sent back to the Raspberry Pi.

6-7: Some more artificial intelligence uses this text to generate artificial speech.

8: This audio is played to the user via the speaker.

Make sure to check out more of 8 Bits and a Byte’s projects on YouTube. We recommend Mooomba the cow roomba.

The post Raspberry Pi turns retro radio into interactive storyteller appeared first on Raspberry Pi.

Kernel prepatch 5.9-rc6

Post Syndicated from original https://lwn.net/Articles/831986/rss

The 5.9-rc6 kernel prepatch is out.
The one thing that does show up in the diffstat is the softscroll
removal (both fbcon and vgacon), and there are people who want to save
that, but we’ll see if some maintainer steps up. I’m not willing to
resurrect it in the broken form it was in, so I doubt that will happen
in 5.9, but we’ll see what happens.

Precursor: an open-source mobile hardware platform

Post Syndicated from original https://lwn.net/Articles/831983/rss

Andrew “bunnie” Huang has announced a new
project called “Precursor”; it is meant to be a platform for makers to
create interesting new devices. “Precursor is unique in the open
source electronics space in that it’s designed from the ground-up to be
carried around in your pocket. It’s not just a naked circuit board with
connectors hanging off at random locations: it comes fully integrated—with
a rechargeable battery, a display, and a keyboard—in a sleek, 7.2 mm
(quarter-inch) aluminum case.
” You can’t get one yet, but the
crowdfunding push starts soon.

Досиетата FinCen: Глобални банки обслужват олигарси, наркодилъри и терористи

Post Syndicated from Екип на Биволъ original https://bivol.bg/icij-fincen-files-1.html

неделя 20 септември 2020


от International Consortium of Investigative Journalists (ICIJ, Международен консорциум на разследващите журналисти)

Теч на секретни американски правителствени документи разкрива, че JPMorgan Chase (ДжейПи Морган Чейз), HSBC (ЕичЕсБиСи) и други големи банки са успели да заобиколят строгите мерки срещу прането на пари като са местили зашеметяващи суми незаконни пари в брой за престъпни мрежи и тъмни личности, които са създавали хаос и са подкопавали демокрацията по цял свят.

Документите разкриват още, че пет глобално банки – JPMorgan, HSBC, Standard Chartered Bank (Стандарт Чартърд Банк), Deutsche Bank (Дойче Банк) и Bank of New York Mellon (Банк ъф Ню Йорк Мелън)- продължават да трупат печалби от тези могъщи и опасни играчи, дори и след като са били глобени от американските власти за предишни провали в справянето с потоците от мръсни пари.

Американските държавни агенции отговорни за прилагането на законите за пране на пари рядко преследват мегабанки, които нарушават закона, а когато все пак предприемат нещо, действията им образуват само леки вълнички по повърхността на потоците от откраднати пари, които се изпират през международната финансова система.

Има случаи в които банките продължават да местят незаконни средства дори след като американските власти са ги предупредили, че им предстои наказателно преследване ако не престанат да правят бизнес с мафиоти, измамници или корумпирани режими.

Изтеклите документи разкриват, че JPMorgan, най-голямата банка със седалище в САЩ, е прехвърляла пари за хора и компании свързани с масово разграбване на публични средства в Малайзия, Венецуела и Украйна.

Според тези документи, банката е прехвърлила над 1 милиард долара за финансиста беглец, който стои зад скандала в Малайзия с държавната компания 1MDB и повече от 2 милиона долара за двама млади енергийни магнати, чиято фирма е обвинена в измама на правителството на Венецуела и е допринесла за прекъсванията на ток, които са парализирали големи части от страната.

В продължение на цяло десетилетие JPMorgan е обработвала и плащания в размер на над 50 милиона долара за Пол Манафорт, бившият шеф на предизборния щаб на президента Доналд Тръмп. Банката е придвижила поне 6,5 милиона долара под формата на транзакции на Манафорт за 14-те месеца след оставката му от кампанията. Това става на фона на вихрещи се твърдения за пране на пари и корупция във връзка с работата му за проруска политическа партия в Украйна.

Тези не дотам чисти транзакции продължават да се увеличават чрез сметки в JPMorgan, въпреки обещанията на банката да подобри контрола си върху прането на пари като част от споразуменията постигнати с американските власти през 2011 г., 2013 г. и 2014 г..

JPMorgan заяви, че е законът ѝ забранява да отговаря на въпроси относно транзакции или клиенти, и че е поела „водеща роля“ в провеждането на „активни и ръководени от разузнавателни служби разследвания“ и в разработката на „иновативни техники за подпомагане на борбата с финансовите престъпления“.

Според секретните документи, HSBC, Standard Chartered Bank, Deutsche Bank и Bank of New York Mellon също са продължили да извършват съмнителни плащания въпреки подобни обещания към държавни органи.

Изтеклите документи, известни като Досиетата ФинСен (FinCEN Files), съдържат повече от 2100 доклада за подозрителни дейности подадени от банки и други финансови институции до Мрежата за противодействие на финансовите престъпления към Министерството на финансите на САЩ. Агенцията, известна съкратено като FinCEN, е разузнавателното звено, което стои в основата на глобалната система за борба с прането на пари.

Американският новинарски сайт BuzzFeed News (Бъзфийд) е този, който получи документите и ги сподели с Международния консорциум на разследващите журналисти. Консорциумът организира екип от над 400 журналисти от 110 медийни организации в 88 държави за да разследва подземния свят на банките и прането на пари.

Като цяло анализът на Консорциума установи, че документите идентифицират най-малко 2 трилиона долара под формата на транзакции между 1999 и 2017 г., които са били отбелязани като вероятно пране на пари или друга престъпна дейност от служители от вътрешните отдели на финансовите институции за наблюдение на спазването на закона. Касае се включително за 514 милиарда долара в JPMorgan и 1,3 трилиона долара в Deutsche Bank.

Докладите за подозрителна дейност отразяват опасенията на контролните органи на самите банки и не са непременно доказателство за някакво престъпно поведение или неправомерни действия.

Макар и огромна, сумата от 2 трилиона долара подозрителни транзакции установени в този набор от документи, е само капка в далеч по-голямото море от мръсни пари бликащи от банките по цял свят. Досиетата FinCEN представляват по-малко от 0,02 процента от над 12-те милиона доклади за подозрителни дейности, които финансовите институции са подавали между 2011 и 2017 г..

Архивът на докладите за подозрителна дейност, заедно със стотици електронни таблици пълни с имена, дати и цифри, показват в подробности потенциално незаконни транзакции преминаващи през редица банки. Заедно с пресяването на Досиетата FinCEN, Консорциумът и неговите медийни партньори получиха над 17000 други документи от вътрешни източници, лица подаващи сигнали за нарушения, съдебни досиета, искания за достъп до информация и други източници. Екипът интервюира стотици хора, включително експерти по финансови престъпления, служители на реда и жертви на престъпления.

Според BuzzFeed News, някои от изтеклите документи са събрани като част от разследванията на Конгреса на САЩ за намесата на Русия в президентските избори през 2016 г.. Други са искания до FinCEN от правоприлагащи органи.
Досиетата FinCEN предлагат безпрецедентна възможност за надникване в тайния свят на международното банкиране, анонимните клиенти и в много случаи в света на финансовите престъпления.

Те показват, че банките местят на сляпо пари в сметките си за хора, които не могат да идентифицират, не съобщават години наред за транзакции носещи всички белези на пране на пари и дори правят бизнес с клиенти оплетени във финансови измами и публични корупционни скандали.

Властите в САЩ, които играят водеща роля в световната битка срещу прането на пари, са разпореждали на редица големи банки да реформират практиките си, глобявали са ги със стотици милиони и дори милиарди долари и са им отправяли заплахи за наказателни обвинения като част от така наречената процедура за споразумение за отложено наказателно преследване.

Продължилото 16 месеца разследване на Консорциума и неговите партньори показва, че макар и често да влизат във водещите новини, тези тактики не са работили. Големите банки продължават да играят централна роля в придвижването на пари свързани с корупция, измами, организирана престъпност и тероризъм.

„След като така и не успяха да предотвратят мащабни корупционни транзакции, финансовите институции се отказаха от ролята си на първа линия на защита от прането на пари,“ каза пред Консорциума Пол Пелетие, бивш висш служител на Министерството на правосъдието на САЩ и прокурор по финансови престъпления.
Той каза още, че банките знаят, че „работят в система, която е до голяма степен беззъба.“

Секретните документи показват, че пет от банките, които се появяват най-често в Досиетата FinCEN – Deutsche Bank, Bank of New York Mellon, Standard Chartered, JPMorgan и HSBC – многократно са нарушавали официалните си обещания за добро поведение.

През 2012 г. базираната в Лондон HSBC, най-голямата банка в Европа, е подписала споразумение за отложено наказателно преследване и е признала, че е изпрала най-малко 881 милиона долара за латиноамерикански наркокартели. Наркотрафикантите са използвали специално оформени кутии, които пасват на отворите на касовите гишета на HSBC, за да депозират и прокарат през финансовата система огромни количества пари от търговия с наркотици.

В рамките на споразуменията си с прокурорите HSBC е платила 1,9 милиарда долара и правителството се е съгласило да спре временно обвиненията в престъпление срещу банката и да ги отхвърли след пет години, ако HSBC спази обещанието си да се бори агресивно с потока мръсни пари.

Досиетата FinCEN показват, че по време на този петгодишен пробационен период, HSBC продължава да прехвърля пари за съмнителни фигури, включително за заподозрени руски перачи на пари и за Понци схема разследвана в множество страни.

Въпреки това, правителството позволи на HSBC да обяви през декември 2017 г., че е „изпълнила всички свои ангажименти“ по споразумението за отлагане на наказателно преследване, и че прокурорите са отхвърлили окончателно наказателните обвинения.

В изявление до Консорциума, HSBC отказа да отговори на въпроси за конкретни клиенти или транзакции. Банката заяви, че информацията на Консорциума е „остаряла и е от преди“ края на петгодишната сделка за отлагане на наказателно преследване. През това време, казва банката, „ние поехме по дългия път на преразглеждане на способността ни за борба с финансовите престъпления… Днес HSBC е много по-безопасна институция, отколкото през 2012 г.“

HSBC отбеляза, че с решението си да освободи банката от заплахата от наказателни обвинения, правителството е получило достъп до доклади на наблюдател, който е направил преглед на реформите и практиките на банката.
Министерството на правосъдието отказа да отговори на конкретни въпроси. Говорител на Наказателното отделение на Министерството каза в изявление:

„Министерството на правосъдието стои зад своята работа и продължава да се ангажира с агресивно разследване и преследване на финансови престъпления, включително пране на пари, навсякъде, където ги установим.“

„Всички се справят зле“: Мощен поток мръсни пари дави бюрократите

Необезпокояваният поток от мръсни пари помага на престъпни банди, дестабилизира нациите и се превръща в двигател на глобалното икономическо неравенство. Изпраните средства често се разпределят между сметки притежавани от неясни кухи фирми регистрирани в тайни офшорни данъчни убежища, което позволява на елитите да укриват огромни суми от органите на реда и данъчните власти.

Анализ на Консорциума установи, че банките в Досиетата FinCEN редовно обработват транзакции на компании регистрирани в така наречените тайни юрисдикции и го правят без да знаят кой е крайният и истински собственик на сметката. Притежателите на корпоративни сметки често предоставят адреси в Обединеното кралство, САЩ, Кипър, Хонконг, Обединените арабски емирства, Русия и Швейцария. Поне 20% от документите съдържат клиент с адрес на Британски Вирджински острови.

Анализът на Консорциума установи още, че в много случаи банките не са разполагали с информация за субектите, които стоят зад транзакциите, както и за присъствието на кухи фирми. Има случаи при които финансовите институции са поискали повече информация за субектите от други банки, които не са им отговорили. Някои банки или клонове в страни като Швейцария са цитирали местните закони за банкова тайна за да откажат предоставянето на информация.

Данни на Службата на ООН по наркотиците и престъпността показват, че всяка година се изпират незаконни приходи за 2,4 трилиона долара или близо 2,7% от всички стоки и услуги произвеждани годишно в целия свят. Но, пак според данни на ООН, властите успяват да разкрият по-малко от 1% от мръсните пари в света.

„Всички се справят зле“, призна в интервю за Консорциума Дейвид Луис, изпълнителен секретар на базираната в Париж Група за Финансови Действия (Financial Action Task,) партньорство на правителства от цял свят, което определя стандартите за борба с прането на пари.

Докладите на неговата организация за оценка по държави, които проучват доколко банките и правителствените агенции отговарят на законите и разпоредбите за пране на пари, показват много проверки, но малък практически напредък. Много държави изглежда са по-загрижени да изглеждат добре на хартия, отколкото да предприемат истински мерки срещу прането на пари, каза Луис.

Асоциация на най-големите световни банки дори се оплака миналата година, че регулаторите се фокусират върху „техническото съответствие“, а не дали системите им „са действитело успешни в борбата срещу финансовата престъпност“.

Експлозия в Йерусалим

За някои финансови институции проблемният клиент е друга банка.

Една ранна сутрин през 2003 г. Стивън Авербах пътува в автобус № 6 в Йерусалим, когато мъж се втурва вътре в момента в който автобусът потегля от спирката.

„Имаше твърде много неща не на място“ с този мъж, спомня си Авербах, който е роден в Ню Джърси, но емигрира в Израел като тийнейджър. Мъжът бил с дълги черни панталони, бяла риза и черно сако, типичното облекло на ортодоксален евреин, но носи „обувки с остри върхове“, които не пасват на обеклото на сектата, а сакото му било издуто. В дясната си ръка държал устройство, което приличало на входен звънец.

Авербах, който преди това е бил главен инструктор по оръжията в полицията на Йерусалим, извадил личното си оръжие. Но когато бившето ченге се обръща с лице към мъжа, „той се самовзриви“, Авербах свидетелства във видеозапис след експлозията.

Взривът убива седем и ранява 20, а Авербах остава парализиран от врата надолу. Той почива през 2010 г. от дългосрочните последствия от нараняванията си.

По това време той и семейството му са ищци по съдебен иск в САЩ в който обвиняват йорданска финансова институция Arab Bank (Арабска банка) в преместване на средства, които са били използвани за финансиране на атентата в автобуса и други терористични атаки.

Досиетата FinCEN показват, че тъй като съдебният процес хвърля сянка върху Arab Bank, тя се възползва от работните си отношения с много по-голяма и по-влиятелна банка – Standard Chartered.

Базираната в Обединеното Кралство банка помага на клиентите на Arab Bank да получат достъп до финансовата система на САЩ след като регулаторите откриват недостатъци в контрола на йорданската банка над прането на пари през 2005 г. и я принуждават да ограничи дейностите си по прехвърляне на пари в САЩ.

Standard Chartered продължава отношенията си с Arab Bank докато искът срещу нея си проправя път през американските съдилища, и дори след като американските власти уведомяват Standard Chartered, че трябва да спре да обработва транзакции за заподозрени клиенти.

През 2012 г. регулаторите в Ню Йорк стигат до заключението, че Standard Chartered е „сключила тайна сделка с правителството на Иран“, за да прокара тайни транзакции за 250 милиарда долара, като „печели стотици милиони долари“ и оставя „американската финансова система уязвима за терористи, търговци на оръжие, наркобарони и корумпирани режими“. През декември 2012 г., Standard Chartered плаща глоба от 227 милиона долара на властите в САЩ и Ню Йорк съгласно споразумение за отложено наказателно преследване.

Въпреки официалните си ангажименти да стои далеч от подозрителни клиенти, Standard Chartered обработва 2055 транзакции на обща стойност над 24 милиона долара за клиенти на Arab Bank между септември 2013 г. и септември 2014 г., показват Досиетата FinCEN.

След това, в края на септември 2014 г., се появява още една причина за Standard Chartered да се отдръпне от Arab Bank. В съдебното дело за атентата в автобуса в Йерусалим през 2003 г. и други нападения, съдебните заседатели в Бруклин решават, че Arab Bank съзнателно е подпомагала тероризма чрез предаване на пари прикрити като благотворителни дарения на Хамас, палестинската паравоенна и политическа организация, която САЩ класифицират като терористична.

Повече от година по-късно служители от вътрешния отдел за наблюдение на спазването на закона на Standard Chartered изпращат на FinCEN доклад за подозрителна дейност потвърждаващ сделките на банката с Arab Bank за период, които дори продължава няколко дни след присъдата в Бруклин. В доклада се изразяват опасения за „потенциалното финансиране на тероризм“.

Но това не е краят.

Standard Chartered прехвърля още близо 12 милиона долара на клиенти на Arab Bank непосредствено след присъдата, чак до февруари 2016 г., според последващ доклад за подозрителна дейност, включен в Досиетата FinCEN. Много банкови преводи са записани като „благотворителни организации“, „подкрепа“ или „подаръци“.
В последващия доклад се отбелязва, че данните за плащанията пораждат същите опасения като тези изложени и в процеса в Бруклин, че „незаконни дейности“ се финансират „под прикритието на благотворителност“.

Гражданската присъда срещу Arab Bank е отменена, когато апелативен съд открива недостатъци в указанията на съдията към съдебните заседатели. След това Arab Bank се договаря с близо 600 жертви и роднини на жертвите срещу неизвестна сума.

Standard Chartered не отговори на въпроси на Концорсиума и неговите медийни партньори относно Arab Bank.
Тя просто каза в общо изявление, че „реалността на глобалната финансова система е, че винаги ще има опити за пране на пари и избягване на санкции, а отговорността на банките е да изграждат ефективни системи за проверка и наблюдение и ние работим в тясно сътрудничество с регулаторите и правоприлагащите органи за да изправим извършителите пред правосъдието.“

Награди и рискове

Защо банките придвижват подозрителни пари? Защото е изгодно.

Банките могат да попълнят приходите си с таксите, които събират докато парите се въртят в мрежа от сметки, често поддържани от корумпирани потребители на финансовата система. JPMorgan, например, е спечелила около половин милиард долара докато е била главният банкер на Бърни Мадоф, според разкрития по делото за несъстоятелност заведено след краха на неговата многомилиардна Понци схема.

Справянето със сенчести клиенти носи рискове.

JPMorgan е платила през 2011 г. 88,3 милиона долара за споразумения с регулаторите по повод твърденията им, че е нарушила икономическите санкции срещу Иран и други държави под ембарго на САЩ. През 2013 г. Министерството на финансите „зашлеви“ банката със заповед за „прекратяване и въздържане“, която описва „системни недостатъци“ в нейните усилия за борба с прането на пари, като отбелязва, че банката „не е успяла да идентифицира подозрителна дейност в значителни размери“.

През януари 2014 г., банката плаща 2,6 милиарда долара на американски агенции по споразумения свързани с разследвания на ролята й в схемата на Мадоф. JPMorgan е отчела печалби над два пъти по-високи от тази сума само за същото тримесечие и е била на път да достигне печалба от близо 22 милиарда долара за 2014 г.. Мадоф се призна за виновен и излежава 150-годишна присъда във федерален затвор.

Досиетата FinCEN показват, че след тези действия на правоприлагащите органи JPMorgan е продължила да прехвърля пари за хора замесени в предполагаеми финансови престъпления.

Сред тях е Джо Лоу, финансист, обвинен от властите в много страни, че е мозъкът зад присвояването на 4,5 милиарда долара от малайзийски фонд за икономическо развитие, наречен 1Malaysia Development Berhad, или 1MDB (1Малайзия Развитие Берхад). Според Досиетата, от 2013 г. до 2016 г. Лоу е преместил малко над 1,2 милиарда долара чрез JPMorgan.

Лоу за пръв път става известен с присъствието си на купони с Парис Хилтън, Леонардо ДиКаприо и други известни личности. Една вечер, докато се забавлява в нощен клуб на Френската Ривиера, той води война на наддаване на пари в брой за няколко бутилки шампанско Кристал (Cristal) и печели състезанието с крайна оферта от 2 милиона евро, според бестселър посветен на измамата 1MDB, наречен „Кит за милиарди“.

Лоу се появява за пръв път като ключова фигура в скандала с 1MDB, познат като „обира на века“ в медийни репортажи в началото на 2015 г.. През април 2016 г., Сингапур издава заповед за задържането му. Властите в САЩ, Малайзия и Сингапур все още го търсят за да го арестуват.

JPMorgan е прехвърляла и пари за компании и хора свързани с корупционни скандали във Венецуела, които допринесоха за възникването на една от най-тежките хуманитарни кризи в света. ООН съобщи тази година, че един от всеки трима венецуелци няма достъп до достатъчно храна, а милиони са избягали от страната.

Един от венецуелците, получил помощ от JPMorgan, е Алехандро „Пиохо” Истурис, бивш държавен служител, който е обвинен от американските власти като играч в международна схема за пране на пари. Прокурорите твърдят, че между 2011 и 2013 Истурис и други лица са искали подкупи за да фалшифицират държавни енергийни договори. Според Досиетата FinCEN, между 2012 г. и 2016 г. банката е преместила над 63 милиона долара за компании свързани с Истурис и схемата му за пране на пари.

Досиетата разкриват още, че JPMorgan е предоставяла банкови услуги на енергийната фирма Derwick Associates (Дъруик Асошийетс), която е спечелила над 5 милиарда долара от договори без обществени поръчки за ремонт на провалената електрификационна мрежа на Венецуела. Анализ от 2018 г. от отдела за Венецуела на неправителствената организация „Прозрачност без граници“ стига до заключението, че Derwick Associates не е успяла да осигури очаквания енергиен капацитет и е ощетила правителството на Венецуела с поне 2,9 милиарда долара.

Братовчедите Алехандро Бетанкур и Педро Требау са на малко повече от 20 години когато създават Derwick Associates.

Новини и публикации в интернет от 2011 г. твърдят за съмнения около братовчедите и Derwick Associates. След това компанията завежда дело в което твърди, че е жертва на клеветническа кампания и лъжливи обвинения, че е част от „престъпна група“. Искът е уреден при неизвестни условия.

Досиетата FinCEN показват, че Derwick Associates е използвала сметки в JPMorgan за преместване на поне 2,1 милиона долара през 2011 и 2012 г. и че банката е обработвала и други транзакции за неизвестни суми за Derwick и нейните управители поне до 2013 г..

Адвокат на Бетанкур каза: „Клиентът ми отрича да е извършил неправомерни действия“.

JPMorgan отбелязва в твърде общото си изявление, че през 2014 г. се е съгласила, че трябва да подобри контрола на прането на пари, и че оттогава е инвестирала „значителни ресурси“ за тази цел.

„Днес хиляди служители и стотици милиони долари са посветени на подпомагане на усилията за прилагане на закона и националната сигурност“, каза банката.

Бос на босовете

Секретните документи често показват, че банките обработващи трансгранични транзакции нямат представа с кого си имат работа, дори когато прехвърлят стотици милиони долари.

Да вземем случая с мистериозна компания, наречена ABSI Securities (ЕйБиЕсАй Секюритис). Досиетата FinCEN показват, че ABSI е реализира повече от 1 милиард долара транзакции чрез JPMorgan между януари 2010 г. и юли 2015 г..

Тази сума включва транзакции чрез директна банкова сметка в JPMorgan, която ABSI затваря през 2013 г., и чрез така наречените кореспондентски сметки, чрез които JPMorgan позволява на чуждестранни банки да обработват транзакции в щатски долари чрез техни собствени сметки.

Отдели на банката за наблюдение на спазването на закона базирани в операционния й център в Кълумбъс, Охайо, решават през 2015 г. да направят опит да разберат кой е действителният собственик на ABSI, след като руски сайт за разследващи новини съобщава, че компанията е свързана с лице от подземния свят на име Семьон Могилевич, който е описан като Бос на босовете на руските мафиотски групировки.

През 2009 г., когато включва Могилевич в списъка си с десетте най-търсени пресъпници, ФБР заявява, че престъпната му мрежа е замесена в трафик на оръжия и наркотици, изнудване и поръчкови убийства. Гардиън пише, че бомба поставена в автомобил е знаковият метод за неутрализиране на врага на палещия цигара от цигара внушителен украинец.

Досиетата показват, че служителите по спазване на закона не са могли да установят от документи за кухата фирма кой стои зад нея или каква е истинската й цел.

Въпреки че тези подробности остават неясни, JPMorgan е имала доста основания да проучи ABSI години по-рано. Тя оперира като куха фирма в Кипър, считан по това време за важен център за пране на пари и насочва стотици милиони долари чрез JPMorgan.

Могилевич, който е представен в документалния сериал на Нетфликс „Най-търсените в света“, чиято премиера беше през август, не беше открит за коментар за това разследване.

По-рано той каза: „Не съм шеф или активен участник в никакви престъпни групи.“

Могъщият долар

BuzzFeed използва изтеклият архив от доклади за подозрителна дейност от 2018 г. за свои публикации разкриващи тайни плащания към кухи фирми контролирани от Манафорт, който сега е под домашен арест заради федерална присъда по дело основано главно на тези транзакции.

Бивш служител на Министерството на финансите на САЩ, Натали Мейфлауър Сурс Едуардс, е обвинена в заговор за незаконен теч на документи от FinCEN към BuzzFeed.

BuzzFeed отказва да коментира източника си.

FinCEN и други американски агенции играят огромна роля в усилията срещу прането на пари по цял свят, най-вече защото перачите на пари и други престъпници имат същата цел като много други банкови клиенти с трансгранични операции – да превърнат парите си в щатски долари, които са де факто глобална валута. Малка група от предимно американски и европейски банки с големи операции в Ню Йорк събират такси за да вършат този трик, използвайки привилегирования си достъп до Федералния резерв на САЩ.

Американското законодателство поверява на банките първостепенната отговорност за предотвратяване на прането на пари, въпреки че в основата си дейността им стимулира абсолютно насочване в посока на запазване на парите, независимо дали са мръсни или чисти. Въпреки че банките са оправомощени да спрат дадена транзакция, ако тя изглежда подозрителна, те не са задължени да го правят. Банките просто трябва да подадат доклад за подозрителна дейност към FinCEN.

FinCEN, който има приблизително 300 служители, събира и пресява годишно над 2 милиона доклада за подозрителни дейности от банки и други финансови инситуции. Тя споделя информация с правоприлагащите агенции на САЩ и със звената за финансово разузнаване в други страни.

Отдавна изчезнали

В големите банки системите за засмукване на незаконни парични потоци разчитат на преуморени служители с недостатъчно ресурси, които обикновено работят в задни офиси далеч от централата и имат малко влияние в рамките на своите организации. Документите на FinCEN показват, че служителите наблюдаващи спазването на законите в големите банки често прибягват до едно просто търсене с Гугъл в опит да научат кой стои зад банкови преводи за стотици милиони долари.

Секретните документи показват, че в резултат на това банките често подават доклади за подозрителни дейности само след като транзакция или клиент влязат в новините или след правителствено запитване, обикновено след като парите отдавна са изчезнали.

В интервюта с Международния консорциум на разследващите журналисти и BuzzFeed над десетина бивши служители наблюдаващи спазването на законите в HSBC поставиха под въпрос ефективността на програмите на банката срещу прането на пари. Някои казаха, че банката не им е предоставила достатъчно ресурси за да се справят с големите потоци на пари в брой, а не само бегло да надникнат в тях, и че когато са искали информация за това кой стои зад големите транзакции, клоновете на HSBC извън САЩ често са ги игнорирали.

В дело заведено през декември 2019 г. във федералния съд в Ню Йорк, се твърди, че служители на Standard Chartered Bank, които са се противопоставяли на незаконни транзакции са били не само игнорирани, но и заплашвани, тормозени и уволнявани.

Ищците Джулиан Найт и Аншуман Чандра твърдят, че са били принудени да напуснат ръководни длъжности в банката, след като тя е разбрала, че са сътрудничили на разследване на ФБР за прехвърляне на пари от Standard Chartered към санкционирани от САЩ субекти в Иран, Либия, Судан и Мианмар.

Искът твърди, че Standard Chartered е участвала в „изключително усъвършенствана схема за пране на пари“, променяйки имената на субектите санкционирани от САЩ в документи за транзакциите и създавайки технологично решение, което позволява незаконни транзакции да остават незабелязани от Федералния резерв на САЩ.

Чандра, който е работил в клона на банката в Дубай от 2011 до 2016 г., стига до заключението, че заобикалянето на санкциите е помогнало значително за организирането на терористични атаки, „които са убили и ранили войници на ръководената от САЩ коалиция, както и много невинни цивилни“.

В исковата молба се казва, че схемата е позволила на банката да се възползва от „високата премия“, която Иран и неговите агенти са готови да платят за да конвертират санкционираните ирански риали в долари.

„Сигурно можете да водите подобно шоу без да ви хванат в продължение на няколко месеца, ако става въпрос за малка група вътре в банката,“ казва Чандра в интервю за BuzzFeed. „Но нещо подобно да се случва в продължение на години и да достигне размери от милиарди долари, това значи, че някой на върха е трябвало да зададе въпроса как точно банката печели тези пари.“

Чандра и Найт твърдят, че банката е признала само част от нарушенията си и е излъгала, че е спряка незаконните транзакции, когато приема налагането на санкции като част от споразумението си с американските власти за отложено наказателно преследване през 2012 г..

Агенцията удължава пробационния срок на банката отново и отново в продължение на няколко години. След това, през 2019 г., банката плаща още 1,1 милиарда долара за установени продължаващи нарушения на санкциите срещу Иран и други страни и се разбира с прокуратурата да удължи пакта си за отложено преследване за още две години.
Standard Chartered не отговори на въпроси на Консорциума и партньорите му за твърденията на бившите й служители. Standard Chartered посочва в документите по делото, че тези твърдения са безпочвени и неправдоподобни.

Досиетата FinCen: България е високорискова държава, в която лесно се перат пари

Post Syndicated from Екип на Биволъ original https://bivol.bg/fincen-files-bulgaria-intro.html

неделя 20 септември 2020


България е посочена като държава с висок риск за пране на пари в доклади на Мрежата за противодействие на финансовите престъпления към Министерството на финансите на САЩ. Агенцията, известна съкратено като FinCEN, е разузнавателното звено, което стои в основата на глобалната система за борба с прането на пари. Така наречените Досиета FinCen разкриват, че в нашата страна се осъществяват съмнителни банкови операции за десетки милиони долари, които са покровителствани на правителствено ниво. В някои от тях са замесени и приближени на властта лица.

Доклад на FinCen от 2015 г., в който се разглеждат трансакции на фирми със седалище в България. Страната ни е идентифицирана като високорискова за пране на пари.

Докладите със статут на топ-секретни документи са над 2100 на брой. Те са получени от източник на сайта Buzzfeed и споделени с Международния консорциум на разследващите журналисти ICIJ. Консорциумът започна да публикува Досиетата FinCen на 20 септември 2020 г. след повече от година работа на екип от над 400 журналисти от 110 медийни организации в 88 държави. Биволъ е официалният партньор на ICIJ за България.

FinCen получава информация за съмнителни преводи от банки, които имат право да осъществяват транзакции в американската валута. На базата на тази информация се попълват специални формуляри SAR (suspicious activity report), които съдържат информация както за конкретните банкови преводи, така и справки за фирмите или лицата въвлечени в трансакциите. За тези справки се ползват публични и закрити източници, както и информация от базата данни на доларовите преводи, които се регистрират в САЩ. Банките, които нямат право да оперират директно в долари са длъжни да минават през кореспондентски сметки на американски банки и така всички доларови преводи стават видими в САЩ, дори да са осъществени между две банки в една и съща страна.

В Досиетата FinCen се съдържа информация за преводи за над 2 трилиона долара. Изтеклите данни са за периода 2011 – 2017 г. и са нищожна част от общия брой доклади за този период, които са над 12 милиона. Въпреки това в тях се откриват шокиращи данни за пране на пари в почти всички държави.

Обзорният материал на ICIJ за Досиетата FinCen разкрива, че глобални банки като HSBC, JPMorgan и други са обслужвали олигарси, наркодилъри и терористи, дори след като са получавали предупреждения. Има случаи в които банките продължават да местят незаконни средства дори след като американските власти са ги предупредили, че им предстои наказателно преследване ако не престанат да правят бизнес с мафиоти, измамници или корумпирани режими.

Разследванията, базирани на архива с докладите на FinCen, ще бъдат публикувани в следващите дни от партньорските медии на Консорциума. Биволъ работи върху няколко разследващи материала за България, които ще бъдат публикувани в близките дни и седмици.

България – рискова или безопасна държава за пране на пари?

България е спомената в над 90 доклада, но като обекти със съмнителна активност са посочени само 11 фирми и лица с адреси в България. Другите отбелязвания са за фирми или лица, които са регистрирани и оперират от други юрисдикции, но имат връзка с България. Голяма част от докладите съдържат неизвестна и поверителна информация, която осветява скрити от обществото процеси и злоупотреби с власт и пари, като някои от тях надхвърлят националния контекст и са свързани със световни финансови и политически скандали.

Важна е общата оценка за страната ни, която недвусмислено ни поставя сред рисковите дестинации, в които прането на пари е особено лесно. В Европейския съюз с такъв статут се славят още Кипър, Латвия и Малта.

За проблемът с прането на пари в България се знае и от докладите на Държавния департамент, изтекли в Wikileaks. В частта за България, публикувана от Биволъ, има доклад за “банките гнили ябълки“, които според американските дипломати перат парите на българската организирана престъпност. Конкретно бяха посочени банките с български собственици: ПИБ, КТБ (фалирала), Инвестбанк (на Петя Славова), СиБанк (тогава на Цветелина Бориславова, но сега с нов чуждестранен собственик), ДЗИ (тогава на Емил Кюлев, сега с нов чуждестранен собственик), Общинска Банка, Интернешънал Асет Банк (свързвана с Маджо) и ЦКБ (на групировката от Варна ТИМ).

Миналата година България беше критикувана и от Европейската комисия за слабите резултати на ДАНС в борбата срещу прането на пари. В първоначалната версия на доклада за макроикономическите дисбаланси, който е част от Европейския семестър се посочваше, че докладваните съмнителни трансакции са в по-голямата си част свързани с български политици.

“Потенциални финансови престъпления не се разследват качествено. 2/3 от съмнителните трансакции, докладвани от финансовите институции в дирекция “Финансово разузнаване” (в ДАНС, б. р.), включват местни политически фигури, но към тези случаи не се предприемат необходимите правораздавателни действия” – пишеше в първата версия на документа.

Няколко месеца по-късно Комисията тихомълком промени доклада си и тези тревожни заключения отпаднаха, като дори се превърнаха в “напредък”.

Туширането на нелицеприятните констатации не отменя факта, че в Брюксел са наясно с практиките у нас, а проблемите видяни там са по-скоро на ниво правоохранителни органи – ДАНС и Прокуратурата, които не реагират на докладите от финансовите институции.

Досиетата FinCen допълват картината с лоши практики и в самите финансови институции, които едва ли са докладвани надлежно. Сред тях са поддържането от български банки на сметки на офшорни фирми с номинални собственици и придвижването на големи суми през тях към други високорискови дестинации.

Парадоксално, в неотдавнашен доклад на Института в Базел, България се нарежда сред страните с най-малък риск от пране на пари, заедно с Швеция и Естония.

Но разследванията за мащабните схеми “Азербайджанска перачница” и “Перачница Тройка“, в които участва и Биволъ разкриха, че дори в държави като Дания и Естония е било възможно да се организиран хъб за изпиране на милиарди.

Това разминаване между академичните и разузнавателните източници очевидно се дължи не на реалната ситуация в страната, а на приетата законодателна и регулаторна рамка, която на хартия е добра. Въпросът е дали се спазва. Многобройни са примерите, че правилата се нарушават или игнорират от всички институции, които трябва да следят и да предотвратяват рисковите банкови операции в държавата. А чуждите разузнавателни агенции са напълно наясно със случващото се. Досиетата FinCen доказват това черно на бяло.

 

Биков безмилостно разобличи корупцията в западните медии!

Post Syndicated from original https://bivol.bg/toma-bikov-media.html

неделя 20 септември 2020


Нали обективността изисква да се анализират всички гледни точки, та седя и си мисля. Ами, ако депутатът от ГЕРБ Тома Биков е прав? Кой пък казва, че западните медии са неподкупни? Някой е извадил едни пачки от тайно нощно шкафче, занесъл ги е на „Шпигел“, „Политико“ и цялата там плеяда прехвалени и уважавани вестници и воала! Те ти, брате, цела кампания срещу ГЕРБ! Яростна, безочлива, безцеремонна и неблагодарна.

Та нима Бойко и компания не осигуриха на доскорошните ни европейски партньори евтина и в голямата си част доста образована работна ръка във фертилна възраст? При това повече от милион човека атакуваха трудовия пазар в Западна Европа само по време на неговите управления. И сега точно от запад да го погнат с критики… Бива ли така, питам се аз и в главата ми все повече избуява червейчето на съмнението.

Как така пък почти никоя родна медия не видя нищо нередно в управлението на ГЕРБ, а тия изнежени от стабилност, охолен живот, върховенство на закона и липса на корупция западни журналисти се врат, където не им е работа и разриват помийни ями, в които ние имаме негласен национален консенсус да не ръчкаме? Кой изобщо им го позволява? Толкова ли са цъфнали, вързали и останали без никакви проблеми родните им държави, за да се бъркат в чужди работи? Нима някоя родна медия си е позволила да вади документи и да повдига обвинения срещу който и да е западен политически или икономически лидер? Но, така е, когато си възпитан, дисциплиниран и знаеш кое ти е позволено и кое – не. На запад явно журналистите не знаят граници и си пъхат носовете, където им скимне.

Продължавам да анализирам и неусетно се нахъсвам все повече. На въпроса дали може да даде повече конкретика кой е платил, на коя медия, за коя публикация, Тома Биков се прояви като истински мъж на място и рече, че няма да влиза в никакви подробности, защото няма доказателства. Подозирам, че просто си замълча, за да не се налага да споделя източниците си и да ги поставя под угрозата международната медийна мафия, която явно се е мобилизирала срещу ГЕРБ, да им отмъсти.

Само преди дни негов млад колега депутат, отново от котилото на Борисов, сравни вземането на отношение от страна на ЕС по въпросите на корупцията, липсата на разделение на властите и редица други неуредици в България с онова време, когато чакахме знак от Кремъл, за да знаем правилно ли градим комунизЪма или не чак толкова. И, като се замисли човек, си е точно така.

Откъде накъде ще ни се бъркат тия във вътрешните дела? И политици, и журналисти. Кой ви е питал какво мислите за България? Или се възползвате от призивите на ония протестъри, дето се възмущаваха, че си затваряте очите за случващото се с всички власти у нас? Каквото и да е, ние сме суверенна държава и не трябва да позволяваме разни медии и брюкселски зелки да мътят водата на премиера и главния прокурор! Каквито са такива са, ама са си наши!

С какво ЦВИК, медиите на Пеевски, Домусчиев и компания и работещите в тях мисирки са по-лоши от прехвалените западни сайтове, вестници, телевизии и журналисти? Обективната действителност е измишльотина. Всеки е свободен да представя събитията както прецени. Или както му платят. А виждаме, че Тома Биков знае на кого плащат и къде наистина се прави качествена журналистика, съвсем незаслужено поставена на 111-о място по свобода.

Напротив, нашите медии са си свободни и затова си пишат каквото им душа (джоб) сака, а не разни материалчета, базиращи се върху документи и факти. Та нима документите и фактите не ограничават свободата, полета на мисълта? А за друго замисляли ли сте се? Ако в България решиш да се изказваш по медиите за злоупотреби на властта, моментално те уволняват и преставаш да си журналист. На кого помагаш с това? На свободата на словото ли или на поредния мисир, чакащ за мястото ти? Не е ли най-висша форма на свобода да се примириш със ситуацията, в която живееш, да се пригодиш към нея и да си караш кефа, вместо да заравяш перото си в дълбоки плаващи пясъци, както правят западните подкупни медии?

Не знам кой им плаща, но след като Тома Биков казва, че им се плаща, значи е така. На него ли да вярваме или на някакви си очевидни истини, за които дори и в крепостта на фрау Меркел вече не си затварят очите? Ако направим второто, не е нито патриотично, нито православно. Изобщо, като цяло, неудобните въпроси и ваденето на показ на разни уличаващи документи не са нито патриотични, нито православни. Те са гнусно достижение на чужди, предимно протестантски народи. Ето още една логическа връзка – протестанти, протестъри. Да не мислите, че е случайно?

Шок! Ужас! Сензация! Протестъри плащат на протестанти, за да резилят премиера Борисов и прокурора Гешев в поръчкови западни медии!

Не, че нещо, просто давам идея на праволинейните родни журналисти за тема, която могат да развият с голям успех. А през това време аз ще продължавам да изсмуквам от пръстите си нови и нови доказателства за правотата на Тома Биков да разобличава подкупността на западните драскачи.

Code a GUI live with Digital Making at Home

Post Syndicated from Kevin Johnson original https://www.raspberrypi.org/blog/code-a-gui-live-with-digital-making-at-home/

This week, we’re introducing young people around the world to coding GUIs, or graphical user interfaces. Let them tune in this Wednesday at 5.30pm BST / 12.30pm EDT / 10.00pm IST for a fun live stream code-along session with Christina and special guest Martin! They’ll learn about GUIs, can ask us questions, and get to code a painting app.

For beginner coders, we have our Thursday live stream at 3.30pm PDT / 5.30pm CDT / 6.30pm EDT, thanks to support from Infosys Foundation USA! Christina will share more fun Scratch coding for beginners.

Now that school is back in session for many young people, we’ve wrapped up our weekly code-along videos. You and your children can continue coding with us during the live stream, whether you join us live or watch the recorded session on-demand. Thanks to everyone who watched our more than 90 videos and 45 hours of digital making content these past month!

The post Code a GUI live with Digital Making at Home appeared first on Raspberry Pi.

The collective thoughts of the interwebz

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close