<div dir="ltr"><div>Big +1 to re-evaluating this. In my environment we have many users deploying and managing a number of different apps in different tenants. Some of our users, such as Yahoo Mail service engineers could be in up to 40 different tenants. Those service engineers may change products as their careers develop. Having to re-deploy part of an application stack because Sally SE changed products would be unnecessarily disruptive.</div><div><br></div><div> I regret that I missed the bus on this back in June. But at Oath we've built a system (Called Copper Argos) on top of Athenz (it's open source: <a href="http://www.athenz.io">www.athenz.io</a>) to provide instance identity in a way that is both unique but doesn't have all of the problems of a static persistent identity.</div><div><br></div><div> The really really really* high level overview is:</div><div>1. Users pass application identity data to Nova as metadata during the boot process. </div><div>2. Our vendor-data driver works with a service called HostSignd to validate that data and create a one time use attestation document which is injected into the instance's config drive. </div><div>3. On boot an agent within the instance will use that time-limited host attestation document to identify itself to the Athenz identity service, which will then exchange the document for a unique certificate containing the application data passed in the boot call. </div><div>4. From then on the instance identity (TLS certificate) is periodically exchanged by the agent for a new certificate. </div><div>5. The host attestation document and the instance TLS certificate can each only be used a single time to exchange for another certificate. The attestation document has a very short ttl, and the instance identity is set to live slightly longer than the planned rotation frequency. So if you rotate your certificates once an hour, the ttl on the cert should be 2 hours. This gives some wiggle room in the event the identity service is down for any reason. </div><div><br></div><div>The agent is also capable of supporting SSH CA by passing the SSH host key up to be re-signed whenever it exchanges the TLS certificate. All instances leveraging Athens identity can communicate to one another using TLS mutual auth.</div><div><br></div><div>If there's any interest i'd be happy to go into more detail here on the ML and/or at the summit in Sydney</div><div><br></div><div>-James<br></div><div>* With several more zoolander-style Really's thrown in for good measure.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 10, 2017 at 12:34 PM, Fox, Kevin M <span dir="ltr"><<a href="mailto:Kevin.Fox@pnnl.gov" target="_blank">Kevin.Fox@pnnl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Big +1 for reevaluating the bigger picture. We have a pile of api's that together don't always form the most useful of api's due to lack of big picture analysis.<br>
<br>
+1 to thinking through the dev's/devops use case.<br>
<br>
Another one to really think over is single user that != application developer. IE, Pure user type person deploying cloud app in their tenant written by dev not employees by user's company. User shouldn't have to go to Operator to provision service accounts and other things. App dev should be able to give everything needed to let OpenStack launch say a heat template that provisions the service accounts for the User, not making the user twiddle the api themselves. It should be a "here, launch this" kind of thing, and they fill out the heat form, and out pops a working app. If they have to go prevision a bunch of stuff themselves before passing stuff to the form, game over. Likewise, if they have to look at yaml, game over. How do app credentials fit into this?<br>
<br>
Thanks,<br>
Kevin<br>
<br>
______________________________<wbr>__________<br>
From: Zane Bitter [<a href="mailto:zbitter@redhat.com">zbitter@redhat.com</a>]<br>
Sent: Monday, October 09, 2017 9:39 AM<br>
To: <a href="mailto:openstack-dev@lists.openstack.org">openstack-dev@lists.openstack.<wbr>org</a><br>
Subject: Re: [openstack-dev] [keystone][nova] Persistent application credentials<br>
<div class="HOEnZb"><div class="h5"><br>
On 12/09/17 18:58, Colleen Murphy wrote:<br>
> While it's fresh in our minds, I wanted to write up a short recap of<br>
> where we landed in the Application Credentials discussion in the BM/VM<br>
> room today. For convenience the (as of yet unrevised) spec is here:<br>
<br>
Thanks so much for staying on this Colleen, it's tremendously helpful to<br>
have someone from the core team keeping an eye on it :)<br>
<br>
> <a href="http://specs.openstack.org/openstack/keystone-specs/specs/keystone/backlog/application-credentials.html" rel="noreferrer" target="_blank">http://specs.openstack.org/<wbr>openstack/keystone-specs/<wbr>specs/keystone/backlog/<wbr>application-credentials.html</a><br>
><br>
> Attached are images of the whiteboarded notes.<br>
><br>
> On the contentious question of the lifecycle of an application<br>
> credential, we re-landed in the same place we found ourselves in when<br>
> the spec originally landed, which is that the credential becomes invalid<br>
> when its creating user is disabled or deleted. The risk involved in<br>
> allowing a credential to continue to be valid after its creating user<br>
> has been disabled is not really surmountable, and we are basically<br>
> giving up on this feature. The benefits we still get from not having to<br>
> embed user passwords in config files, especially for LDAP or federated<br>
> users, is still a vast improvement over the situation today, as is the<br>
> ability to rotate credentials.<br>
<br>
OK, there were lots of smart people in the room so I trust that y'all<br>
made the right decision.<br>
<br>
I'd just like to step back for a moment though and ask: how exactly do<br>
we expect users to make use of Keystone?<br>
<br>
When I think about a typical OpenStack user of the near future, they<br>
looks something like this: there's a team with a handful of developers,<br>
with maybe one or two devops engineers. This team is responsible for a<br>
bunch of applications, at various stages in their lifecycles. They work<br>
in a department with several such teams, in an organisation with several<br>
such departments. People regularly join or leave the team - whether<br>
because they join or leave the organisation or just transfer between<br>
different teams. The applications are deployed with Heat and are at<br>
least partly self-managing (e.g. they use auto-scaling, or auto-healing,<br>
or have automated backups, or all of the above), but also require<br>
occasional manual intervention (beyond just a Heat stack-update). The<br>
applications may be deployed to a private OpenStack cloud, a public<br>
OpenStack cloud, or both, with minimal differences in how they work when<br>
moving back and forth.<br>
<br>
(Obviously the beauty of Open Source is that we don't think about only<br>
one set of users. But I think if we can serve this set of users as a<br>
baseline then we have built something pretty generically useful.)<br>
<br>
So my question is: how do we recommend these users use Keystone? We<br>
definitely _can_ support them. But the most workable way I can think of<br>
would be to create a long-lived application user account for each<br>
project in LDAP/ActiveDirectory/whatever and have that account manage<br>
the application. Then things will work basically the same way in the<br>
public cloud, where you also get a user per project. Hopefully some<br>
auditability is maintained by having Jenkins/Zuul/Solum/whatever do the<br>
pushing of changes to Heat, although realistically many users will not<br>
be that sophisticated. Once we have application credentials, the folks<br>
doing manual intervention would be able to do so in the same way on<br>
public clouds as on private clouds, without being given the account<br>
credentials.<br>
<br>
Some observations about this scenario:<br>
* The whole user/role infrastructure is completely unused - 'Users' are<br>
1:1 with projects. We might as well not have built it.<br>
* Having Keystone backed by LDAP/ActiveDirectory is arguably worse than<br>
useless - it just means there are two different places to set things up<br>
when creating a project and an extra layer of indirection. (I won't say<br>
we might as well not have built it, because many organisations have<br>
compliance rules that, ahem, well let's just say they were developed in<br>
a different context :)<br>
* We're missing an essential feature of cloud (or even of VPSs): you<br>
shouldn't need to raise a ticket with IT to be able to deploy a new<br>
application. Any involvement from them should be asynchronous (e.g.<br>
setting quotas - although even that is an OpenStack-specific thing: in<br>
public clouds excessive use is discouraged by _billing_ and in<br>
non-OpenStack clouds users set their _own_ quotas); we don't want humans<br>
in the loop.<br>
* AFAIK it's not documented anywhere that this is the way we expect you<br>
to use OpenStack. Anybody would think it's all about the Users and Roles.<br>
<br>
Perhaps someone can suggest a better scenario for this group of users? I<br>
can't think of one that doesn't involve radical differences between<br>
public & private clouds (something we're explicitly trying to prevent,<br>
according to our mission statement), and/or risk total application<br>
breakage when personnel change.<br>
<br>
My worry is that in this and other areas, there's a disconnect between<br>
the needs of the people whom we say we're building OpenStack for and<br>
what we're actually building. (Speculation: this might be partly due to<br>
a tendency to see OpenStack projects as merely an abstraction layer over<br>
a bunch of vendor technologies - Keystone, as abstraction layer over<br>
LDAP/ActiveDirectory, Nova as an abstraction layer over<br>
libvirt/Xen/HyperV, &c. - rather than as components of an integrated<br>
cloud management service.) I'd like to see us do something like develop<br>
a bunch of user personae and re-evaluate the conceptual underpinnings<br>
of... everything, to align them with those needs. Put another way, I<br>
think looking at features like application credentials in isolation is<br>
likely to produce locally-optimal decisions rather than a<br>
globally-optimal design.<br>
<br>
cheers,<br>
Zane.<br>
<br>
______________________________<wbr>______________________________<wbr>______________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>
<br>
______________________________<wbr>______________________________<wbr>______________<br>
OpenStack Development Mailing List (not for usage questions)<br>
Unsubscribe: <a href="http://OpenStack-dev-request@lists.openstack.org?subject:unsubscribe" rel="noreferrer" target="_blank">OpenStack-dev-request@lists.<wbr>openstack.org?subject:<wbr>unsubscribe</a><br>
<a href="http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev" rel="noreferrer" target="_blank">http://lists.openstack.org/<wbr>cgi-bin/mailman/listinfo/<wbr>openstack-dev</a><br>
</div></div></blockquote></div><br></div>