mirror of
https://github.com/ansible-lockdown/RHEL9-CIS.git
synced 2025-12-24 14:23:05 +00:00
Merge pull request #221 from ansible-lockdown/issue_audit_updates
Issue audit updates
This commit is contained in:
commit
dbbe8a9f33
9 changed files with 336 additions and 308 deletions
259
.github/workflows/devel_pipeline_validation.yml
vendored
259
.github/workflows/devel_pipeline_validation.yml
vendored
|
|
@ -1,139 +1,158 @@
|
|||
---
|
||||
|
||||
name: Devel pipeline
|
||||
name: Devel pipeline
|
||||
|
||||
on: # yamllint disable-line rule:truthy
|
||||
pull_request_target:
|
||||
types: [opened, reopened, synchronize]
|
||||
branches:
|
||||
- devel
|
||||
paths:
|
||||
- '**.yml'
|
||||
- '**.sh'
|
||||
- '**.j2'
|
||||
- '**.ps1'
|
||||
- '**.cfg'
|
||||
on: # yamllint disable-line rule:truthy
|
||||
pull_request_target:
|
||||
types: [opened, reopened, synchronize]
|
||||
branches:
|
||||
- devel
|
||||
paths:
|
||||
- '**.yml'
|
||||
- '**.sh'
|
||||
- '**.j2'
|
||||
- '**.ps1'
|
||||
- '**.cfg'
|
||||
# Allow manual running of workflow
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs
|
||||
# that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This will create messages for first time contributers and direct them to the Discord server
|
||||
welcome:
|
||||
runs-on: ubuntu-latest
|
||||
# Allow permissions for AWS auth
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
steps:
|
||||
- uses: actions/first-interaction@main
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
pr-message: |-
|
||||
Congrats on opening your first pull request and thank you for taking the time to help improve Ansible-Lockdown!
|
||||
Please join in the conversation happening on the [Discord Server](https://www.lockdownenterprise.com/discord) as well.
|
||||
# A workflow run is made up of one or more jobs
|
||||
# that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This will create messages for first time contributers and direct them to the Discord server
|
||||
welcome:
|
||||
runs-on: self-hosted
|
||||
|
||||
# This workflow contains a single job that tests the playbook
|
||||
playbook-test:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
ENABLE_DEBUG: ${{ vars.ENABLE_DEBUG }}
|
||||
# Imported as a variable by terraform
|
||||
TF_VAR_repository: ${{ github.event.repository.name }}
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
working-directory: .github/workflows/github_linux_IaC
|
||||
|
||||
steps:
|
||||
- name: Clone ${{ github.event.repository.name }}
|
||||
uses: actions/checkout@v4
|
||||
steps:
|
||||
- uses: actions/first-interaction@main
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
pr-message: |-
|
||||
Congrats on opening your first pull request and thank you for taking the time to help improve Ansible-Lockdown!
|
||||
Please join in the conversation happening on the [Discord Server](https://www.lockdownenterprise.com/discord) as well.
|
||||
|
||||
# Pull in terraform code for linux servers
|
||||
- name: Clone GitHub IaC plan
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ansible-lockdown/github_linux_IaC
|
||||
path: .github/workflows/github_linux_IaC
|
||||
# This workflow contains a single job that tests the playbook
|
||||
playbook-test:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: self-hosted
|
||||
env:
|
||||
ENABLE_DEBUG: ${{ vars.ENABLE_DEBUG }}
|
||||
# Imported as a variable by terraform
|
||||
TF_VAR_repository: ${{ github.event.repository.name }}
|
||||
AWS_REGION: "us-east-1"
|
||||
ANSIBLE_VERSION: ${{ vars.ANSIBLE_RUNNER_VERSION }}
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
working-directory: .github/workflows/github_linux_IaC
|
||||
# working-directory: .github/workflows
|
||||
|
||||
- name: Add_ssh_key
|
||||
working-directory: .github/workflows
|
||||
env:
|
||||
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
|
||||
PRIVATE_KEY: "${{ secrets.SSH_PRV_KEY }}"
|
||||
run: |
|
||||
mkdir .ssh
|
||||
chmod 700 .ssh
|
||||
echo $PRIVATE_KEY > .ssh/github_actions.pem
|
||||
chmod 600 .ssh/github_actions.pem
|
||||
steps:
|
||||
|
||||
- name: DEBUG - Show IaC files
|
||||
if: env.ENABLE_DEBUG == 'true'
|
||||
run: |
|
||||
echo "OSVAR = $OSVAR"
|
||||
echo "benchmark_type = $benchmark_type"
|
||||
pwd
|
||||
ls
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
- name: Git clone the lockdown repository to test
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Terraform_Init
|
||||
id: init
|
||||
run: terraform init
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
- name: If a variable for IAC_BRANCH is set use that branch
|
||||
working-directory: .github/workflows
|
||||
run: |
|
||||
if [ ${{ vars.IAC_BRANCH }} != '' ]; then
|
||||
echo "IAC_BRANCH=${{ vars.IAC_BRANCH }}" >> $GITHUB_ENV
|
||||
echo "Pipeline using the following IAC branch ${{ vars.IAC_BRANCH }}"
|
||||
else
|
||||
echo IAC_BRANCH=main >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Terraform_Validate
|
||||
id: validate
|
||||
run: terraform validate
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
# Pull in terraform code for linux servers
|
||||
- name: Clone GitHub IaC plan
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ansible-lockdown/github_linux_IaC
|
||||
path: .github/workflows/github_linux_IaC
|
||||
ref: ${{ env.IAC_BRANCH }}
|
||||
|
||||
- name: Terraform_Apply
|
||||
id: apply
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
run: terraform apply -var-file "github_vars.tfvars" -var-file "${OSVAR}.tfvars" --auto-approve -input=false
|
||||
# Uses dedicated restricted role and policy to enable this only for this task
|
||||
# No credentials are part of github for AWS auth
|
||||
- name: configure aws credentials
|
||||
uses: aws-actions/configure-aws-credentials@main
|
||||
with:
|
||||
role-to-assume: ${{ secrets.AWS_ASSUME_ROLE }}
|
||||
role-session-name: ${{ secrets.AWS_ROLE_SESSION }}
|
||||
aws-region: ${{ env.AWS_REGION }}
|
||||
|
||||
## Debug Section
|
||||
- name: DEBUG - Show Ansible hostfile
|
||||
if: env.ENABLE_DEBUG == 'true'
|
||||
run: cat hosts.yml
|
||||
- name: DEBUG - Show IaC files
|
||||
if: env.ENABLE_DEBUG == 'true'
|
||||
run: |
|
||||
echo "OSVAR = $OSVAR"
|
||||
echo "benchmark_type = $benchmark_type"
|
||||
echo "PRIVSUBNET_ID = $AWS_PRIVSUBNET_ID"
|
||||
echo "VPC_ID" = $AWS_VPC_SECGRP_ID"
|
||||
pwd
|
||||
ls
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
PRIVSUBNET_ID: ${{ secrets.AWS_PRIVSUBNET_ID }}
|
||||
VPC_ID: ${{ secrets.AWS_VPC_SECGRP_ID }}
|
||||
|
||||
# Aws deployments taking a while to come up insert sleep or playbook fails
|
||||
- name: Tofu init
|
||||
id: init
|
||||
run: tofu init
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
|
||||
- name: Sleep for 60 seconds
|
||||
run: sleep ${{ vars.BUILD_SLEEPTIME }}
|
||||
- name: Tofu validate
|
||||
id: validate
|
||||
run: tofu validate
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
|
||||
# Run the Ansibleplaybook
|
||||
- name: Run_Ansible_Playbook
|
||||
uses: arillso/action.playbook@master
|
||||
with:
|
||||
playbook: site.yml
|
||||
inventory: .github/workflows/github_linux_IaC/hosts.yml
|
||||
galaxy_file: collections/requirements.yml
|
||||
private_key: ${{ secrets.SSH_PRV_KEY }}
|
||||
# verbose: 3
|
||||
env:
|
||||
ANSIBLE_HOST_KEY_CHECKING: "false"
|
||||
ANSIBLE_DEPRECATION_WARNINGS: "false"
|
||||
ANSIBLE_INJECT_FACT_VARS: "false"
|
||||
- name: Tofu apply
|
||||
id: apply
|
||||
env:
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
TF_VAR_privsubnet_id: ${{ secrets.AWS_PRIVSUBNET_ID }}
|
||||
TF_VAR_vpc_secgrp_id: ${{ secrets.AWS_VPC_SECGRP_ID }}
|
||||
run: tofu apply -var-file "${OSVAR}.tfvars" --auto-approve -input=false
|
||||
|
||||
# Remove test system - User secrets to keep if necessary
|
||||
## Debug Section
|
||||
- name: DEBUG - Show Ansible hostfile
|
||||
if: env.ENABLE_DEBUG == 'true'
|
||||
run: cat hosts.yml
|
||||
|
||||
- name: Terraform_Destroy
|
||||
if: always() && env.ENABLE_DEBUG == 'false'
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
run: terraform destroy -var-file "github_vars.tfvars" -var-file "${OSVAR}.tfvars" --auto-approve -input=false
|
||||
# Aws deployments taking a while to come up insert sleep or playbook fails
|
||||
|
||||
- name: Sleep to allow system to come up
|
||||
run: sleep ${{ vars.BUILD_SLEEPTIME }}
|
||||
|
||||
# Run the Ansible playbook
|
||||
- name: Run_Ansible_Playbook
|
||||
env:
|
||||
ANSIBLE_HOST_KEY_CHECKING: "false"
|
||||
ANSIBLE_DEPRECATION_WARNINGS: "false"
|
||||
run: |
|
||||
/opt/ansible_${{ env.ANSIBLE_VERSION }}_venv/bin/ansible-playbook -i hosts.yml --private-key ~/.ssh/le_runner ../../../site.yml
|
||||
|
||||
# Remove test system - User secrets to keep if necessary
|
||||
|
||||
- name: Tofu Destroy
|
||||
if: always() && env.ENABLE_DEBUG == 'false'
|
||||
env:
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
TF_VAR_privsubnet_id: ${{ secrets.AWS_PRIVSUBNET_ID }}
|
||||
TF_VAR_vpc_secgrp_id: ${{ secrets.AWS_VPC_SECGRP_ID }}
|
||||
run: tofu destroy -var-file "${OSVAR}.tfvars" --auto-approve -input=false
|
||||
|
|
|
|||
246
.github/workflows/main_pipeline_validation.yml
vendored
246
.github/workflows/main_pipeline_validation.yml
vendored
|
|
@ -1,128 +1,156 @@
|
|||
---
|
||||
|
||||
name: Main pipeline
|
||||
name: Main pipeline
|
||||
|
||||
on: # yamllint disable-line rule:truthy
|
||||
pull_request_target:
|
||||
types: [opened, reopened, synchronize]
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- '**.yml'
|
||||
- '**.sh'
|
||||
- '**.j2'
|
||||
- '**.ps1'
|
||||
- '**.cfg'
|
||||
on: # yamllint disable-line rule:truthy
|
||||
pull_request_target:
|
||||
types: [opened, reopened, synchronize]
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- '**.yml'
|
||||
- '**.sh'
|
||||
- '**.j2'
|
||||
- '**.ps1'
|
||||
- '**.cfg'
|
||||
|
||||
# A workflow run is made up of one or more jobs
|
||||
# that can run sequentially or in parallel
|
||||
jobs:
|
||||
# Allow permissions for AWS auth
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: read
|
||||
pull-requests: read
|
||||
|
||||
# This workflow contains a single job that tests the playbook
|
||||
playbook-test:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
ENABLE_DEBUG: ${{ vars.ENABLE_DEBUG }}
|
||||
# Imported as a variable by terraform
|
||||
TF_VAR_repository: ${{ github.event.repository.name }}
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
working-directory: .github/workflows/github_linux_IaC
|
||||
# A workflow run is made up of one or more jobs
|
||||
# that can run sequentially or in parallel
|
||||
jobs:
|
||||
# This will create messages for first time contributers and direct them to the Discord server
|
||||
welcome:
|
||||
runs-on: self-hosted
|
||||
|
||||
steps:
|
||||
- name: Clone ${{ github.event.repository.name }}
|
||||
uses: actions/checkout@v4
|
||||
steps:
|
||||
- uses: actions/first-interaction@main
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
pr-message: |-
|
||||
Congrats on opening your first pull request and thank you for taking the time to help improve Ansible-Lockdown!
|
||||
Please join in the conversation happening on the [Discord Server](https://www.lockdownenterprise.com/discord) as well.
|
||||
|
||||
# Pull in terraform code for linux servers
|
||||
- name: Clone GitHub IaC plan
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ansible-lockdown/github_linux_IaC
|
||||
path: .github/workflows/github_linux_IaC
|
||||
# This workflow contains a single job that tests the playbook
|
||||
playbook-test:
|
||||
# The type of runner that the job will run on
|
||||
runs-on: self-hosted
|
||||
env:
|
||||
ENABLE_DEBUG: ${{ vars.ENABLE_DEBUG }}
|
||||
# Imported as a variable by terraform
|
||||
TF_VAR_repository: ${{ github.event.repository.name }}
|
||||
AWS_REGION : "us-east-1"
|
||||
ANSIBLE_VERSION: ${{ vars.ANSIBLE_RUNNER_VERSION }}
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
working-directory: .github/workflows/github_linux_IaC
|
||||
# working-directory: .github/workflows
|
||||
|
||||
- name: Add_ssh_key
|
||||
working-directory: .github/workflows
|
||||
env:
|
||||
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
|
||||
PRIVATE_KEY: "${{ secrets.SSH_PRV_KEY }}"
|
||||
run: |
|
||||
mkdir .ssh
|
||||
chmod 700 .ssh
|
||||
echo $PRIVATE_KEY > .ssh/github_actions.pem
|
||||
chmod 600 .ssh/github_actions.pem
|
||||
steps:
|
||||
|
||||
- name: DEBUG - Show IaC files
|
||||
if: env.ENABLE_DEBUG == 'true'
|
||||
run: |
|
||||
echo "OSVAR = $OSVAR"
|
||||
echo "benchmark_type = $benchmark_type"
|
||||
pwd
|
||||
ls
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
- name: Git clone the lockdown repository to test
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha }}
|
||||
|
||||
- name: Terraform_Init
|
||||
id: init
|
||||
run: terraform init
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
- name: If a variable for IAC_BRANCH is set use that branch
|
||||
working-directory: .github/workflows
|
||||
run: |
|
||||
if [ ${{ vars.IAC_BRANCH }} != '' ]; then
|
||||
echo "IAC_BRANCH=${{ vars.IAC_BRANCH }}" >> $GITHUB_ENV
|
||||
echo "Pipeline using the following IAC branch ${{ vars.IAC_BRANCH }}"
|
||||
else
|
||||
echo IAC_BRANCH=main >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: Terraform_Validate
|
||||
id: validate
|
||||
run: terraform validate
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
# Pull in terraform code for linux servers
|
||||
- name: Clone GitHub IaC plan
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
repository: ansible-lockdown/github_linux_IaC
|
||||
path: .github/workflows/github_linux_IaC
|
||||
ref: ${{ env.IAC_BRANCH }}
|
||||
|
||||
- name: Terraform_Apply
|
||||
id: apply
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
run: terraform apply -var-file "github_vars.tfvars" -var-file "${OSVAR}.tfvars" --auto-approve -input=false
|
||||
# Uses dedicated restricted role and policy to enable this only for this task
|
||||
# No credentials are part of github for AWS auth
|
||||
- name: configure aws credentials
|
||||
uses: aws-actions/configure-aws-credentials@main
|
||||
with:
|
||||
role-to-assume: ${{ secrets.AWS_ASSUME_ROLE }}
|
||||
role-session-name: ${{ secrets.AWS_ROLE_SESSION }}
|
||||
aws-region: ${{ env.AWS_REGION }}
|
||||
|
||||
## Debug Section
|
||||
- name: DEBUG - Show Ansible hostfile
|
||||
if: env.ENABLE_DEBUG == 'true'
|
||||
run: cat hosts.yml
|
||||
- name: DEBUG - Show IaC files
|
||||
if: env.ENABLE_DEBUG == 'true'
|
||||
run: |
|
||||
echo "OSVAR = $OSVAR"
|
||||
echo "benchmark_type = $benchmark_type"
|
||||
echo "PRIVSUBNET_ID = $AWS_PRIVSUBNET_ID"
|
||||
echo "VPC_ID" = $AWS_VPC_SECGRP_ID"
|
||||
pwd
|
||||
ls
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
PRIVSUBNET_ID: ${{ secrets.AWS_PRIVSUBNET_ID }}
|
||||
VPC_ID: ${{ secrets.AWS_VPC_SECGRP_ID }}
|
||||
|
||||
# Aws deployments taking a while to come up insert sleep or playbook fails
|
||||
- name: Tofu init
|
||||
id: init
|
||||
run: tofu init
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
|
||||
- name: Sleep for 60 seconds
|
||||
run: sleep ${{ vars.BUILD_SLEEPTIME }}
|
||||
- name: Tofu validate
|
||||
id: validate
|
||||
run: tofu validate
|
||||
env:
|
||||
# Imported from GitHub variables this is used to load the relevant OS.tfvars file
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
|
||||
# Run the Ansibleplaybook
|
||||
- name: Run_Ansible_Playbook
|
||||
uses: arillso/action.playbook@master
|
||||
with:
|
||||
playbook: site.yml
|
||||
inventory: .github/workflows/github_linux_IaC/hosts.yml
|
||||
galaxy_file: collections/requirements.yml
|
||||
private_key: ${{ secrets.SSH_PRV_KEY }}
|
||||
# verbose: 3
|
||||
env:
|
||||
ANSIBLE_HOST_KEY_CHECKING: "false"
|
||||
ANSIBLE_DEPRECATION_WARNINGS: "false"
|
||||
ANSIBLE_INJECT_FACT_VARS: "false"
|
||||
- name: Tofu apply
|
||||
id: apply
|
||||
env:
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
TF_VAR_privsubnet_id: ${{ secrets.AWS_PRIVSUBNET_ID }}
|
||||
TF_VAR_vpc_secgrp_id: ${{ secrets.AWS_VPC_SECGRP_ID }}
|
||||
run: tofu apply -var-file "${OSVAR}.tfvars" --auto-approve -input=false
|
||||
|
||||
# Remove test system - User secrets to keep if necessary
|
||||
## Debug Section
|
||||
- name: DEBUG - Show Ansible hostfile
|
||||
if: env.ENABLE_DEBUG == 'true'
|
||||
run: cat hosts.yml
|
||||
|
||||
- name: Terraform_Destroy
|
||||
if: always() && env.ENABLE_DEBUG == 'false'
|
||||
env:
|
||||
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
run: terraform destroy -var-file "github_vars.tfvars" -var-file "${OSVAR}.tfvars" --auto-approve -input=false
|
||||
# Aws deployments taking a while to come up insert sleep or playbook fails
|
||||
|
||||
- name: Sleep to allow system to come up
|
||||
run: sleep ${{ vars.BUILD_SLEEPTIME }}
|
||||
|
||||
# Run the Ansible playbook
|
||||
- name: Run_Ansible_Playbook
|
||||
env:
|
||||
ANSIBLE_HOST_KEY_CHECKING: "false"
|
||||
ANSIBLE_DEPRECATION_WARNINGS: "false"
|
||||
run: |
|
||||
/opt/ansible_${{ env.ANSIBLE_VERSION }}_venv/bin/ansible-playbook -i hosts.yml --private-key ~/.ssh/le_runner ../../../site.yml
|
||||
|
||||
# Remove test system - User secrets to keep if necessary
|
||||
|
||||
- name: Tofu Destroy
|
||||
if: always() && env.ENABLE_DEBUG == 'false'
|
||||
env:
|
||||
OSVAR: ${{ vars.OSVAR }}
|
||||
TF_VAR_benchmark_type: ${{ vars.BENCHMARK_TYPE }}
|
||||
TF_VAR_privsubnet_id: ${{ secrets.AWS_PRIVSUBNET_ID }}
|
||||
TF_VAR_vpc_secgrp_id: ${{ secrets.AWS_VPC_SECGRP_ID }}
|
||||
run: tofu destroy -var-file "${OSVAR}.tfvars" --auto-approve -input=false
|
||||
|
|
|
|||
30
.github/workflows/update_galaxy.yml
vendored
30
.github/workflows/update_galaxy.yml
vendored
|
|
@ -1,19 +1,19 @@
|
|||
---
|
||||
|
||||
name: update galaxy
|
||||
name: update galaxy
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
jobs:
|
||||
update_role:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
jobs:
|
||||
update_role:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Action Ansible Galaxy Release ${{ github.ref_name }}
|
||||
uses: ansible-actions/ansible-galaxy-action@main
|
||||
with:
|
||||
galaxy_api_key: ${{ secrets.GALAXY_API_KEY }}
|
||||
- name: Action Ansible Galaxy Release ${{ github.ref_name }}
|
||||
uses: ansible-actions/ansible-galaxy-action@main
|
||||
with:
|
||||
galaxy_api_key: ${{ secrets.GALAXY_API_KEY }}
|
||||
|
|
|
|||
|
|
@ -421,7 +421,7 @@ rhel9cis_rule_enable_repogpg: true
|
|||
# This variable will store the hashed GRUB bootloader password to be stored in '/boot/grub2/user.cfg' file. The default value
|
||||
# must be changed to a value that may be generated with this command 'grub2-mkpasswd-pbkdf2' and must comply with
|
||||
# this format: 'grub.pbkdf2.sha512.<Rounds>.<Salt>.<Checksum>'
|
||||
rhel9cis_bootloader_password_hash: 'grub.pbkdf2.sha512.10000.9306A36764A7BEA3BF492D1784396B27F52A71812E9955A58709F94EE70697F9BD5366F36E07DEC41B52279A056E2862A93E42069D7BBB08F5DFC2679CD43812.6C32ADA5449303AD5E67A4C150558592A05381331DE6B33463469A236871FA8E70738C6F9066091D877EF88A213C86825E093117F30E9E1BF158D0DB75E7581B' # pragma: allowlist secret
|
||||
rhel9cis_bootloader_password_hash: 'grub.pbkdf2.sha512.changethispassword' # pragma: allowlist secret
|
||||
|
||||
## Control 1.4.1
|
||||
# This variable governs whether a bootloader password should be set in '/boot/grub2/user.cfg' file.
|
||||
|
|
|
|||
|
|
@ -21,26 +21,24 @@
|
|||
when:
|
||||
- audit_format == "json"
|
||||
block:
|
||||
- name: capture data {{ post_audit_outfile }}
|
||||
ansible.builtin.shell: "cat {{ post_audit_outfile }}"
|
||||
register: post_audit
|
||||
- name: Post Audit | Capture audit data if json format
|
||||
ansible.builtin.shell: grep -E '"summary-line.*Count:.*Failed' "{{ post_audit_outfile }}" | cut -d'"' -f4
|
||||
register: post_audit_summary
|
||||
changed_when: false
|
||||
|
||||
- name: Capture post-audit result
|
||||
- name: Post Audit | Set Fact for audit summary
|
||||
ansible.builtin.set_fact:
|
||||
post_audit_summary: "{{ post_audit.stdout | from_json | json_query(summary) }}"
|
||||
vars:
|
||||
summary: summary."summary-line"
|
||||
post_audit_results: "{{ post_audit_summary.stdout }}"
|
||||
|
||||
- name: Post Audit | Capture audit data if documentation format
|
||||
when:
|
||||
- audit_format == "documentation"
|
||||
block:
|
||||
- name: Post Audit | capture data {{ post_audit_outfile }}
|
||||
ansible.builtin.shell: "tail -2 {{ post_audit_outfile }}"
|
||||
register: post_audit
|
||||
- name: Post Audit | Capture audit data if documentation format
|
||||
ansible.builtin.shell: "tail -2 /opt/audit_ubuntu2204-CIS-UBUNTU22_1720624848.documentation"
|
||||
register: post_audit_summary
|
||||
changed_when: false
|
||||
|
||||
- name: Post Audit | Capture post-audit result
|
||||
- name: Post Audit | Set Fact for audit summary
|
||||
ansible.builtin.set_fact:
|
||||
post_audit_summary: "{{ post_audit.stdout_lines }}"
|
||||
post_audit_results: "{{ post_audit_summary.stdout }}"
|
||||
|
|
|
|||
|
|
@ -90,31 +90,30 @@
|
|||
when:
|
||||
- audit_format == "json"
|
||||
block:
|
||||
- name: Pre Audit | Capture data {{ pre_audit_outfile }}
|
||||
ansible.builtin.shell: "cat {{ pre_audit_outfile }}"
|
||||
register: pre_audit
|
||||
- name: Pre Audit | Capture audit data if json format
|
||||
ansible.builtin.shell: grep -E '\"summary-line.*Count:.*Failed' "{{ pre_audit_outfile }}" | cut -d'"' -f4
|
||||
register: pre_audit_summary
|
||||
changed_when: false
|
||||
|
||||
- name: Pre Audit | Capture pre-audit result
|
||||
- name: Pre Audit | Set Fact for audit summary
|
||||
ansible.builtin.set_fact:
|
||||
pre_audit_summary: "{{ pre_audit.stdout | from_json | json_query(summary) }}"
|
||||
vars:
|
||||
summary: summary."summary-line"
|
||||
pre_audit_results: "{{ pre_audit_summary.stdout }}"
|
||||
|
||||
- name: Pre Audit | Capture audit data if documentation format
|
||||
when:
|
||||
- audit_format == "documentation"
|
||||
block:
|
||||
- name: Pre Audit | Capture data {{ pre_audit_outfile }} | documentation format
|
||||
ansible.builtin.shell: "tail -2 {{ pre_audit_outfile }}"
|
||||
register: pre_audit
|
||||
- name: Pre Audit | Capture audit data if documentation format
|
||||
ansible.builtin.shell: tail -2 "{{ pre_audit_outfile }}" | tac | tr '\n' ' '
|
||||
register: pre_audit_summary
|
||||
changed_when: false
|
||||
|
||||
- name: Pre Audit | Capture pre-audit result | documentation format
|
||||
- name: Pre Audit | Set Fact for audit summary
|
||||
ansible.builtin.set_fact:
|
||||
pre_audit_summary: "{{ pre_audit.stdout_lines }}"
|
||||
pre_audit_results: "{{ pre_audit_summary.stdout }}"
|
||||
|
||||
- name: Audit_Only | Run Audit Only
|
||||
when:
|
||||
- audit_only
|
||||
ansible.builtin.import_tasks: audit_only.yml
|
||||
ansible.builtin.import_tasks:
|
||||
file: audit_only.yml
|
||||
|
|
|
|||
|
|
@ -89,8 +89,8 @@
|
|||
group: root
|
||||
mode: '0644'
|
||||
loop:
|
||||
- { regexp: '^user-db', line: 'user-db: user' }
|
||||
- { regexp: '^system-db', line: 'system-db: local' }
|
||||
- { regexp: '^user-db', line: 'user-db:user' }
|
||||
- { regexp: '^system-db', line: 'system-db:local' }
|
||||
|
||||
- name: "1.8.4 | PATCH | Ensure GDM screen locks when the user is idle | Make db directory"
|
||||
ansible.builtin.file:
|
||||
|
|
|
|||
|
|
@ -173,7 +173,7 @@
|
|||
|
||||
- name: "6.1.10 | AUDIT | Ensure no unowned files or directories exist | Displaying any unowned files or directories"
|
||||
ansible.builtin.debug:
|
||||
msg: "Warning!! Missing owner on items in {{ rhel_09_6_1_10_audit | community.general.json_query('results[*].stdout_lines[*]') | flatten }}" # noqa jinja[invalid]
|
||||
msg: "Warning!! Missing owner on items in {{ rhel_09_6_1_10_audit.stdout_lines }}"
|
||||
when: rhel_09_6_1_10_unowned_files_found
|
||||
|
||||
- name: "6.1.10 | AUDIT | Ensure no unowned files or directories exist | warning"
|
||||
|
|
@ -220,7 +220,7 @@
|
|||
|
||||
- name: "6.1.11 | AUDIT | Ensure no ungrouped files or directories exist | Displaying all ungrouped files or directories"
|
||||
ansible.builtin.debug:
|
||||
msg: "Warning!! Missing group on items in {{ rhel_09_6_1_11_audit | community.general.json_query('results[*].stdout_lines[*]') | flatten }}" # noqa jinja[invalid]
|
||||
msg: "Warning!! Missing group on items in {{ rhel_09_6_1_11_audit.stdout_lines }}"
|
||||
when: rhel_09_6_1_11_ungrouped_files_found
|
||||
|
||||
- name: "6.1.11 | AUDIT | Ensure no ungrouped files or directories exist | warning"
|
||||
|
|
@ -258,34 +258,26 @@
|
|||
- name: "6.1.13 | AUDIT | Audit SUID executables"
|
||||
block:
|
||||
- name: "6.1.13 | AUDIT | Audit SUID executables | Find all SUID executables"
|
||||
ansible.builtin.shell: df {{ item.mount }} -P | awk {'if (NR!=1) print $6'} | xargs -I '{}' find '{}' -xdev -type f -perm -4000
|
||||
ansible.builtin.shell: "df --local -P | awk {'if (NR!=1) print $6'} | xargs -I '{}' find '{}' -xdev -type f -perm -4000"
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
register: rhel_09_6_1_13_suid_perms
|
||||
loop: "{{ ansible_facts.mounts }}"
|
||||
loop_control:
|
||||
label: "{{ item.mount }}"
|
||||
|
||||
- name: "6.1.13 | AUDIT | Audit SUID executables | set fact SUID executables"
|
||||
ansible.builtin.set_fact:
|
||||
rhel9_6_1_13_suid_found: true
|
||||
loop: "{{ rhel_09_6_1_13_suid_perms.results }}"
|
||||
when:
|
||||
- item | length > 0
|
||||
- item.stdout is defined # skipped items are part of results list, but don't have the registered module properties
|
||||
- item.stdout | length > 0
|
||||
|
||||
- name: "6.1.13 | AUDIT | Audit SUID executables | Alert SUID executables exist"
|
||||
ansible.builtin.debug:
|
||||
msg: "Warning!! SUID set on items in {{ rhel_09_6_1_13_suid_perms | community.general.json_query('results[*].stdout_lines[*]') | flatten }}" # noqa jinja[invalid]
|
||||
when: rhel9_6_1_13_suid_found
|
||||
msg: "Warning!! SUID set on items in {{ rhel_09_6_1_13_suid_perms.stdout_lines }}"
|
||||
when:
|
||||
- rhel_09_6_1_13_suid_perms.stdout is defined
|
||||
- rhel_09_6_1_13_suid_perms.stdout | length > 0
|
||||
|
||||
- name: "6.1.13 | AUDIT | Audit SUID executables | Alert SUID executables exist | warning"
|
||||
ansible.builtin.import_tasks:
|
||||
file: warning_facts.yml
|
||||
vars:
|
||||
warn_control_id: '6.1.13'
|
||||
when: rhel9_6_1_13_suid_found
|
||||
when:
|
||||
- rhel_09_6_1_13_suid_perms.stdout is defined
|
||||
- rhel_09_6_1_13_suid_perms.stdout | length > 0
|
||||
vars:
|
||||
rhel9_6_1_13_suid_found: false
|
||||
when:
|
||||
|
|
@ -301,34 +293,26 @@
|
|||
- name: "6.1.14 | AUDIT | Audit SGID executables"
|
||||
block:
|
||||
- name: "6.1.14 | AUDIT | Audit SGID executables | Find all SGID executables"
|
||||
ansible.builtin.shell: df {{ item.mount }} -P | awk {'if (NR!=1) print $6'} | xargs -I '{}' find '{}' -xdev -type f -perm -2000
|
||||
ansible.builtin.shell: df --local -P | awk {'if (NR!=1) print $6'} | xargs -I '{}' find '{}' -xdev -type f -perm -2000
|
||||
failed_when: false
|
||||
changed_when: false
|
||||
register: rhel_09_6_1_14_sgid_perms
|
||||
loop: "{{ ansible_facts.mounts }}"
|
||||
loop_control:
|
||||
label: "{{ item.mount }}"
|
||||
|
||||
- name: "6.1.14 | AUDIT | Audit SGID executables | Set fact SGID executables"
|
||||
ansible.builtin.set_fact:
|
||||
rhel9_6_1_14_sgid_found: true
|
||||
loop: "{{ rhel_09_6_1_14_sgid_perms.results }}"
|
||||
when:
|
||||
- item | length > 0
|
||||
- item.stdout is defined # skipped items are part of results list, but don't have the registered module properties
|
||||
- item.stdout | length > 0
|
||||
|
||||
- name: "6.1.14 | AUDIT | Audit SGID executables | Alert SGID executables exist"
|
||||
ansible.builtin.debug:
|
||||
msg: "Warning!! SGID set on items in {{ rhel_09_6_1_14_sgid_perms | community.general.json_query('results[*].stdout_lines[*]') | flatten }}" # noqa jinja[invalid]
|
||||
when: rhel9_6_1_14_sgid_found
|
||||
msg: "Warning!! SGID set on items in {{ rhel_09_6_1_14_sgid_perms.stdout_lines }}"
|
||||
when:
|
||||
- rhel_09_6_1_14_sgid_perms.stdout is defined
|
||||
- rhel_09_6_1_14_sgid_perms.stdout | length > 0
|
||||
|
||||
- name: "6.1.14 | AUDIT | Audit SGID executables| warning"
|
||||
ansible.builtin.import_tasks:
|
||||
file: warning_facts.yml
|
||||
vars:
|
||||
warn_control_id: '6.1.14'
|
||||
when: rhel9_6_1_14_sgid_found
|
||||
when:
|
||||
- rhel_09_6_1_14_sgid_perms.stdout is defined
|
||||
- rhel_09_6_1_14_sgid_perms.stdout | length > 0
|
||||
vars:
|
||||
rhel9_6_1_14_sgid_found: false
|
||||
when:
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ audit_format: json
|
|||
|
||||
audit_vars_path: "{{ audit_conf_dir }}/vars/{{ ansible_facts.hostname }}.yml"
|
||||
audit_results: |
|
||||
The audit results are: {{ pre_audit_summary }}
|
||||
{% if not audit_only %}The post remediation audit results are: {{ post_audit_summary }}{% endif %}
|
||||
The{% if not audit_only %} pre remediation{% endif %} audit results are: {{ pre_audit_results}}
|
||||
{% if not audit_only %}The post remediation audit results are: {{ post_audit_results }}{% endif %}
|
||||
|
||||
Full breakdown can be found in {{ audit_log_dir }}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue