Heat CFN signals do not pass authorization
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
OpenStack Identity (keystone) |
Invalid
|
Undecided
|
Unassigned | ||
Kilo |
Fix Released
|
Medium
|
Unassigned | ||
OpenStack-Ansible |
Invalid
|
Medium
|
Unassigned | ||
Kilo |
Fix Released
|
Medium
|
Jesse Pretorius | ||
Liberty |
Invalid
|
Undecided
|
Unassigned | ||
Trunk |
Invalid
|
Medium
|
Unassigned |
Bug Description
Note that this bug applies to the Kilo release. Master does not appear to have this problem. I did not test liberty yet.
Heat templates that rely on CFN signals timeout because the API calls that execute these signals return 403 errors. Heat signals, on the other side, do work.
The problem was reported to me by Alex Cantu. I have verified it on his multinode lab and have also reproduced on my own single-node system hosted on a public cloud server. I suspect liberty/master avoided the problem after Jesse and I reworked the Heat configuration to use Keystone v3 the last day before the L release.
Example template, which can be executed in an AIO after running the tempest playbook:
heat_
resources:
wait_
type: AWS::CloudForma
properties:
Handle: { get_resource: wait_handle }
Count: 1
Timeout: 600
wait_handle:
type: AWS::CloudForma
my_instance:
type: OS::Nova::Server
properties:
image: cirros
flavor: m1.tiny
networks:
- network: "private"
This template should end very quickly, as it starts a cirros instance that just sends a signal back to heat. But instead, it timeouts. The user data script dumps the signal URL to the console log, if you then try to send the signal manually you will get a 403. The original 403 can also be seen in the heat-api-cfn.log file. Here is the log snippet:
2015-11-12 05:13:34.491 1862 INFO heat.api.
2015-11-12 05:13:34.492 1862 INFO heat.api.
2015-11-12 05:13:34.493 1862 INFO heat.api.
2015-11-12 05:13:34.533 1862 INFO heat.api.
2015-11-12 05:13:34.534 1862 INFO eventlet.
For reference, the curl command to trigger the signal is: curl -H "Content-Type:" -X PUT "<cfn-signal-url".
summary: |
- Heat CFN signals do not pass authentication + Heat CFN signals do not pass authorization |
description: | updated |
description: | updated |
Changed in openstack-ansible: | |
status: | New → Triaged |
importance: | Undecided → High |
milestone: | none → 11.2.5 |
importance: | High → Medium |
I also met the same error(in kilo branch). keystone.log indicated it's 'fernet' related.
After I changed variable 'keystone_ token_provider' to 'keystone. token.providers .uuid.Provider' . The issue resolved.