Skip to content

Commit

Permalink
ci: switch to OIDC Federation for Azure
Browse files Browse the repository at this point in the history
Updating the packer build for Azure to use OIDC Federation instead of a static credential.

I've updated the CI build to have valid credentials for a service principal. This new SP has no access to anything - I've just added it to allow the packer validate step to work. I've also just hard-coded the client IDs into the actions on the grounds that they aren't credentials and don't need to be in secrets.
  • Loading branch information
adamconnelly committed Sep 13, 2024
1 parent b14b40a commit 655e060
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 13 deletions.
18 changes: 12 additions & 6 deletions .github/workflows/build_gcp_azure_manual.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@ jobs:
PKR_VAR_image_base_name: spacelift-worker
PKR_VAR_image_family: spacelift-worker
# Azure
PKR_VAR_client_id: ${{ secrets.AZURE_CLIENT_ID }}
PKR_VAR_client_secret: ${{ secrets.AZURE_CLIENT_SECRET }}
PKR_VAR_client_id: "976e4a6e-c619-417e-9add-50e2d674e2db"
PKR_VAR_tenant_id: ${{ secrets.AZURE_TENANT_ID }}
PKR_VAR_subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
PKR_VAR_oidc_request_url: "${ACTIONS_ID_TOKEN_REQUEST_URL}"
PKR_VAR_oidc_request_token: "${ACTIONS_ID_TOKEN_REQUEST_TOKEN}"
PKR_VAR_image_resource_group: rg-worker_images-public-westeurope
PKR_VAR_packer_work_group: rg-worker_images_packer-public-westeurope
PKR_VAR_gallery_resource_group: rg-worker_images-public-westeurope
Expand Down Expand Up @@ -63,6 +64,11 @@ jobs:
run: |
echo "PKR_VAR_suffix=$(date +%s)-$(cat /dev/urandom | tr -dc 'a-z0-9' | head -c 8)" >> $GITHUB_ENV
- name: Authenticate with Azure
if: matrix.cloud == 'azure'
run: |
echo "PKR_VAR_client_oidc_token=$(curl -H "Accept: application/json; api-version=2.0" -H "Authorization: Bearer ${ACTIONS_ID_TOKEN_REQUEST_TOKEN}" -H "Content-Type: application/json" -G --data-urlencode "audience=api://AzureADTokenExchange" "${ACTIONS_ID_TOKEN_REQUEST_URL}" | jq -r '.value')" >>${GITHUB_ENV}
- name: Setup packer
uses: hashicorp/setup-packer@main
with:
Expand All @@ -74,7 +80,7 @@ jobs:
- name: Azure => Build the AMI using Packer
if: matrix.cloud == 'azure'
run: packer build azure.pkr.hcl

- name: GCP => Build the AMI using Packer for US
if: matrix.cloud == 'gcp'
run: packer build gcp.pkr.hcl
Expand Down Expand Up @@ -152,9 +158,9 @@ jobs:
content = fs.readFileSync("./manifest_gcp.json", "utf8");
manifest = JSON.parse(content);
const gcpLinesToPrint = [];
manifest["builds"].forEach((build) => {
artifact = build["artifact_id"];
if (artifact.indexOf("-us-") > 0) {
Expand All @@ -167,7 +173,7 @@ jobs:
gcpLinesToPrint.push(` - Asia | \`${artifact}\``);
}
});
console.log("## Azure");
console.log("");
console.log(`- Publisher | \`spaceliftinc1625499025476\`.`);
Expand Down
8 changes: 6 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ jobs:
matrix:
cloud: [aws, azure, gcp]
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
env:
# AWS
PKR_VAR_encrypt_boot: false
Expand All @@ -24,10 +27,11 @@ jobs:
PKR_VAR_image_base_name: spacelift-worker
PKR_VAR_image_family: spacelift-worker
# Azure
PKR_VAR_client_id: ${{ secrets.AZURE_CLIENT_ID }}
PKR_VAR_client_secret: ${{ secrets.AZURE_CLIENT_SECRET }}
PKR_VAR_client_id: "433d3ca3-1866-4dfa-b9bf-65d6c4391ec7"
PKR_VAR_tenant_id: ${{ secrets.AZURE_TENANT_ID }}
PKR_VAR_subscription_id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
PKR_VAR_oidc_request_url: "${ACTIONS_ID_TOKEN_REQUEST_URL}"
PKR_VAR_oidc_request_token: "${ACTIONS_ID_TOKEN_REQUEST_TOKEN}"
PKR_VAR_image_resource_group: rg-worker_images-public-westeurope
PKR_VAR_packer_work_group: rg-worker_images_packer-public-westeurope
PKR_VAR_gallery_resource_group: rg-worker_images-public-westeurope
Expand Down
16 changes: 11 additions & 5 deletions azure.pkr.hcl
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,12 @@ variable "client_id" {
default = ""
}

variable "client_secret" {
variable "oidc_request_url" {
type = string
default = ""
}

variable "oidc_request_token" {
type = string
default = ""
}
Expand Down Expand Up @@ -97,10 +102,11 @@ variable "packer_work_group" {
}

source "azure-arm" "spacelift" {
client_id = var.client_id
client_secret = var.client_secret
subscription_id = var.subscription_id
tenant_id = var.tenant_id
client_id = var.client_id
subscription_id = var.subscription_id
tenant_id = var.tenant_id
oidc_request_url = var.oidc_request_url
oidc_request_token = var.oidc_request_token

managed_image_name = var.image_name
managed_image_resource_group_name = var.image_resource_group
Expand Down

0 comments on commit 655e060

Please sign in to comment.