{"id":754,"date":"2016-07-26T07:00:35","date_gmt":"2016-07-26T01:30:35","guid":{"rendered":"https:\/\/pheonixsolutions.com\/blog\/?p=754"},"modified":"2026-09-04T16:32:11","modified_gmt":"2026-09-04T11:02:11","slug":"rundeck-acl-policy-creation","status":"publish","type":"post","link":"https:\/\/pheonixsolutions.com\/blog\/rundeck-acl-policy-creation\/","title":{"rendered":"How to Create ACL Policies in Rundeck for User and Project Access"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Rundeck provides capabilities for running commands, creating jobs, scheduling jobs, and managing operational tasks.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Access control is important when multiple users or teams work with the same Rundeck environment. ACL policies can be used to control what users or groups are allowed to access at the project, job, node, and application levels.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this post, we will look at examples of how to restrict user access at the project level using Rundeck ACL policies.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Files with the <strong><code>.aclpolicy<\/code><\/strong> extension in the <code>\/etc\/rundeck<\/code> directory (the default installation location) are considered valid ACL policy files for access restrictions in Rundeck.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Prerequisites<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before creating an ACL policy, ensure that you have:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Rundeck installed and configured.<\/li>\n\n\n\n<li>Access to the Rundeck server.<\/li>\n\n\n\n<li>Appropriate permissions to create or modify ACL policy files.<\/li>\n\n\n\n<li>Basic knowledge of Rundeck projects, jobs, groups, and resources.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Implementation<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Create a Project-Level Job Policy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>rd-acl<\/code><\/strong> is a built-in command that helps create user, group, and Rundeck policies.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The following command can be used to create a policy that restricts access to a specific job within a project:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">rd-acl test --context project --groups groupname --project projectname --job testjob --allow read,run -v<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The command generates policy content similar to the following:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">---\nfor:\n  job:\n  - allow:\n    - read\n    - run\n    equals:\n      name: 'testjob'\n\ndescription: generated\ncontext:\n  project: Alerts\nby:\n  group: groupname<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Where:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>test<\/strong> \u2013 Displays the output in the command prompt. Create a file with the <code>.aclpolicy<\/code> extension using the output content.<\/li>\n\n\n\n<li><strong>&#8211;context<\/strong> \u2013 Specifies the access request context. Options are <code>rundeck<\/code> and <code>project<\/code>.<\/li>\n\n\n\n<li><strong>&#8211;project<\/strong> \u2013 Specifies the project name.<\/li>\n\n\n\n<li><strong>&#8211;job<\/strong> \u2013 Specifies the job name.<\/li>\n\n\n\n<li><strong>&#8211;allow<\/strong> \u2013 Specifies the privileges for the selected category.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">As mentioned earlier, you can simply create <strong><code>groupname.aclpolicy<\/code><\/strong> with the above-mentioned content.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One advantage is that you do not need to restart the Rundeck service after creating or modifying the ACL policy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Create an Application-Level Policy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The following command can be used to create a read privilege for a group:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">rd-acl test --context application --groups groupname --project projectname --allow read -v<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The output will be similar to:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">for:\n  project:\n  - allow: read\n    equals:\n      name: groupname\ndescription: generated\ncontext:\n  application: rundeck\nby:\n  group: alerts<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Where:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>application<\/strong> \u2013 Here, application refers to Rundeck.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">3. Add Read and Run Privileges to a Resource<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The following command can be used to add <code>read<\/code> and <code>run<\/code> privileges:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">rd-acl test --context project --groups alerts --project &lt;projectname> --resource=node --allow read,run -v<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Where:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>resource<\/strong> \u2013 Specifies a specific resource within the project or resources as required.<\/li>\n\n\n\n<li>Options include <strong>jobs, system, project, and node<\/strong>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. Create a Project-Level ACL Policy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In a simplified manner, the following ACL provides privileges for a specific group within a project.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create a file named <strong><code>groupname.aclpolicy<\/code><\/strong> and add the following content:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">---\ndescription: \"Allow users in runjobs group to run, kill jobs, etc. in the project called YOUR PROJECT\"\ncontext:\n  project: YOUR PROJECT\nby:\n  group: groupname\nfor:\n  resource:\n    - equals:\n        kind: job\n      allow: [read, run, kill]\n    - equals:\n        kind: node\n      allow: [read]\n    - equals:\n        kind: event\n      allow: [read] # allow reading activity logs\n    - equals:\n        kind: 'adhoc'\n      allow: [read,run,kill]\n  adhoc:\n    - allow: [read,run,kill] # allow running\/killing adhoc jobs\n  job:\n    - allow: [read,run,kill]\n  node:\n    - allow: [read,run] # allow read\/run for nodes\n---\ncontext:\n  application: rundeck\ndescription: \"Users in the 'runjobs' group can launch jobs in the project called YOUR PROJECT but not edit them\"\nfor:\n  project:\n    - match:\n        name: 'YOUR PROJECT'\n      allow: [read]\n  system:\n    - match:\n        name: '.*'\n      allow: [read]\nby:\n  group: groupname<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This policy provides the specified group with permissions to work with jobs and nodes in the selected project while controlling the level of access available to them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Rundeck ACL policies provide a practical way to control access to projects, jobs, nodes, and other resources based on users and groups.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By creating <code>.aclpolicy<\/code> files with the required permissions, administrators can define what users or groups are allowed to read, run, or manage specific resources. This makes it easier to provide the required level of access without granting unnecessary permissions.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently Asked Questions (FAQ)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. What is an ACL policy in Rundeck?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">An ACL policy defines the permissions that users or groups have within Rundeck. It can be used to control access to projects, jobs, nodes, and other resources.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Where are Rundeck ACL policy files stored?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In the original setup described in this article, ACL policy files are stored under:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/etc\/rundeck<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Files with the <code>.aclpolicy<\/code> extension are used for access-control policies.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Does Rundeck need to be restarted after creating an ACL policy?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The original procedure notes that a Rundeck service restart is not required after creating the ACL policy file.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Related Articles<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/pheonixsolutions.com\/blog\/how-to-set-up-rundeck-in-a-centos-7-server\/\">How to set up rundeck in a centos-7 server<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/pheonixsolutions.com\/blog\/setting-a-job-on-rundeck\/\">Setting a job on Rundeck<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Talk to Our Technology Experts<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Planning your AWS infrastructure or looking to improve an existing cloud environment? Our team can help with cloud architecture, infrastructure, DevOps, security, deployment, and ongoing optimization.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><a href=\"https:\/\/pheonixsolutions.com\/contact\">Connect with our technology experts.<\/a><\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction Rundeck provides capabilities for running commands, creating jobs, scheduling jobs, and managing operational tasks. Access control is important when [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[1022],"tags":[],"class_list":["post-754","post","type-post","status-publish","format-standard","hentry","category-web-architecture","psol-cat-web-architecture"],"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/phn2x7-ca","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/754","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/comments?post=754"}],"version-history":[{"count":1,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/754\/revisions"}],"predecessor-version":[{"id":11361,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/posts\/754\/revisions\/11361"}],"wp:attachment":[{"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/media?parent=754"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/categories?post=754"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pheonixsolutions.com\/blog\/wp-json\/wp\/v2\/tags?post=754"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}