* [Qemu-devel] [PATCH 0/1] migration: support for authorization control on TLS connections
@ 2019-02-27 14:53 Daniel P. Berrangé
2019-02-27 14:53 ` [Qemu-devel] [PATCH 1/1] migration: add support for a "tls-authz" migration parameter Daniel P. Berrangé
2019-03-07 12:20 ` [Qemu-devel] [PATCH 0/1] migration: support for authorization control on TLS connections Daniel P. Berrangé
0 siblings, 2 replies; 3+ messages in thread
From: Daniel P. Berrangé @ 2019-02-27 14:53 UTC (permalink / raw)
To: qemu-devel
Cc: Juan Quintela, Dr. David Alan Gilbert, Eric Blake,
Markus Armbruster, Daniel P. Berrangé
This series provides the migration part of the authorization control series
previously posted as:
v1: https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg04482.html
v2: https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg05727.html
v3: https://lists.gnu.org/archive/html/qemu-devel/2018-10/msg01639.html
v4: https://lists.gnu.org/archive/html/qemu-devel/2019-02/msg04319.html
The core authz framework is now merged & this patch has had
positive review. Thus this migration part is ready to go into the
migration maintainer's tree, should the maintainer consider them
acceptable.
Daniel P. Berrangé (1):
migration: add support for a "tls-authz" migration parameter
hmp.c | 9 +++++++++
migration/migration.c | 8 ++++++++
migration/tls.c | 2 +-
qapi/migration.json | 14 +++++++++++++-
4 files changed, 31 insertions(+), 2 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* [Qemu-devel] [PATCH 1/1] migration: add support for a "tls-authz" migration parameter
2019-02-27 14:53 [Qemu-devel] [PATCH 0/1] migration: support for authorization control on TLS connections Daniel P. Berrangé
@ 2019-02-27 14:53 ` Daniel P. Berrangé
2019-03-07 12:20 ` [Qemu-devel] [PATCH 0/1] migration: support for authorization control on TLS connections Daniel P. Berrangé
1 sibling, 0 replies; 3+ messages in thread
From: Daniel P. Berrangé @ 2019-02-27 14:53 UTC (permalink / raw)
To: qemu-devel
Cc: Juan Quintela, Dr. David Alan Gilbert, Eric Blake,
Markus Armbruster, Daniel P. Berrange
From: "Daniel P. Berrange" <berrange@redhat.com>
The QEMU instance that runs as the server for the migration data
transport (ie the target QEMU) needs to be able to configure access
control so it can prevent unauthorized clients initiating an incoming
migration. This adds a new 'tls-authz' migration parameter that is used
to provide the QOM ID of a QAuthZ subclass instance that provides the
access control check. This is checked against the x509 certificate
obtained during the TLS handshake.
For example, when starting a QEMU for incoming migration, it is
possible to give an example identity of the source QEMU that is
intended to be connecting later:
$QEMU \
-monitor stdio \
-incoming defer \
...other args...
(qemu) object_add tls-creds-x509,id=tls0,dir=/home/berrange/qemutls,\
endpoint=server,verify-peer=yes \
(qemu) object_add authz-simple,id=auth0,identity=CN=laptop.example.com,,\
O=Example Org,,L=London,,ST=London,,C=GB \
(qemu) migrate_incoming tcp:localhost:9000
Reviewed-by: Juan Quintela <quintela@redhat.com>
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
---
hmp.c | 9 +++++++++
migration/migration.c | 8 ++++++++
migration/tls.c | 2 +-
qapi/migration.json | 14 +++++++++++++-
4 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/hmp.c b/hmp.c
index 1e006eeb49..e09cf6e075 100644
--- a/hmp.c
+++ b/hmp.c
@@ -398,6 +398,9 @@ void hmp_info_migrate_parameters(Monitor *mon, const QDict *qdict)
monitor_printf(mon, "%s: %" PRIu64 "\n",
MigrationParameter_str(MIGRATION_PARAMETER_MAX_POSTCOPY_BANDWIDTH),
params->max_postcopy_bandwidth);
+ monitor_printf(mon, " %s: '%s'\n",
+ MigrationParameter_str(MIGRATION_PARAMETER_TLS_AUTHZ),
+ params->has_tls_authz ? params->tls_authz : "");
}
qapi_free_MigrationParameters(params);
@@ -1709,6 +1712,12 @@ void hmp_migrate_set_parameter(Monitor *mon, const QDict *qdict)
p->tls_hostname->type = QTYPE_QSTRING;
visit_type_str(v, param, &p->tls_hostname->u.s, &err);
break;
+ case MIGRATION_PARAMETER_TLS_AUTHZ:
+ p->has_tls_authz = true;
+ p->tls_authz = g_new0(StrOrNull, 1);
+ p->tls_authz->type = QTYPE_QSTRING;
+ visit_type_str(v, param, &p->tls_authz->u.s, &err);
+ break;
case MIGRATION_PARAMETER_MAX_BANDWIDTH:
p->has_max_bandwidth = true;
/*
diff --git a/migration/migration.c b/migration/migration.c
index 37e06b76dc..3a2f0b6c54 100644
--- a/migration/migration.c
+++ b/migration/migration.c
@@ -721,6 +721,8 @@ MigrationParameters *qmp_query_migrate_parameters(Error **errp)
params->tls_creds = g_strdup(s->parameters.tls_creds);
params->has_tls_hostname = true;
params->tls_hostname = g_strdup(s->parameters.tls_hostname);
+ params->has_tls_authz = true;
+ params->tls_authz = g_strdup(s->parameters.tls_authz);
params->has_max_bandwidth = true;
params->max_bandwidth = s->parameters.max_bandwidth;
params->has_downtime_limit = true;
@@ -1234,6 +1236,12 @@ static void migrate_params_apply(MigrateSetParameters *params, Error **errp)
s->parameters.tls_hostname = g_strdup(params->tls_hostname->u.s);
}
+ if (params->has_tls_authz) {
+ g_free(s->parameters.tls_authz);
+ assert(params->tls_authz->type == QTYPE_QSTRING);
+ s->parameters.tls_authz = g_strdup(params->tls_authz->u.s);
+ }
+
if (params->has_max_bandwidth) {
s->parameters.max_bandwidth = params->max_bandwidth;
if (s->to_dst_file) {
diff --git a/migration/tls.c b/migration/tls.c
index 3b9e8c9263..5171afc6c4 100644
--- a/migration/tls.c
+++ b/migration/tls.c
@@ -94,7 +94,7 @@ void migration_tls_channel_process_incoming(MigrationState *s,
tioc = qio_channel_tls_new_server(
ioc, creds,
- NULL, /* XXX pass ACL name */
+ s->parameters.tls_authz,
errp);
if (!tioc) {
return;
diff --git a/qapi/migration.json b/qapi/migration.json
index 7a795ecc16..15a1582898 100644
--- a/qapi/migration.json
+++ b/qapi/migration.json
@@ -522,6 +522,12 @@
# hostname must be provided so that the server's x509
# certificate identity can be validated. (Since 2.7)
#
+# @tls-authz: ID of the 'authz' object subclass that provides access control
+# checking of the TLS x509 certificate distinguished name.
+# This object is only resolved at time of use, so can be deleted
+# and recreated on the fly while the migration server is active.
+# If missing, it will default to denying access (Since 4.0)
+#
# @max-bandwidth: to set maximum speed for migration. maximum speed in
# bytes per second. (Since 2.8)
#
@@ -563,7 +569,7 @@
'data': ['compress-level', 'compress-threads', 'decompress-threads',
'compress-wait-thread',
'cpu-throttle-initial', 'cpu-throttle-increment',
- 'tls-creds', 'tls-hostname', 'max-bandwidth',
+ 'tls-creds', 'tls-hostname', 'tls-authz', 'max-bandwidth',
'downtime-limit', 'x-checkpoint-delay', 'block-incremental',
'x-multifd-channels', 'x-multifd-page-count',
'xbzrle-cache-size', 'max-postcopy-bandwidth',
@@ -661,6 +667,7 @@
'*cpu-throttle-increment': 'int',
'*tls-creds': 'StrOrNull',
'*tls-hostname': 'StrOrNull',
+ '*tls-authz': 'StrOrNull',
'*max-bandwidth': 'int',
'*downtime-limit': 'int',
'*x-checkpoint-delay': 'int',
@@ -730,6 +737,10 @@
# associated with the migration URI, if any. (Since 2.9)
# Note: 2.8 reports this by omitting tls-hostname instead.
#
+# @tls-authz: ID of the 'authz' object subclass that provides access control
+# checking of the TLS x509 certificate distinguished name. (Since
+# 4.0)
+#
# @max-bandwidth: to set maximum speed for migration. maximum speed in
# bytes per second. (Since 2.8)
#
@@ -777,6 +788,7 @@
'*cpu-throttle-increment': 'uint8',
'*tls-creds': 'str',
'*tls-hostname': 'str',
+ '*tls-authz': 'str',
'*max-bandwidth': 'size',
'*downtime-limit': 'uint64',
'*x-checkpoint-delay': 'uint32',
--
2.20.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [Qemu-devel] [PATCH 0/1] migration: support for authorization control on TLS connections
2019-02-27 14:53 [Qemu-devel] [PATCH 0/1] migration: support for authorization control on TLS connections Daniel P. Berrangé
2019-02-27 14:53 ` [Qemu-devel] [PATCH 1/1] migration: add support for a "tls-authz" migration parameter Daniel P. Berrangé
@ 2019-03-07 12:20 ` Daniel P. Berrangé
1 sibling, 0 replies; 3+ messages in thread
From: Daniel P. Berrangé @ 2019-03-07 12:20 UTC (permalink / raw)
To: qemu-devel
Cc: Juan Quintela, Dr. David Alan Gilbert, Eric Blake,
Markus Armbruster
ping - soft freeze is less than a week away & I'd like to see this
merged for this release.
On Wed, Feb 27, 2019 at 02:53:23PM +0000, Daniel P. Berrangé wrote:
> This series provides the migration part of the authorization control series
> previously posted as:
>
> v1: https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg04482.html
> v2: https://lists.gnu.org/archive/html/qemu-devel/2018-06/msg05727.html
> v3: https://lists.gnu.org/archive/html/qemu-devel/2018-10/msg01639.html
> v4: https://lists.gnu.org/archive/html/qemu-devel/2019-02/msg04319.html
>
> The core authz framework is now merged & this patch has had
> positive review. Thus this migration part is ready to go into the
> migration maintainer's tree, should the maintainer consider them
> acceptable.
>
> Daniel P. Berrangé (1):
> migration: add support for a "tls-authz" migration parameter
>
> hmp.c | 9 +++++++++
> migration/migration.c | 8 ++++++++
> migration/tls.c | 2 +-
> qapi/migration.json | 14 +++++++++++++-
> 4 files changed, 31 insertions(+), 2 deletions(-)
>
> --
> 2.20.1
>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2019-03-07 12:20 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-02-27 14:53 [Qemu-devel] [PATCH 0/1] migration: support for authorization control on TLS connections Daniel P. Berrangé
2019-02-27 14:53 ` [Qemu-devel] [PATCH 1/1] migration: add support for a "tls-authz" migration parameter Daniel P. Berrangé
2019-03-07 12:20 ` [Qemu-devel] [PATCH 0/1] migration: support for authorization control on TLS connections Daniel P. Berrangé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).