-
Notifications
You must be signed in to change notification settings - Fork 44
ROX-35289: add post-upgrade script to skip init container evaluation #123
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
AlexVulaj
wants to merge
1
commit into
main
Choose a base branch
from
AlexVulaj/ROX-35289-skip-init-container-script
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+122
−0
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| # Skip Init Container Evaluation | ||
|
|
||
| Starting in ACS 5.0, policies evaluate init containers by default. This script adds `skipContainerTypes: ["INIT"]` to all existing policies that don't already have an evaluation filter, preserving the pre-5.0 behavior where init containers were not evaluated. | ||
|
|
||
| ## Usage | ||
|
|
||
| ```bash | ||
| export ROX_ENDPOINT="central.example.com:443" | ||
| export ROX_API_TOKEN="your-api-token" | ||
|
|
||
| ./skip-init-container-evaluation.sh | ||
| ``` | ||
|
|
||
| ## Requirements | ||
|
|
||
| - ACS 5.0 or later | ||
| - `curl` and `jq` installed | ||
| - An API token with policy read/write permissions | ||
|
|
||
| ## What it does | ||
|
|
||
| 1. Checks that Central is running ACS 5.0+ | ||
| 2. Lists all policies and prompts for confirmation before making changes | ||
| 3. For each policy without an existing evaluation filter, adds `skipContainerTypes: ["INIT"]` | ||
| 4. Skips policies that already have a container type filter set | ||
| 5. Skips build-only policies (container type filters are not applicable at build time) | ||
|
|
||
| ## Policy-as-Code users | ||
|
|
||
| If you manage policies via SecurityPolicy CRDs and a GitOps workflow, update your policy manifests directly instead of running this script. Add the following to each policy spec: | ||
|
|
||
| ```yaml | ||
| spec: | ||
| # ... existing policy fields ... | ||
| evaluationFilter: | ||
| skipContainerTypes: | ||
| - INIT | ||
| ``` |
84 changes: 84 additions & 0 deletions
84
util-scripts/skip-init-container-evaluation/skip-init-container-evaluation.sh
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,84 @@ | ||
| #!/bin/bash | ||
| # Adds skipContainerTypes: ["INIT"] to all existing policies that don't already have it. | ||
| # This is intended for customers upgrading to 5.0+ who want to preserve the pre-5.0 behavior | ||
| # where init containers were not evaluated by policies. | ||
|
|
||
| set -euo pipefail | ||
|
|
||
| if [[ -z "${ROX_ENDPOINT:-}" ]]; then | ||
| echo >&2 "ROX_ENDPOINT must be set" | ||
| exit 1 | ||
| fi | ||
|
|
||
| if [[ -z "${ROX_API_TOKEN:-}" ]]; then | ||
| echo >&2 "ROX_API_TOKEN must be set" | ||
| exit 1 | ||
| fi | ||
|
|
||
| API="https://${ROX_ENDPOINT}" | ||
| AUTH="Authorization: Bearer ${ROX_API_TOKEN}" | ||
|
|
||
| # Version check — require 5.0+ | ||
| version=$(curl -sk -H "$AUTH" "$API/v1/metadata" | jq -r '.version') | ||
| major=$(echo "$version" | cut -d. -f1) | ||
|
|
||
| if [[ "$major" -lt 5 ]]; then | ||
| echo >&2 "This script requires ACS 5.0 or later (detected: $version)" | ||
| exit 1 | ||
| fi | ||
|
|
||
| echo "ACS version: $version" | ||
|
|
||
| # List all policies | ||
| policies=$(curl -sk -H "$AUTH" "$API/v1/policies" | jq -r '.policies[].id') | ||
| total=$(echo "$policies" | wc -l | tr -d ' ') | ||
| updated=0 | ||
| skipped=0 | ||
|
|
||
| echo "Found $total policies" | ||
| echo "" | ||
| echo "This will add skipContainerTypes: [\"INIT\"] to all policies without an existing evaluation filter." | ||
| echo "This action is not easily reversible." | ||
| read -rp "Continue? (yes/no): " confirm | ||
| if [[ "$confirm" != "yes" ]]; then | ||
| echo "Aborted." | ||
| exit 0 | ||
| fi | ||
| echo "" | ||
|
|
||
| for id in $policies; do | ||
| policy=$(curl -sk -H "$AUTH" "$API/v1/policies/$id") | ||
| name=$(echo "$policy" | jq -r '.name') | ||
|
|
||
| # Skip if any evaluation filter is already configured | ||
| existing_filter=$(echo "$policy" | jq -e '.evaluationFilter // empty' 2>/dev/null) | ||
| if [[ -n "$existing_filter" && "$existing_filter" != "{}" ]]; then | ||
| echo " SKIP: \"$name\" — already has evaluation filter" | ||
| skipped=$((skipped + 1)) | ||
| continue | ||
| fi | ||
|
|
||
| # Skip build-only policies — container type filters don't apply at build time | ||
| lifecycle_stages=$(echo "$policy" | jq -r '.lifecycleStages[]') | ||
| if [[ "$lifecycle_stages" == "BUILD" ]]; then | ||
| echo " SKIP: \"$name\" — build-only policy" | ||
| skipped=$((skipped + 1)) | ||
| continue | ||
| fi | ||
|
|
||
| # Add skipContainerTypes: ["INIT"] to the evaluation filter | ||
| updated_policy=$(echo "$policy" | jq '.evaluationFilter = {"skipContainerTypes": ["INIT"]}') | ||
|
|
||
| result=$(curl -sk -o /dev/null -w "%{http_code}" -XPUT -H "$AUTH" -H "Content-Type: application/json" \ | ||
| "$API/v1/policies/$id" --data "$updated_policy") | ||
|
|
||
| if [[ "$result" == "200" ]]; then | ||
| echo " UPDATED: \"$name\"" | ||
| updated=$((updated + 1)) | ||
| else | ||
| echo >&2 " ERROR: \"$name\" — HTTP $result" | ||
| fi | ||
| done | ||
|
|
||
| echo "" | ||
| echo "Done. Updated: $updated, Skipped: $skipped, Total: $total" | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
Bearer-token API calls disable TLS verification.
Using
curl -kfor authenticated requests allows MITM interception/tampering on the connection path. For a policy-mutation script, this is a significant security risk.Suggested fix
If insecure TLS is required for some environments, gate it behind an explicit opt-in env var instead of defaulting to
-k. As per path instructions, this is a major security issue to prioritize.Also applies to: 33-33, 50-50, 72-73
🤖 Prompt for AI Agents
Source: Path instructions