[openstack-dev] [keystone] [nova]
Nikolay Makhotkin
nmakhotkin at mirantis.com
Mon Feb 16 10:00:29 UTC 2015
Well, if we use trust-scoped token for getting server-list from nova
(simply use nova.servers.list() ),
Novaclient somehow tries to get another token:
https://github.com/openstack/python-novaclient/blob/master/novaclient/client.py#L690-L724
Actually, novaclient does this request: (found from debug of novaclient)
REQ: curl -i 'http://<my_host>:5000/v2.0/tokens' -X POST -H "Accept:
application/json" -H "Content-Type: application/json" -H "User-Agent:
python-novaclient" -d '{"auth": {"token": {"id":
"78c71fb549244075b3a5d994baa326b3"}, "tenantName":
"b0c9bbb541d541b098c3c0a92412720d"}}'
I.e., this is the request for another auth token from keystone. Keystone
here returns 403 because token in request is trust-scoped.
Why I can't do this simple command using trust-scoped token?
Note: Doing the keystone --os-token 5483086d91094a3886ccce1442b538a0
--os-endpoint http://<my_host>:5000/v2.0 tenant-list, it returns
tenant-list (not 403).
Note2: Doing the server-list request directly to api with trust-scoped
token, it returns 200, not 403:
curl -H "X-Auth-Token: 5483086d91094a3886ccce1442b538a0"
http://192.168.0.2:8774/v3/servers
{
"servers": [ <list_of_servers> ]
}
How I can use trust-scoped tokrn via client?
On Fri, Feb 13, 2015 at 9:16 PM, Alexander Makarov <amakarov at mirantis.com>
wrote:
> Adam, Nova client does it for some reason during a call to
> nova.servers.list()
>
>
> On Thu, Feb 12, 2015 at 10:03 PM, Adam Young <ayoung at redhat.com> wrote:
>
>> On 02/12/2015 10:40 AM, Alexander Makarov wrote:
>>
>> A trust token cannot be used to get another token:
>>
>> https://github.com/openstack/keystone/blob/master/keystone/token/controllers.py#L154-L156
>> You have to make your Nova client use the very same trust scoped token
>> obtained from authentication using trust without trying to authenticate
>> with it one more time.
>>
>>
>>
>> Actually, there have been some recent changes to allow re-delegation of
>> Trusts, but for older deployments, you are correct. I hadn't seen anywhere
>> here that he was trying to use a trust token to get another token, though.
>>
>>
>>
>> On Wed, Feb 11, 2015 at 9:10 PM, Adam Young <ayoung at redhat.com> wrote:
>>
>>> On 02/11/2015 12:16 PM, Nikolay Makhotkin wrote:
>>>
>>> No, I just checked it. Nova receives trust token and raise this error.
>>>
>>> In my script, I see:
>>>
>>> http://paste.openstack.org/show/171452/
>>>
>>> And as you can see, token from trust differs from direct user's token.
>>>
>>>
>>> The original user needs to have the appropriate role to perform the
>>> operation on the specified project. I see the admin role is created on the
>>> trust. If the trustor did not have that role, the trustee would not be able
>>> to exececute the trust and get a token. It looks like you were able to
>>> execute the trust and get a token, but I would like you to confirm that,
>>> and not just trust the keystone client: either put debug statements in
>>> Keystone or call the POST to tokens from curl with the appropriate options
>>> to get a trust token. In short, make sure you have not fooled yourself.
>>> You can also look in the token table inside Keystone to see the data for
>>> the trust token, or validate the token via curl to see the data in it. In
>>> all cases, there should be an OS-TRUST stanza in the token data.
>>>
>>>
>>> If it is still failing, there might be some issue on the Policy side. I
>>> have been assuming that you are running with the default policy for Nova.
>>>
>>> http://git.openstack.org/cgit/openstack/nova/tree/etc/nova/policy.json
>>>
>>> I'm not sure which rule matches for list servers (Nova developer input
>>> would be appreciated) but I'm guessing it is executing the rule
>>>
>>> "admin_or_owner": "is_admin:True or project_id:%(project_id)s",
>>>
>>> Since that is the default. I am guessing that the project_id in question
>>> comes from the token here, as that seems to be common, but if not, it might
>>> be that the two values are mismatched. Perhaps there Proejct ID value from
>>> the client env var is sent, and matches what the trustor normally works as,
>>> not the project in question. If these two values don't match, then, yes,
>>> the rule would fail.
>>>
>>>
>>>
>>>
>>> On Wed, Feb 11, 2015 at 7:55 PM, Adam Young <ayoung at redhat.com> wrote:
>>>
>>>> On 02/11/2015 10:52 AM, Nikolay Makhotkin wrote:
>>>>
>>>> Hi !
>>>>
>>>> I investigated trust's use cases and encountered the problem: When I
>>>> use auth_token obtained from keystoneclient using trust, I get *403*
>>>> Forbidden error: *You are not authorized to perform the requested
>>>> action.*
>>>>
>>>> Steps to reproduce:
>>>>
>>>> - Import v3 keystoneclient (used keystone and keystoneclient from
>>>> master, tried also to use stable/icehouse)
>>>> - Import v3 novaclient
>>>> - initialize the keystoneclient:
>>>> keystone = keystoneclient.Client(username=username,
>>>> password=password, tenant_name=tenant_name, auth_url=auth_url)
>>>>
>>>> - create a trust:
>>>> trust = keystone.trusts.create(
>>>> keystone.user_id,
>>>> keystone.user_id,
>>>> impersonation=True,
>>>> role_names=['admin'],
>>>> project=keystone.project_id
>>>> )
>>>>
>>>> - initialize new keystoneclient:
>>>> client_from_trust = keystoneclient.Client(
>>>> username=username, password=password,
>>>> trust_id=trust.id, auth_url=auth_url,
>>>> )
>>>>
>>>> - create nova client using new token from new client:
>>>> nova = novaclient.Client(
>>>> auth_token=client_from_trust.auth_token,
>>>> auth_url=auth_url_v2,
>>>> project_id=from_trust.project_id,
>>>> service_type='compute',
>>>> username=None,
>>>> api_key=None
>>>> )
>>>>
>>>> - do simple request to nova:
>>>> nova.servers.list()
>>>>
>>>> - get the error described above.
>>>>
>>>>
>>>> Maybe I misunderstood something but what is wrong? I supposed I just
>>>> can work with nova like it was initialized using direct token.
>>>>
>>>>
>>>> From what you wrote here it should work, but since Heat has been
>>>> doing stuff like this for a while, I'm pretty sure it is your setup and not
>>>> a fundamental problem.
>>>>
>>>> I'd take a look at what is going back and forth on the wire and make
>>>> sure the right token is being sent to Nova. If it is the original users
>>>> token and not the trust token, then you would see that error.
>>>>
>>>>
>>>> --
>>>> Best Regards,
>>>> Nikolay
>>>>
>>>>
>>>> __________________________________________________________________________
>>>> OpenStack Development Mailing List (not for usage questions)
>>>> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribehttp://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>>>
>>>>
>>>>
>>>>
>>>> __________________________________________________________________________
>>>> OpenStack Development Mailing List (not for usage questions)
>>>> Unsubscribe:
>>>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>>>
>>>
>>>
>>>
>>> --
>>> Best Regards,
>>> Nikolay
>>>
>>>
>>> __________________________________________________________________________
>>> OpenStack Development Mailing List (not for usage questions)
>>> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribehttp://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>>
>>>
>>>
>>>
>>> __________________________________________________________________________
>>> OpenStack Development Mailing List (not for usage questions)
>>> Unsubscribe:
>>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>>
>>>
>>
>>
>> --
>> Kind Regards,
>> Alexander Makarov,
>> Senoir Software Developer,
>>
>> Mirantis, Inc.
>> 35b/3, Vorontsovskaya St., 109147, Moscow, Russia
>>
>> Tel.: +7 (495) 640-49-04
>> Tel.: +7 (926) 204-50-60
>>
>> Skype: MAKAPOB.AJIEKCAHDP
>>
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribehttp://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
>>
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe:
>> OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>>
>>
>
>
> --
> Kind Regards,
> Alexander Makarov,
> Senoir Software Developer,
>
> Mirantis, Inc.
> 35b/3, Vorontsovskaya St., 109147, Moscow, Russia
>
> Tel.: +7 (495) 640-49-04
> Tel.: +7 (926) 204-50-60
>
> Skype: MAKAPOB.AJIEKCAHDP
>
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
>
>
--
Best Regards,
Nikolay
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20150216/23fca7e9/attachment.html>
More information about the OpenStack-dev
mailing list