SlideShare ist ein Scribd-Unternehmen logo
1 von 104
Downloaden Sie, um offline zu lesen
1
KSQL and Security:
The current state of affairs,
and where it’s headed
Victoria Xia
2
A Little about… You?
3
?
A Little about… You?
4
Outline
● Background
● Securing KSQL’s connections
○ Encryption
○ Authentication
○ Authorization
○ Quotas
● KSQL-specific considerations
● Limitations and Futures
5
KSQL 101
6
KSQL 101
KSQL
Server
KSQL
Server
7
KSQL 101
KSQL
Server
KSQL
Server
KSQL
Server
KSQL
Server
8
KSQL 101
KSQL
Server
KSQL
Server
9
KSQL 101
KSQL
Server
KSQL
Server
CREATE STREAM purchases (
productID BIGINT,
quantity INT,
storeLocation VARCHAR)
WITH (
KAFKA_TOPIC=’purchases’,
VALUE_FORMAT=’JSON’);
10
KSQL 101
KSQL
Server
KSQL
Server
CREATE STREAM purchases (
productID BIGINT,
quantity INT,
storeLocation VARCHAR)
WITH (...);
SELECT
productID, quantity * 10
FROM purchases;
11
KSQL 101
KSQL
Server
KSQL
Server
CREATE STREAM purchases (
productID BIGINT,
quantity INT,
storeLocation VARCHAR)
WITH (...);
SELECT
productID, SUM(quantity)
FROM purchases
GROUP BY productID;
12
KSQL 101
KSQL
Server
KSQL
Server
CREATE STREAM purchases (
productID BIGINT,
quantity INT,
storeLocation VARCHAR)
WITH (...);
SELECT
productID, SUM(quantity)
FROM purchases
WHERE storeLocation=’NYC’
GROUP BY productID;
13
KSQL 101
KSQL
Server
KSQL
Server
CREATE STREAM purchases (
productID BIGINT,
quantity INT,
storeLocation VARCHAR)
WITH (...);
CREATE TABLE NYC_totals
AS SELECT
productID, SUM(quantity)
FROM purchases
WHERE storeLocation=’NYC’
GROUP BY productID;
14
KSQL 101
CREATE TABLE NYC_totals
AS SELECT
productID, SUM(quantity)
FROM purchases
WHERE storeLocation=’NYC’
GROUP BY productID;
kafka
Streams
purchases NYC_totalsintermediary
topic
intermediary
topic
15
CREATE STREAM purchases (
productID BIGINT,
quantity INT,
storeLocation VARCHAR)
WITH (
KAFKA_TOPIC=’purchases’,
VALUE_FORMAT=’Avro’);
KSQL 101
Schema
Registry
KSQL
Server
KSQL
Server
16
KSQL 101
Schema
Registry
KSQL
Server
KSQL
Server
CREATE STREAM purchases (
productID BIGINT,
quantity INT,
storeLocation VARCHAR)
WITH (
KAFKA_TOPIC=’purchases’,
VALUE_FORMAT=’Avro’);
17
Interactive Use
Schema
Registry
KSQL
Server
KSQL
Server
18
Interactive Use
Schema
Registry
KSQL
Server
KSQL
Server
REST
REST
19
Interactive Use
Schema
Registry
REST
KSQL
Server
KSQL
Server
REST
REST
20
Interactive Use
Schema
Registry
CLI
REST
KSQL
Server
KSQL
Server
REST
REST
21
Interactive Use
Schema
Registry
CLI
REST
UI
KSQL
Server
KSQL
Server
REST
REST
22
Non-interactive (Headless) Use
Schema
Registry
KSQL
Server
KSQL
Server
23
KSQL’s Connections
Schema
Registry
CLI
REST
UI
KSQL
Server
KSQL
Server
REST
REST
24
Motivation: Encryption
25
Motivation: Authentication
26
Motivation: Authentication
27
Solution: TLS
28
Solution: TLS
29
KSQL <-> Kafka: TLS
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-kafka-encrypted-communication
https://kafka.apache.org/documentation/#security_ssl
listeners=
PLAINTEXT://host.name:port
bootstrap.servers=
http://host.name:port
30
bootstrap.servers=
https://host.name:port
security.protocol=SSL
ssl.truststore.location=
/path/to/truststore.jks
ssl.truststore.password=zzz
listeners=
SSL://host.name:port
ssl.keystore.location=
/path/to/keystore.jks
ssl.keystore.password=xxxx
ssl.key.password=yyyy
KSQL <-> Kafka: TLS
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-kafka-encrypted-communication
https://kafka.apache.org/documentation/#security_ssl
31
listeners=
SSL://host.name:port
ssl.keystore.location=
/path/to/keystore.jks
ssl.keystore.password=xxxx
ssl.key.password=yyyy
bootstrap.servers=
https://host.name:port
security.protocol=SSL
ssl.truststore.location=
/path/to/truststore.jks
ssl.truststore.password=zzz
KSQL <-> Kafka: TLS
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-kafka-encrypted-communication
https://kafka.apache.org/documentation/#security_ssl
32
listeners=
SSL://host.name:port
ssl.keystore.location=
/path/to/keystore.jks
ssl.keystore.password=xxxx
ssl.key.password=yyyy
ssl.client.auth=required
ssl.truststore.location=
/path/to/truststore.jks
ssl.truststore.password=zzzz
bootstrap.servers=
https://host.name:port
security.protocol=SSL
ssl.truststore.location=
/path/to/truststore.jks
ssl.truststore.password=zzz
ssl.keystore.location=
/path/to/keystore.jks
ssl.keystore.password=xxx
ssl.key.password=yyy
KSQL <-> Kafka: TLS
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-kafka-encrypted-communication
https://kafka.apache.org/documentation/#security_ssl
33
KSQL <-> Kafka: SASL
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-kafka-authentication
https://kafka.apache.org/documentation/#security_sasl
● GSSAPI (Kerberos)
● OAUTHBEARER
● SCRAM
● PLAIN
34
KSQL <-> Kafka: SASL
listeners=
SASL_SSL://host.name:port
security.protocol=SASL_SSL
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-kafka-authentication
https://kafka.apache.org/documentation/#security_sasl
35
KSQL <-> Kafka: SASL
listeners=
SASL_SSL://host.name:port
sasl.enabled.mechanisms=PLAIN
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-kafka-authentication
https://kafka.apache.org/documentation/#security_sasl
36
KSQL_OPTS=
-Djava.security.auth.login.config=
/path/to/jaas_config.file
KSQL <-> Kafka: SASL
listeners=
SASL_SSL://host.name:port
sasl.enabled.mechanisms=PLAIN
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=<jaas_contents>
KAFKA_OPTS=
-Djava.security.auth.login.config=
/path/to/jaas_config.file
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-kafka-authentication
https://kafka.apache.org/documentation/#security_sasl
OR
37
Motivation: Authorization
38
Motivation: Authorization
39
Motivation: Authorization
Read Write Delete
alices_topic ? ? ?
bobs_topic ? ? ?
secrets_topic ? ? ?
40
Motivation: Authorization
Read Write Delete
alices_topic ✔ ✔ ✔
bobs_topic ✔
secrets_topic
41
OperationPrincipal
KSQL <-> Kafka: ACLs
Permission Type Pattern Name
Resource
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Host
42
*
12.1.1.0ReadAllowUser:Alice
OperationPrincipal
KSQL <-> Kafka: ACLs
Permission Type Pattern Name
Resource
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Host
Topic Literal foo
WriteDenyUser:Bob Topic Prefixed prod-
43
[ksql.host]?Allow[ksql-user]
OperationPrincipal
KSQL <-> Kafka: ACLs
Permission Type Pattern Name
Resource
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Host
? ? ?
44
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
KSQL <-> Kafka: ACLs
45
kafka-clusterLiteralClusterDescribeConfigs
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
KSQL <-> Kafka: ACLs
46
kafka-clusterLiteralClusterDescribeConfigs
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
CREATE STREAM output_stream AS SELECT ... FROM input_stream;
KSQL <-> Kafka: ACLs
47
kafka-clusterLiteralClusterDescribeConfigs
Read Topic Literal [ input topics ]
[ output topics ]LiteralTopicWrite
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
CREATE STREAM output_stream AS SELECT ... FROM input_stream;
KSQL <-> Kafka: ACLs
48
kafka-clusterLiteralClusterDescribeConfigs
Read Topic Literal [ input topics ]
[ output topics ]LiteralTopicWrite
Create Topic Literal [ output topics (that don’t exist) ]
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
CREATE STREAM output_stream AS SELECT ... FROM input_stream;
KSQL <-> Kafka: ACLs
49
CREATE STREAM output_stream AS SELECT ... FROM input_stream;
kafka-clusterLiteralClusterDescribeConfigs
Read Topic Literal [ input topics ]
[ output topics ]LiteralTopicWrite
Create Topic Literal [ output topics (that don’t exist) ]
_confluent-ksql-<ksql.service.id>PrefixedGroupAll
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
KSQL <-> Kafka: ACLs
50
kafka-clusterLiteralClusterDescribeConfigs
Read Topic Literal [ input topics ]
[ output topics ]LiteralTopicWrite
Create Topic Literal [ output topics (that don’t exist) ]
_confluent-ksql-<ksql.service.id>PrefixedGroupAll
All Topic Prefixed _confluent-ksql-<ksql.service.id>
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
KSQL <-> Kafka: ACLs
51
kafka-clusterLiteralClusterDescribeConfigs
Read Topic Literal [ input topics ]
[ output topics ]LiteralTopicWrite
Create Topic Literal [ output topics (that don’t exist) ]
_confluent-ksql-<ksql.service.id>PrefixedGroupAll
All Topic Prefixed _confluent-ksql-<ksql.service.id>
<ksql.logging.processing.topic.name>LiteralTopicAll
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
KSQL <-> Kafka: ACLs
52
[ input topics ]LiteralTopicRead
kafka-clusterLiteralClusterDescribeConfigs
[ output topics ]LiteralTopicWrite
Create Topic Literal [ output topics (that don’t exist) ]
_confluent-ksql-<ksql.service.id>PrefixedGroupAll
All Topic Prefixed _confluent-ksql-<ksql.service.id>
<ksql.logging.processing.topic.name>LiteralTopicAll
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
KSQL <-> Kafka: ACLs
53
[ output topics (that don’t exist) ]
[ output topics ]Literal
LiteralTopic
Topic
Create
Write
kafka-clusterLiteralClusterDescribeConfigs
Read Topic Literal [ input topics ]
_confluent-ksql-<ksql.service.id>PrefixedGroupAll
All Topic Prefixed _confluent-ksql-<ksql.service.id>
<ksql.logging.processing.topic.name>LiteralTopicAll
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
KSQL <-> Kafka: ACLs
54
Configure ksql.output.topic.name.prefix
KSQL <-> Kafka: ACLs
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
55
CREATE TABLE results
AS SELECT …
FROM events;
Configure ksql.output.topic.name.prefix
KSQL <-> Kafka: ACLs
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Output topic:
<ksql.output.topic.name.prefix>RESULTS
56
[ output topics (that don’t exist) ]
[ output topics ]
Literal
Literal
kafka-clusterLiteralClusterDescribeConfigs
Read Topic Literal [ input topics ]
TopicWrite
Create Topic
_confluent-ksql-<ksql.service.id>PrefixedGroupAll
All Topic Prefixed _confluent-ksql-<ksql.service.id>
<ksql.logging.processing.topic.name>LiteralTopicAll
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
KSQL <-> Kafka: ACLs
57
Prefixed
Prefixed
<ksql.output.topic.name.prefix>
<ksql.output.topic.name.prefix>
kafka-clusterLiteralClusterDescribeConfigs
Read Topic Literal [ input topics ]
TopicWrite
Create Topic
_confluent-ksql-<ksql.service.id>PrefixedGroupAll
All Topic Prefixed _confluent-ksql-<ksql.service.id>
<ksql.logging.processing.topic.name>LiteralTopicAll
TypeOperation Pattern
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Resource Name
KSQL <-> Kafka: ACLs
58
CREATE TABLE results
AS SELECT …
FROM events;
Configure ksql.output.topic.name.prefix
KSQL <-> Kafka: ACLs
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
Output topic:
<ksql.output.topic.name.prefix>RESULTS
59
CREATE TABLE results
AS SELECT …
FROM events;
Configure ksql.output.topic.name.prefix
KSQL <-> Kafka: ACLs
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-authorization-of-ksql-with-kafka-acls
https://kafka.apache.org/documentation/#security_authz
CREATE TABLE results
WITH (KAFKA_TOPIC=‘foo’)
AS SELECT …
FROM events;
Output topic:
<ksql.output.topic.name.prefix>RESULTS
Output topic:
foo
60
Motivation: Quotas
61
Motivation: Quotas
62
Motivation: Quotas
63
KSQL <-> Kafka: Quotas
● Network bandwidth quotas
Learn more:
https://kafka.apache.org/documentation/#design_quotas
https://kafka.apache.org/documentation/#quotas
https://docs.confluent.io/current/ksql/docs/capacity-planning.html#kafka
producer_byte_rate=1024
consumer_byte_rate=2048
64
KSQL <-> Kafka: Quotas
● Network bandwidth quotas
● Request rate quotas
Learn more:
https://kafka.apache.org/documentation/#design_quotas
https://kafka.apache.org/documentation/#quotas
https://docs.confluent.io/current/ksql/docs/capacity-planning.html#kafka
producer_byte_rate=1024
consumer_byte_rate=2048
request_percentage=200
65
KSQL <-> Kafka: Quotas
● Network bandwidth quotas
● Request rate quotas
● By user and/or client-id
Learn more:
https://kafka.apache.org/documentation/#design_quotas
https://kafka.apache.org/documentation/#quotas
https://docs.confluent.io/current/ksql/docs/capacity-planning.html#kafka
user=user1, client-id=clientA:
producer_byte_rate=1024
consumer_byte_rate=2048
request_percentage=200
66
KSQL <-> Kafka: Quotas
● Network bandwidth quotas
● Request rate quotas
● By user and/or client-id
○ Configure via client.id in server properties
Learn more:
https://kafka.apache.org/documentation/#design_quotas
https://kafka.apache.org/documentation/#quotas
https://docs.confluent.io/current/ksql/docs/capacity-planning.html#kafka
user=user1, client-id=clientA:
producer_byte_rate=1024
consumer_byte_rate=2048
request_percentage=200
67
KSQL’s Connections
Schema
Registry
CLI
REST
UI
KSQL
Server
KSQL
Server
REST
REST
68
KSQL <-> Schema Registry: TLS
listeners=
http://host.name:port
ksql.schema.registry.url=
http://host.name:port
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-secured-sr-long
https://docs.confluent.io/current/schema-registry/docs/security.html#schema-registry-http-https
69
ksql.schema.registry.url=
https://host.name:port
ksql.schema.registry.ssl.truststore
.location=/path/to/truststore
ksql.schema.registry.ssl.truststore
.password=xxx
listeners=
https://host.name:port
ssl.keystore.location=
/path/to/keystore
ssl.keystore.password=xxxx
ssl.key.password=yyyy
KSQL <-> Schema Registry: TLS
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-secured-sr-long
https://docs.confluent.io/current/schema-registry/docs/security.html#schema-registry-http-https
70
ksql.schema.registry.url=
https://host.name:port
ksql.schema.registry.ssl.truststore
.location=/path/to/truststore
ksql.schema.registry.ssl.truststore
.password=xxx
listeners=
https://host.name:port
ssl.keystore.location=
/path/to/keystore
ssl.keystore.password=xxxx
ssl.key.password=yyyy
KSQL <-> Schema Registry: TLS
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-secured-sr-long
https://docs.confluent.io/current/schema-registry/docs/security.html#schema-registry-http-https
71
ksql.schema.registry.url=
https://host.name:port
ksql.schema.registry.ssl.truststore
.location=/path/to/truststore
ksql.schema.registry.ssl.truststore
.password=xxx
ksql.schema.registry.ssl.keystore
.location=/path/to/keystore
ksql.schema.registry.ssl.keystore
.password=yyy
ksql.schema.registry.ssl.keypass
word=zzz
listeners=
https://host.name:port
ssl.keystore.location=
/path/to/keystore
ssl.keystore.password=xxxx
ssl.key.password=yyyy
ssl.client.auth=true
ssl.truststore.location=
/path/to/truststore
ssl.truststore.password=zzzz
KSQL <-> Schema Registry: TLS
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-secured-sr-long
https://docs.confluent.io/current/schema-registry/docs/security.html#schema-registry-http-https
72
KSQL <-> Schema Registry: Basic HTTP Auth
authentication.method=BASIC
authentication.roles=user
authentication.realm=SR-Props
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-secured-sr-long
authentication.method=BASIC
authentication.roles=user
authentication.realm=
SchemaRegistry-Props
73
KSQL <-> Schema Registry: Basic HTTP Auth
authentication.method=BASIC
authentication.roles=user
authentication.realm=SR-Props
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-secured-sr-long
authentication.method=BASIC
authentication.roles=user
authentication.realm=
SchemaRegistry-Props
SCHEMA_REGISTRY_OPTS=
-Djava.security.auth.login.config=
/path/to/jaas_config.file
SchemaRegistry-Props {
...
};
74
authentication.method=BASIC
authentication.roles=user
authentication.realm=
SchemaRegistry-Props
SchemaRegistry-Props {
...
};
KSQL <-> Schema Registry: Basic HTTP Auth
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-secured-sr-long
SCHEMA_REGISTRY_OPTS=
-Djava.security.auth.login.config=
/path/to/jaas_config.file
75
KSQL <-> Schema Registry: Basic HTTP Auth
authentication.method=BASIC
authentication.roles=user
authentication.realm=SR-Props
ksql.schema.registry.basic.auth
.credentials.source=USER_INFO
ksql.schema.registry.basic.auth
.user.info=ksqluser:password
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-secured-sr-long
authentication.method=BASIC
authentication.roles=user
authentication.realm=
SchemaRegistry-Props
SCHEMA_REGISTRY_OPTS=
-Djava.security.auth.login.config=
/path/to/jaas_config.file
SchemaRegistry-Props {
...
};
76
Securing KSQL’s Connections
KSQL <-> Kafka KSQL <->
Schema Registry
Encryption TLS TLS
Authentication TLS
SASL
TLS
Basic HTTP Auth
Authorization ACLs
Quotas Network
CPU
77
KSQL’s Connections
Schema
Registry
CLI
REST
UI
KSQL
Server
KSQL
Server
REST
REST
78
KSQL Client <-> Server: TLS
listeners=
http://host.name:port
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-https
79
KSQL Client <-> Server: TLS
listeners=
http://host.name:port
./bin/ksql http://hostname.port
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-https
80
./bin/ksql
--config-file my-cli.properties
https://hostname.port
listeners=
https://host.name:port
ssl.keystore.location=
/path/to/keystore
ssl.keystore.password=xxxx
ssl.key.password=yyyy
KSQL Client <-> Server: TLS
ssl.truststore.location=
/path/to/truststore
ssl.truststore.password=xxx
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-https
81
./bin/ksql
--config-file my-cli.properties
https://hostname.port
listeners=
https://host.name:port
ssl.keystore.location=
/path/to/keystore
ssl.keystore.password=xxxx
ssl.key.password=yyyy
KSQL Client <-> Server: TLS
ssl.truststore.location=
/path/to/truststore
ssl.truststore.password=xxx
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-https
82
ssl.truststore.location=
/path/to/truststore
ssl.truststore.password=xxx
ssl.keystore.location=
/path/to/keystore
ssl.keystore.password=yyy
ssl.key.password=zzz
listeners=
https://host.name:port
ssl.keystore.location=
/path/to/keystore
ssl.keystore.password=xxxx
ssl.key.password=yyyy
ssl.client.auth=true
ssl.truststore.location=
/path/to/truststore
ssl.truststore.password=zzzz
KSQL Client <-> Server: TLS
./bin/ksql
--config-file my-cli.properties
https://hostname.port
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-https
83
KSQL Client <-> Server: Basic HTTP Auth
authentication.method=BASIC
authentication.roles=user
authentication.realm=
KsqlServer-Props
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-basic-http-authentication
84
KSQL Client <-> Server: Basic HTTP Auth
authentication.method=BASIC
authentication.roles=user
authentication.realm=
KsqlServer-Props
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-basic-http-authentication
KSQL_OPTS=
-Djava.security.auth.login.config=
/path/to/jaas_config.file
KsqlServer-Props {
...
};
85
KSQL Client <-> Server: Basic HTTP Auth
authentication.method=BASIC
authentication.roles=user
authentication.realm=
KsqlServer-Props
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-basic-http-authentication
KSQL_OPTS=
-Djava.security.auth.login.config=
/path/to/jaas_config.file
KsqlServer-Props {
...
};
86
./bin/ksql
--user username
--password mypassword
https://hostname.port
KSQL Client <-> Server: Basic HTTP Auth
authentication.method=BASIC
authentication.roles=user
authentication.realm=
KsqlServer-Props
Learn more:
https://docs.confluent.io/current/ksql/docs/installation/server-config/security.html#configuring-ksql-for-basic-http-authentication
KSQL_OPTS=
-Djava.security.auth.login.config=
/path/to/jaas_config.file
KsqlServer-Props {
...
};
87
KSQL Client <-> Server: Custom Plugins
Learn more:
https://github.com/confluentinc/rest-utils/blob/b0418a69b8fd40a55446d31da98e4da3f25b6b93/core/src/main/java/io/confluent/rest/
RestConfig.java#L229
https://github.com/confluentinc/rest-utils/blob/b0418a69b8fd40a55446d31da98e4da3f25b6b93/core/src/main/java/io/confluent/rest/
Application.java#L454
rest.servlet.initializor.classes=my.java.namespace.MyCustomSecurityHandler
88
KSQL Client <-> Server: Custom Plugins
public class MyCustomSecurityHandler implements Consumer<ServletContextHandler> {
@Override
public void accept(final ServletContextHandler context) {
final ConstraintSecurityHandler myHandler = new ConstraintSecurityHandler();
// ...
context.setSecurityHandler(myHandler);
}
}
Learn more:
https://github.com/confluentinc/rest-utils/blob/b0418a69b8fd40a55446d31da98e4da3f25b6b93/core/src/main/java/io/confluent/rest/
RestConfig.java#L229
https://github.com/confluentinc/rest-utils/blob/b0418a69b8fd40a55446d31da98e4da3f25b6b93/core/src/main/java/io/confluent/rest/
Application.java#L454
rest.servlet.initializor.classes=my.java.namespace.MyCustomSecurityHandler
89
KSQL Client <-> Server: Custom Plugins
public class MyCustomSecurityHandler implements Consumer<ServletContextHandler> {
@Override
public void accept(final ServletContextHandler context) {
final ConstraintSecurityHandler myHandler = new ConstraintSecurityHandler();
// ...
context.setSecurityHandler(myHandler);
}
}
Learn more:
https://github.com/confluentinc/rest-utils/blob/b0418a69b8fd40a55446d31da98e4da3f25b6b93/core/src/main/java/io/confluent/rest/
RestConfig.java#L229
https://github.com/confluentinc/rest-utils/blob/b0418a69b8fd40a55446d31da98e4da3f25b6b93/core/src/main/java/io/confluent/rest/
Application.java#L454
rest.servlet.initializor.classes=my.java.namespace.MyCustomSecurityHandler
websocket.servlet.initializor.classes=my.java.namespace.MyCustomSecurityHandler
90
Securing KSQL’s Connections
KSQL <-> Kafka KSQL <->
Schema Registry
KSQL Client <->
KSQL Server
Encryption TLS TLS TLS
Authentication TLS
SASL
TLS
Basic HTTP Auth
TLS
Basic HTTP Auth
Custom Plugins
Authorization ACLs Custom Plugins
Quotas Network
CPU
91
Securing KSQL’s Connections
KSQL <-> Kafka KSQL <->
Schema Registry
KSQL Client <->
KSQL Server
Encryption TLS TLS TLS
Authentication TLS
SASL
TLS
Basic HTTP Auth
Custom Plugins
TLS
Basic HTTP Auth
Custom Plugins
Authorization ACLs Custom Plugins Custom Plugins
Quotas Network
CPU
92
KSQL’s Connections
Schema
Registry
CLI
REST
UI
KSQL
Server
KSQL
Server
REST
REST
93
User-Defined Functions (UDFs)
Learn more:
https://docs.confluent.io/current/ksql/docs/developer-guide/udf.html#ksql-custom-functions-and-security
@UdfDescription(
name = “myFunc”,
description = “my custom function”)
public class MyFunc {
// ...
}
SELECT MYFUNC(...)
FROM stream_foo;
94
User-Defined Functions (UDFs)
● ksql.udfs.enabled
Learn more:
https://docs.confluent.io/current/ksql/docs/developer-guide/udf.html#ksql-custom-functions-and-security
@UdfDescription(
name = “myFunc”,
description = “my custom function”)
public class MyFunc {
// ...
}
SELECT MYFUNC(...)
FROM stream_foo;
95
User-Defined Functions (UDFs)
● ksql.udfs.enabled
● ksql.udf.enable.security.manager
Learn more:
https://docs.confluent.io/current/ksql/docs/developer-guide/udf.html#ksql-custom-functions-and-security
@UdfDescription(
name = “myFunc”,
description = “my custom function”)
public class MyFunc {
// ...
}
SELECT MYFUNC(...)
FROM stream_foo;
96
User-Defined Functions (UDFs)
● ksql.udfs.enabled
● ksql.udf.enable.security.manager
● <ksql.extension.dir>/resource-blacklist.txt
Learn more:
https://docs.confluent.io/current/ksql/docs/developer-guide/udf.html#ksql-custom-functions-and-security
@UdfDescription(
name = “myFunc”,
description = “my custom function”)
public class MyFunc {
// ...
}
SELECT MYFUNC(...)
FROM stream_foo;
# resource-blacklist.txt
java.lang.Compiler$
java.lang.Process
97
Logging
● Log4j
Learn more:
https://docs.confluent.io/current/ksql/docs/developer-guide/processing-log.html
98
Logging
● Log4j
● Record processing log
Learn more:
https://docs.confluent.io/current/ksql/docs/developer-guide/processing-log.html
{
“type”: 1,
…,
“deserializationError”:{
“errorMessage”: “org.apache.kafka.connect.errors.DataException: [...]”,
“recordB64”: “TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5”
}
}
99
Logging
● Log4j
● Record processing log
○ ksql.logging.processing.topic.auto.create
Learn more:
https://docs.confluent.io/current/ksql/docs/developer-guide/processing-log.html
{
“type”: 1,
…,
“deserializationError”:{
“errorMessage”: “org.apache.kafka.connect.errors.DataException: [...]”,
“recordB64”: “TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5”
}
}
100
Logging
● Log4j
● Record processing log
○ ksql.logging.processing.topic.auto.create
○ ksql.logging.processing.topic.name
Learn more:
https://docs.confluent.io/current/ksql/docs/developer-guide/processing-log.html
{
“type”: 1,
…,
“deserializationError”:{
“errorMessage”: “org.apache.kafka.connect.errors.DataException: [...]”,
“recordB64”: “TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5”
}
}
101
Logging
● Log4j
● Record processing log
○ ksql.logging.processing.topic.auto.create
○ ksql.logging.processing.topic.name
○ ksql.logging.processing.rows.include
Learn more:
https://docs.confluent.io/current/ksql/docs/developer-guide/processing-log.html
{
“type”: 1,
…,
“deserializationError”:{
“errorMessage”: “org.apache.kafka.connect.errors.DataException: [...]”,
“recordB64”: “TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5”
}
}
102
Limitations and Futures
● Impersonation
● Authorization and quotas
● End-to-end encryption
● Shared TLS configs
● UDF whitelisting
● Resolving external passwords: KIP-421
Learn more:
https://docs.confluent.io/current/ksql/docs/capacity-planning.html
https://github.com/confluentinc/ksql/blob/cf29742512378106ccbd50c47b8ebb2d2204afc6/ksql-common/src/main/java/io/confluent/
ksql/util/KsqlConfig.java#L121
https://github.com/confluentinc/ksql/issues/1821
https://cwiki.apache.org/confluence/display/KAFKA/KIP-421%3A+Support+resolving+externalized+secrets+in+AbstractConfig
103
Takeaways
● Works in a secure Kafka environment
● Lock down KSQL by using headless mode
○ Or secure KSQL’s REST endpoint
● Deploy separate KSQL clusters for different use cases
● Consider: UDFs and record processing log
104
Questions?

Weitere ähnliche Inhalte

Was ist angesagt?

Data Loss and Duplication in Kafka
Data Loss and Duplication in KafkaData Loss and Duplication in Kafka
Data Loss and Duplication in Kafka
Jayesh Thakrar
 

Was ist angesagt? (20)

APACHE KAFKA / Kafka Connect / Kafka Streams
APACHE KAFKA / Kafka Connect / Kafka StreamsAPACHE KAFKA / Kafka Connect / Kafka Streams
APACHE KAFKA / Kafka Connect / Kafka Streams
 
Modern API Security with JSON Web Tokens
Modern API Security with JSON Web TokensModern API Security with JSON Web Tokens
Modern API Security with JSON Web Tokens
 
Kafka 101
Kafka 101Kafka 101
Kafka 101
 
Performance Stability, Tips and Tricks and Underscores
Performance Stability, Tips and Tricks and UnderscoresPerformance Stability, Tips and Tricks and Underscores
Performance Stability, Tips and Tricks and Underscores
 
A visual introduction to Apache Kafka
A visual introduction to Apache KafkaA visual introduction to Apache Kafka
A visual introduction to Apache Kafka
 
Iceberg: A modern table format for big data (Strata NY 2018)
Iceberg: A modern table format for big data (Strata NY 2018)Iceberg: A modern table format for big data (Strata NY 2018)
Iceberg: A modern table format for big data (Strata NY 2018)
 
Kafka at Peak Performance
Kafka at Peak PerformanceKafka at Peak Performance
Kafka at Peak Performance
 
All of the Performance Tuning Features in Oracle SQL Developer
All of the Performance Tuning Features in Oracle SQL DeveloperAll of the Performance Tuning Features in Oracle SQL Developer
All of the Performance Tuning Features in Oracle SQL Developer
 
Citi Tech Talk Disaster Recovery Solutions Deep Dive
Citi Tech Talk  Disaster Recovery Solutions Deep DiveCiti Tech Talk  Disaster Recovery Solutions Deep Dive
Citi Tech Talk Disaster Recovery Solutions Deep Dive
 
Introduction to memcached
Introduction to memcachedIntroduction to memcached
Introduction to memcached
 
Autoscaling Flink with Reactive Mode
Autoscaling Flink with Reactive ModeAutoscaling Flink with Reactive Mode
Autoscaling Flink with Reactive Mode
 
Stop the Chaos! Get Real Oracle Performance by Query Tuning Part 1
Stop the Chaos! Get Real Oracle Performance by Query Tuning Part 1Stop the Chaos! Get Real Oracle Performance by Query Tuning Part 1
Stop the Chaos! Get Real Oracle Performance by Query Tuning Part 1
 
No data loss pipeline with apache kafka
No data loss pipeline with apache kafkaNo data loss pipeline with apache kafka
No data loss pipeline with apache kafka
 
Data Loss and Duplication in Kafka
Data Loss and Duplication in KafkaData Loss and Duplication in Kafka
Data Loss and Duplication in Kafka
 
ksqlDB - Stream Processing simplified!
ksqlDB - Stream Processing simplified!ksqlDB - Stream Processing simplified!
ksqlDB - Stream Processing simplified!
 
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
 
Monitoring Oracle Database Instances with Zabbix
Monitoring Oracle Database Instances with ZabbixMonitoring Oracle Database Instances with Zabbix
Monitoring Oracle Database Instances with Zabbix
 
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
 
Apache kafka
Apache kafkaApache kafka
Apache kafka
 
MySQL InnoDB Cluster: Management and Troubleshooting with MySQL Shell
MySQL InnoDB Cluster: Management and Troubleshooting with MySQL ShellMySQL InnoDB Cluster: Management and Troubleshooting with MySQL Shell
MySQL InnoDB Cluster: Management and Troubleshooting with MySQL Shell
 

Ähnlich wie KSQL and Security: The Current State of Affairs (Victoria Xia, Confluent) Kafka Summit NYC 2019

Cassandra Summit 2013 Keynote
Cassandra Summit 2013 KeynoteCassandra Summit 2013 Keynote
Cassandra Summit 2013 Keynote
jbellis
 

Ähnlich wie KSQL and Security: The Current State of Affairs (Victoria Xia, Confluent) Kafka Summit NYC 2019 (20)

KSQL in Practice (Almog Gavra, Confluent) Kafka Summit London 2019
KSQL in Practice (Almog Gavra, Confluent) Kafka Summit London 2019KSQL in Practice (Almog Gavra, Confluent) Kafka Summit London 2019
KSQL in Practice (Almog Gavra, Confluent) Kafka Summit London 2019
 
KSQL – An Open Source Streaming Engine for Apache Kafka
KSQL – An Open Source Streaming Engine for Apache KafkaKSQL – An Open Source Streaming Engine for Apache Kafka
KSQL – An Open Source Streaming Engine for Apache Kafka
 
Kafka 2018 - Securing Kafka the Right Way
Kafka 2018 - Securing Kafka the Right WayKafka 2018 - Securing Kafka the Right Way
Kafka 2018 - Securing Kafka the Right Way
 
Paris FOD meetup - kafka security 101
Paris FOD meetup - kafka security 101Paris FOD meetup - kafka security 101
Paris FOD meetup - kafka security 101
 
Chickens & Eggs: Managing secrets in AWS with Hashicorp Vault
Chickens & Eggs: Managing secrets in AWS with Hashicorp VaultChickens & Eggs: Managing secrets in AWS with Hashicorp Vault
Chickens & Eggs: Managing secrets in AWS with Hashicorp Vault
 
Deploying and Operating KSQL
Deploying and Operating KSQLDeploying and Operating KSQL
Deploying and Operating KSQL
 
Apache Kafka® Security Overview
Apache Kafka® Security OverviewApache Kafka® Security Overview
Apache Kafka® Security Overview
 
Deploying and Operating KSQL
Deploying and Operating KSQLDeploying and Operating KSQL
Deploying and Operating KSQL
 
Riviera Jug - 20/03/2018 - KSQL
Riviera Jug - 20/03/2018 - KSQLRiviera Jug - 20/03/2018 - KSQL
Riviera Jug - 20/03/2018 - KSQL
 
Exploring KSQL Patterns
Exploring KSQL PatternsExploring KSQL Patterns
Exploring KSQL Patterns
 
Event streaming webinar feb 2020
Event streaming webinar feb 2020Event streaming webinar feb 2020
Event streaming webinar feb 2020
 
KSQL Deep Dive - The Open Source Streaming Engine for Apache Kafka
KSQL Deep Dive - The Open Source Streaming Engine for Apache KafkaKSQL Deep Dive - The Open Source Streaming Engine for Apache Kafka
KSQL Deep Dive - The Open Source Streaming Engine for Apache Kafka
 
A tale of application development
A tale of application developmentA tale of application development
A tale of application development
 
Building a Real-time Streaming ETL Framework Using ksqlDB and NoSQL
Building a Real-time Streaming ETL Framework Using ksqlDB and NoSQLBuilding a Real-time Streaming ETL Framework Using ksqlDB and NoSQL
Building a Real-time Streaming ETL Framework Using ksqlDB and NoSQL
 
KSQL: Streaming SQL for Kafka
KSQL: Streaming SQL for KafkaKSQL: Streaming SQL for Kafka
KSQL: Streaming SQL for Kafka
 
HashiCorp's Vault - The Examples
HashiCorp's Vault - The ExamplesHashiCorp's Vault - The Examples
HashiCorp's Vault - The Examples
 
Kafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQL
Kafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQLKafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQL
Kafka Summit SF 2017 - Kafka Stream Processing for Everyone with KSQL
 
Real Time Stream Processing with KSQL and Kafka
Real Time Stream Processing with KSQL and KafkaReal Time Stream Processing with KSQL and Kafka
Real Time Stream Processing with KSQL and Kafka
 
Blue whale, jail and Microsoft
Blue whale, jail and MicrosoftBlue whale, jail and Microsoft
Blue whale, jail and Microsoft
 
Cassandra Summit 2013 Keynote
Cassandra Summit 2013 KeynoteCassandra Summit 2013 Keynote
Cassandra Summit 2013 Keynote
 

Mehr von confluent

Mehr von confluent (20)

Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Santander Stream Processing with Apache Flink
Santander Stream Processing with Apache FlinkSantander Stream Processing with Apache Flink
Santander Stream Processing with Apache Flink
 
Unlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insightsUnlocking the Power of IoT: A comprehensive approach to real-time insights
Unlocking the Power of IoT: A comprehensive approach to real-time insights
 
Workshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con FlinkWorkshop híbrido: Stream Processing con Flink
Workshop híbrido: Stream Processing con Flink
 
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
Industry 4.0: Building the Unified Namespace with Confluent, HiveMQ and Spark...
 
AWS Immersion Day Mapfre - Confluent
AWS Immersion Day Mapfre   -   ConfluentAWS Immersion Day Mapfre   -   Confluent
AWS Immersion Day Mapfre - Confluent
 
Eventos y Microservicios - Santander TechTalk
Eventos y Microservicios - Santander TechTalkEventos y Microservicios - Santander TechTalk
Eventos y Microservicios - Santander TechTalk
 
Q&A with Confluent Experts: Navigating Networking in Confluent Cloud
Q&A with Confluent Experts: Navigating Networking in Confluent CloudQ&A with Confluent Experts: Navigating Networking in Confluent Cloud
Q&A with Confluent Experts: Navigating Networking in Confluent Cloud
 
Citi TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep DiveCiti TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep Dive
 
Build real-time streaming data pipelines to AWS with Confluent
Build real-time streaming data pipelines to AWS with ConfluentBuild real-time streaming data pipelines to AWS with Confluent
Build real-time streaming data pipelines to AWS with Confluent
 
Q&A with Confluent Professional Services: Confluent Service Mesh
Q&A with Confluent Professional Services: Confluent Service MeshQ&A with Confluent Professional Services: Confluent Service Mesh
Q&A with Confluent Professional Services: Confluent Service Mesh
 
Citi Tech Talk: Event Driven Kafka Microservices
Citi Tech Talk: Event Driven Kafka MicroservicesCiti Tech Talk: Event Driven Kafka Microservices
Citi Tech Talk: Event Driven Kafka Microservices
 
Confluent & GSI Webinars series - Session 3
Confluent & GSI Webinars series - Session 3Confluent & GSI Webinars series - Session 3
Confluent & GSI Webinars series - Session 3
 
Citi Tech Talk: Messaging Modernization
Citi Tech Talk: Messaging ModernizationCiti Tech Talk: Messaging Modernization
Citi Tech Talk: Messaging Modernization
 
Citi Tech Talk: Data Governance for streaming and real time data
Citi Tech Talk: Data Governance for streaming and real time dataCiti Tech Talk: Data Governance for streaming and real time data
Citi Tech Talk: Data Governance for streaming and real time data
 
Confluent & GSI Webinars series: Session 2
Confluent & GSI Webinars series: Session 2Confluent & GSI Webinars series: Session 2
Confluent & GSI Webinars series: Session 2
 
Data In Motion Paris 2023
Data In Motion Paris 2023Data In Motion Paris 2023
Data In Motion Paris 2023
 
Confluent Partner Tech Talk with Synthesis
Confluent Partner Tech Talk with SynthesisConfluent Partner Tech Talk with Synthesis
Confluent Partner Tech Talk with Synthesis
 
The Future of Application Development - API Days - Melbourne 2023
The Future of Application Development - API Days - Melbourne 2023The Future of Application Development - API Days - Melbourne 2023
The Future of Application Development - API Days - Melbourne 2023
 
The Playful Bond Between REST And Data Streams
The Playful Bond Between REST And Data StreamsThe Playful Bond Between REST And Data Streams
The Playful Bond Between REST And Data Streams
 

Kürzlich hochgeladen

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Kürzlich hochgeladen (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

KSQL and Security: The Current State of Affairs (Victoria Xia, Confluent) Kafka Summit NYC 2019