Skip to content

Heat Policies

Introduction

This document presents the permissions available for reader and member roles on the Heat service (orchestration) of Infomaniak Public Cloud, based on OpenStack default policies.

Context

Application Credentials must be created with the appropriate role according to functional needs. This matrix helps you choose the right role for infrastructure orchestration operations.

Legend

Symbol Meaning
✅ Allowed - The policy explicitly permits this action
❌ Forbidden - The policy explicitly denies this action
🔍 Conditional - Allowed based on project membership

Stack Management

Basic Stack Operations

Operation Endpoint Policy Reader Member Conditions
List stacks GET /v1/{tenant_id}/stacks stacks:index ✅ ✅ Project stacks
Show stack GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id} stacks:show 🔍 🔍 Project ownership
Create stack POST /v1/{tenant_id}/stacks stacks:create ❌ ✅
Update stack PUT /v1/{tenant_id}/stacks/{stack_name}/{stack_id} stacks:update ❌ 🔍 Project ownership
Delete stack DELETE /v1/{tenant_id}/stacks/{stack_name}/{stack_id} stacks:delete ❌ 🔍 Project ownership

Stack Advanced Operations

Operation Endpoint Policy Reader Member Conditions
Abandon stack DELETE /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/abandon stacks:abandon ❌ 🔍 Project ownership
Preview stack POST /v1/{tenant_id}/stacks/preview stacks:preview ❌ ✅ Template validation
Get stack template GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/template stacks:template 🔍 🔍 Project ownership

Stack Actions

Operation Endpoint Policy Reader Member Conditions
Check stack POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions actions:check 🔍 🔍 Project ownership
Suspend stack POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions actions:suspend ❌ 🔍 Project ownership
Resume stack POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions actions:resume ❌ 🔍 Project ownership
Cancel update POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions actions:cancel_update ❌ 🔍 Project ownership

Stack Snapshots

Operation Endpoint Policy Reader Member Conditions
List snapshots GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots stacks:list_snapshots 🔍 🔍 Project stack ownership
Show snapshot GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id} stacks:show_snapshot 🔍 🔍 Project ownership
Create snapshot POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/actions actions:snapshot ❌ 🔍 Project stack ownership
Restore snapshot POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id}/restore stacks:restore_snapshot ❌ 🔍 Project ownership
Delete snapshot DELETE /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/snapshots/{snapshot_id} stacks:delete_snapshot ❌ 🔍 Project ownership

Stack Outputs

Operation Endpoint Policy Reader Member Conditions
List outputs GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/outputs stacks:list_outputs 🔍 🔍 Project stack ownership
Show output GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/outputs/{output_key} stacks:show_output 🔍 🔍 Project ownership

Resource Management

Stack Resources

Operation Endpoint Policy Reader Member Conditions
List resources GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources resource:index 🔍 🔍 Project stack ownership
Show resource GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name} resource:show 🔍 🔍 Project ownership
Mark unhealthy PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name} resource:mark_unhealthy ❌ 🔍 Project ownership
Signal resource POST /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/signal resource:signal 🔍 🔍 Project ownership*
Resource metadata GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/metadata resource:metadata 🔍 🔍 Project ownership*

*Also accessible by heat_stack_user role


Events Management

Operation Endpoint Policy Reader Member Conditions
List events GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/events events:index 🔍 🔍 Project stack ownership
Show event GET /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name}/events/{event_id} events:show 🔍 🔍 Project ownership

Template Management

Template Operations

Operation Endpoint Policy Reader Member Conditions
Validate template POST /v1/{tenant_id}/validate stacks:validate_template ✅ ✅ Template validation
List resource types GET /v1/{tenant_id}/resource_types resource_types:index ✅ ✅ Available types
Show resource type GET /v1/{tenant_id}/resource_types/{type_name} resource_types:show ✅ ✅ Type details
Resource type template GET /v1/{tenant_id}/resource_types/{type_name}/template resource_types:template ✅ ✅ Template generation

Software Configuration

Software Config Management

Operation Endpoint Policy Reader Member Conditions
List configs GET /v1/{tenant_id}/software_configs software_configs:index 🔍 🔍 Project configs
Show config GET /v1/{tenant_id}/software_configs/{config_id} software_configs:show 🔍 🔍 Project ownership
Create config POST /v1/{tenant_id}/software_configs software_configs:create ❌ ✅
Delete config DELETE /v1/{tenant_id}/software_configs/{config_id} software_configs:delete ❌ 🔍 Project ownership

Software Deployment Management

Operation Endpoint Policy Reader Member Conditions
List deployments GET /v1/{tenant_id}/software_deployments software_deployments:index 🔍 🔍 Project deployments
Show deployment GET /v1/{tenant_id}/software_deployments/{deployment_id} software_deployments:show 🔍 🔍 Project ownership
Create deployment POST /v1/{tenant_id}/software_deployments software_deployments:create ❌ ✅
Update deployment PUT /v1/{tenant_id}/software_deployments/{deployment_id} software_deployments:update ❌ 🔍 Project ownership
Delete deployment DELETE /v1/{tenant_id}/software_deployments/{deployment_id} software_deployments:delete ❌ 🔍 Project ownership
Deployment metadata GET /v1/{tenant_id}/software_deployments/metadata/{server_id} software_deployments:metadata 🔍 🔍 Project ownership*

*Also accessible by heat_stack_user role


CloudFormation Compatibility

AWS CloudFormation API

Operation Endpoint Policy Reader Member Conditions
Describe stacks POST / cloudformation:DescribeStacks 🔍 🔍 Project stacks
Create stack POST / cloudformation:CreateStack ❌ ✅
Update stack POST / cloudformation:UpdateStack ❌ 🔍 Project ownership
Delete stack POST / cloudformation:DeleteStack ❌ 🔍 Project ownership
Cancel update POST / cloudformation:CancelUpdateStack ❌ 🔍 Project ownership
Get template POST / cloudformation:GetTemplate 🔍 🔍 Project ownership
Validate template POST / cloudformation:ValidateTemplate ✅ ✅ Template validation
Describe resources POST / cloudformation:DescribeStackResources 🔍 🔍 Project ownership
Describe events POST / cloudformation:DescribeStackEvents 🔍 🔍 Project ownership

Capabilities Summary by Role

Granted permissions:

  • ✅ View all project stacks and their details
  • ✅ Access stack resources, events, and outputs
  • ✅ Monitor stack snapshots and status
  • ✅ View software configurations and deployments
  • ✅ Validate templates and check resource types
  • ✅ Check stack health status
  • ✅ Access CloudFormation compatibility APIs (read-only)

Limitations:

  • ❌ No stack creation or modification
  • ❌ No stack lifecycle operations (suspend, resume, etc.)
  • ❌ No snapshot management
  • ❌ No software configuration creation

Granted permissions:

  • ✅ All Reader capabilities
  • ✅ Create, update, and delete stacks
  • ✅ Perform stack lifecycle operations (suspend, resume, cancel)
  • ✅ Manage stack snapshots (create, restore, delete)
  • ✅ Create and manage software configurations
  • ✅ Deploy and update software deployments
  • ✅ Mark resources as unhealthy for replacement
  • ✅ Full CloudFormation API compatibility

Limitations:

  • ❌ Cannot access administrative resource types (quotas, flavors, etc.)
  • ❌ Limited to project-scoped operations
  • ❌ Cannot perform system-level orchestration operations

Usage Examples

Infrastructure Monitoring Application

Use case: Stack monitoring, resource tracking, compliance

Recommended role: reader

# Application Credential
role: reader

# Possible actions
- openstack stack list
- openstack stack show <stack-name>
- openstack stack resource list <stack-name>
- openstack stack event list <stack-name>
- openstack stack output list <stack-name>

Infrastructure Orchestration Application

Use case: CI/CD, infrastructure automation, deployment pipelines

Recommended role: member

# Application Credential
role: member

# Possible actions
- openstack stack create -t template.yaml --parameter key=value my-stack
- openstack stack update -t updated-template.yaml my-stack
- openstack stack snapshot create my-stack snapshot-name
- openstack stack action suspend my-stack
- openstack stack action resume my-stack

Configuration Management Integration

Use case: Software deployment automation, configuration drift detection

Recommended role: member

# Application Credential
role: member

# Configuration and deployment
- openstack software config create --config-file install-script.sh web-server-config
- openstack software deployment create --config <config-id> --server <server-id> web-deployment
- openstack stack resource mark unhealthy <stack-name> <resource-name>  # Force replacement
- openstack stack check <stack-name>  # Verify stack health

Context Variables

Policies use the following variables to determine authorizations:

Variable Description
%(project_id)s Current user's project ID
%(stack_id)s Target stack ID
%(resource_name)s Target resource name
%(config_id)s Software configuration ID
%(deployment_id)s Software deployment ID

Important Notes

Best Practices

  1. Principle of least privilege: Use the reader role for monitoring and read-only infrastructure operations
  2. Template validation: Both roles can validate templates before deployment
  3. Stack lifecycle: Use member role for full orchestration capabilities
  4. Snapshot strategy: Regular snapshots before major updates (member role required)
  5. Resource health: Monitor and mark unhealthy resources for automatic replacement
  6. Project isolation: All operations are limited to project resources

Heat Specifics

  • heat_stack_user: Special role used by Heat internally for stack operations, not for Application Credentials
  • Resource types: Some advanced resource types require administrative privileges
  • Stack user: Heat creates internal users for stack operations with limited scope
  • Template complexity: Large templates may have deployment time limitations
  • Resource dependencies: Heat automatically handles resource dependency ordering