[openstack-dev] [keystone][heat] Question re deleting trusts via trust token

Steven Hardy shardy at redhat.com
Wed Sep 4 08:49:48 UTC 2013


On Tue, Sep 03, 2013 at 06:12:00PM -0500, Dolph Mathews wrote:
> On Tue, Sep 3, 2013 at 5:52 PM, Steven Hardy <shardy at redhat.com> wrote:
> 
> > Hi,
> >
> > I have a question for the keystone folks re the expected behavior when
> > deleting a trust.
> >
> > Is it expected that you can only ever delete a trust as the user who
> > created it, and that you can *not* delete the trust when impersonating that
> > user using a token obtained via that trust?
> >
> 
> We have some tests in keystone somewhat related to this scenario, but
> nothing that asserts that specific behavior-
> 
> https://github.com/openstack/keystone/blob/master/keystone/tests/test_auth.py#L737-L763
> 
> 
> > The reason for this question, is for the Heat use-case, this may represent
> > a significant operational limitation, since it implies that the user who
> > creates the stack is the only one who can ever delete it.
> >
> 
> I don't follow this implication-- can you explain further? I don't see how
> the limitation above (if it exists) would impact this behavior or be a
> blocker for the design below.

As outlined already by Clint, the way Heat uses trusts is:

- User requests stack creation, passes token or user/password to Heat
- Heat uses the user credentials to create a trust between the user and the
  Heat service user, the ID of which is encrypted and stored in our DB
  (instead of the credentials)
- We use the trust to perform lifecycle operations, e.g adding a nova
  instance to an AutoScalingGroup, the Heat service user impersonates the
  User who created the stack
- The user deletes the stack, at which point we delete the trust

This final step is the problematic step - atm (unless I'm making a mistake,
which as previously proven is entirely possible! ;) it seems that it's
impossible for anyone except the trustor to delete the trust, even if we
impersonate the trustor.

Even a tenant admin, it seems, cannot delete the trust.

> > Current Heat behavior is to allow any user in the same tenant, provided
> > they have the requisite roles, to delete the stack
> 
> 
> That seems like a reasonable design. With trusts, any user who has been
> delegated the requisite role on the same tenant should be able to delete
> the stack.

If this is the case, I'd very much like to see some curl examples of this
working, in particular these two scenarios:

- Deleting a trust by impersonating the trustor (using a token obtained
  with the trust you're about to delete, which will obviously be
  invalidated as soon as the delete completes)

- Any user other than the trustor deleting the trust, e.g some other user
  in the same tenant

I'll create some minimal reproducers to try to illustrate the issue.

> > which AFAICT atm will
> > not be possible when using trusts.
> >
> Similar to the above, I don't understand how trusts presents a blocker?

Hopefully the above clarifies, we will either leak trusts or have to assert
failure on stack delete unless we can delete the trust on behalf of the
stack-creating (trustor) user in the case where some other user in the
tenant performs the stack delete.

Thanks for any further info you can provide! :)

Steve



More information about the OpenStack-dev mailing list