Skip to content

Commit 929f9d9

Browse files
authored
Merge pull request #584 from NHSDigital/feature/thju1-NRL-661-githubOIDCProviders
NRL-661 Add AWS account role chaining and config in GitHub environments
2 parents 290f39f + 6bc914d commit 929f9d9

File tree

18 files changed

+81
-234
lines changed

18 files changed

+81
-234
lines changed

.github/workflows/persistent-environment.yml

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ jobs:
6565
terraform-plan:
6666
name: Terraform Plan - ${{ inputs.environment }}
6767
needs: [build]
68+
environment: ${{ inputs.environment }}
6869
runs-on: [self-hosted, ci]
6970

7071
steps:
@@ -84,23 +85,17 @@ jobs:
8485
- name: Install asdf
8586
uses: asdf-vm/actions/install@v3.0.2
8687

87-
- name: Configure AWS Credentials
88+
- name: Configure Management Credentials
8889
uses: aws-actions/configure-aws-credentials@v4
8990
with:
9091
aws-region: eu-west-2
91-
role-to-assume: ${{ secrets.CI_ROLE_NAME }}
92-
role-session-name: github-actions-ci-${{ inputs.environment }}-${{ github.run_id}}
92+
role-to-assume: ${{ secrets.MGMT_ROLE_ARN }}
93+
role-session-name: github-actions-ci-${{ inputs.environment }}-${{ github.run_id }}
9394

94-
- name: Get AWS Account ID
95-
id: get_account_id
95+
- name: Retrieve Server Certificates
9696
run: |
9797
account=$(echo '${{ inputs.environment }}' | cut -d '-' -f1)
98-
99-
echo "account=${account}" >> "$GITHUB_OUTPUT"
100-
echo "aws_account_id=$(aws secretsmanager get-secret-value --secret-id nhsd-nrlf--mgmt--${account}-account-id --query SecretString --output text)" >> "$GITHUB_OUTPUT"
101-
102-
- name: Retrieve Server Certificates
103-
run: aws s3 cp s3://nhsd-nrlf--truststore/server/${{ steps.get_account_id.outputs.account }}.pem truststore/server/${{ steps.get_account_id.outputs.account }}.pem
98+
make truststore-pull-server ENV=${account}
10499
105100
- name: Download build artifacts
106101
uses: actions/download-artifact@v4
@@ -117,9 +112,8 @@ jobs:
117112
- name: Terraform Plan
118113
run: |
119114
terraform -chdir=terraform/infrastructure plan \
120-
--var-file=etc/dev.tfvars \
121-
--var assume_account=${{ steps.get_account_id.outputs.aws_account_id }} \
122-
--var assume_role=terraform \
115+
--var-file=etc/${{ vars.ACCOUNT_NAME }}.tfvars \
116+
--var assume_role_arn=${{ secrets.DEPLOY_ROLE_ARN }} \
123117
-out tfplan
124118
125119
- name: Save Terraform Plan
@@ -157,26 +151,20 @@ jobs:
157151
name: build-artifacts
158152
path: dist
159153

160-
- name: Configure AWS Credentials
154+
- name: Configure Management Credentials
161155
uses: aws-actions/configure-aws-credentials@v4
162156
with:
163157
aws-region: eu-west-2
164-
role-to-assume: ${{ secrets.CI_ROLE_NAME }}
158+
role-to-assume: ${{ secrets.MGMT_ROLE_ARN }}
165159
role-session-name: github-actions-ci-${{ inputs.environment }}-${{ github.run_id}}
166160

167161
- name: Download Terraform Plan artifact
168162
run: aws s3 cp s3://nhsd-nrlf--mgmt--github-ci-logging/${{ inputs.environment }}/${{ github.run_id }}/tfplan terraform/infrastructure/tfplan
169163

170-
- name: Get AWS Account ID
171-
id: get_account_id
164+
- name: Retrieve Server Certificates
172165
run: |
173166
account=$(echo '${{ inputs.environment }}' | cut -d '-' -f1)
174-
175-
echo "account=${account}" >> "$GITHUB_OUTPUT"
176-
echo "aws_account_id=$(aws secretsmanager get-secret-value --secret-id nhsd-nrlf--mgmt--${account}-account-id --query SecretString --output text)" >> "$GITHUB_OUTPUT"
177-
178-
- name: Retrieve Server Certificates
179-
run: aws s3 cp s3://nhsd-nrlf--truststore/server/${{ steps.get_account_id.outputs.account }}.pem truststore/server/${{ steps.get_account_id.outputs.account }}.pem
167+
make truststore-pull-server ENV=${account}
180168
181169
- name: Terraform Init
182170
run: |

.github/workflows/pr-env-deploy.yml

Lines changed: 24 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ jobs:
9999
deploy:
100100
name: Deploy PR Environment
101101
runs-on: [self-hosted, ci]
102+
environment: pull-request
102103
needs: [set-environment-id, build]
103104

104105
steps:
@@ -124,19 +125,15 @@ jobs:
124125
name: build-artifacts
125126
path: dist
126127

127-
- name: Configure AWS Credentials
128+
- name: Configure Management Credentials
128129
uses: aws-actions/configure-aws-credentials@v4
129130
with:
130131
aws-region: eu-west-2
131-
role-to-assume: ${{ secrets.CI_ROLE_NAME }}
132+
role-to-assume: ${{ secrets.MGMT_ROLE_ARN }}
132133
role-session-name: github-actions-ci-${{ needs.set-environment-id.outputs.environment_id }}
133134

134135
- name: Retrieve Server Certificates
135-
run: aws s3 cp s3://nhsd-nrlf--truststore/server/dev.pem truststore/server/dev.pem
136-
137-
- name: Get AWS Account ID
138-
id: get_account_id
139-
run: echo "aws_account_id=$(aws secretsmanager get-secret-value --secret-id nhsd-nrlf--mgmt--dev-account-id --query SecretString --output text)" >> "$GITHUB_OUTPUT"
136+
run: make truststore-pull-server ENV=dev
140137

141138
- name: Terraform Init
142139
run: |
@@ -145,17 +142,11 @@ jobs:
145142
terraform -chdir=terraform/infrastructure workspace select ${{ needs.set-environment-id.outputs.environment_id }}
146143
147144
- name: Terraform Plan
148-
run: |
149-
terraform -chdir=terraform/infrastructure plan \
150-
--var-file=etc/dev.tfvars \
151-
--var assume_account=${{ steps.get_account_id.outputs.aws_account_id }} \
152-
--var assume_role=terraform \
153-
-out tfplan
145+
run: terraform -chdir=terraform/infrastructure plan --var-file=etc/dev.tfvars --var assume_role_arn=${{ secrets.DEPLOY_ROLE_ARN }} -out tfplan
154146

155147
- name: Terraform Apply
156148
id: terraform-apply
157-
run: |
158-
terraform -chdir=terraform/infrastructure apply tfplan
149+
run: terraform -chdir=terraform/infrastructure apply tfplan
159150

160151
- name: Add Success Pull Request Comment
161152
uses: actions/github-script@v7
@@ -184,6 +175,7 @@ jobs:
184175
integration-test:
185176
name: Run Integration Tests
186177
needs: [set-environment-id, deploy]
178+
environment: pull-request
187179
runs-on: [self-hosted, ci]
188180

189181
steps:
@@ -206,40 +198,31 @@ jobs:
206198
- name: Python Dependency Install
207199
run: poetry install --no-root
208200

209-
- name: Configure AWS Credentials
201+
- name: Configure Management Credentials
210202
uses: aws-actions/configure-aws-credentials@v4
211203
with:
212204
aws-region: eu-west-2
213-
role-to-assume: ${{ secrets.CI_ROLE_NAME }}
205+
role-to-assume: ${{ secrets.MGMT_ROLE_ARN }}
214206
role-session-name: github-actions-ci-${{ needs.set-environment-id.outputs.environment_id }}
215207

216208
- name: Retrieve Client Certificates
217-
run: |
218-
aws s3 cp s3://nhsd-nrlf--truststore/client/dev.key truststore/client/dev.key
219-
aws s3 cp s3://nhsd-nrlf--truststore/client/dev.crt truststore/client/dev.crt
220-
221-
- name: Get AWS Account ID
222-
id: get_account_id
223-
run: echo "aws_account_id=$(aws secretsmanager get-secret-value --secret-id nhsd-nrlf--mgmt--dev-account-id --query SecretString --output text)" >> "$GITHUB_OUTPUT"
209+
run: make truststore-pull-client ENV=dev
224210

225211
- name: Configure Dev Account Credentials
226-
id: configure-dev-account-credentials
227-
run: |
228-
aws_credentials=$(aws sts assume-role --role-arn arn:aws:iam::${{ steps.get_account_id.outputs.aws_account_id }}:role/terraform --role-session-name github-actions-ci-${{ needs.set-environment-id.outputs.environment_id }} --output json)
229-
echo "aws_access_key_id=$(echo $aws_credentials | jq -r '.Credentials.AccessKeyId')" >> "$GITHUB_OUTPUT"
230-
echo "aws_secret_access_key=$(echo $aws_credentials | jq -r '.Credentials.SecretAccessKey')" >> "$GITHUB_OUTPUT"
231-
echo "aws_session_token=$(echo $aws_credentials | jq -r '.Credentials.SessionToken')" >> "$GITHUB_OUTPUT"
212+
uses: aws-actions/configure-aws-credentials@v4
213+
with:
214+
aws-region: eu-west-2
215+
role-chaining: true
216+
role-to-assume: ${{ secrets.DEPLOY_ROLE_ARN }}
217+
role-session-name: github-actions-ci-${{ needs.set-environment-id.outputs.environment_id }}
232218

233219
- name: Run Integration Tests
234220
run: make test-features-integration TF_WORKSPACE=${{ needs.set-environment-id.outputs.environment_id }}
235-
env:
236-
AWS_ACCESS_KEY_ID: ${{ steps.configure-dev-account-credentials.outputs.aws_access_key_id }}
237-
AWS_SECRET_ACCESS_KEY: ${{ steps.configure-dev-account-credentials.outputs.aws_secret_access_key }}
238-
AWS_SESSION_TOKEN: ${{ steps.configure-dev-account-credentials.outputs.aws_session_token }}
239221

240222
performance-test:
241223
name: Run Performance Tests
242224
needs: [set-environment-id, integration-test]
225+
environment: pull-request
243226
runs-on: [self-hosted, ci]
244227

245228
steps:
@@ -268,30 +251,22 @@ jobs:
268251
uses: aws-actions/configure-aws-credentials@v4
269252
with:
270253
aws-region: eu-west-2
271-
role-to-assume: ${{ secrets.CI_ROLE_NAME }}
254+
role-to-assume: ${{ secrets.MGMT_ROLE_ARN }}
272255
role-session-name: github-actions-ci-${{ needs.set-environment-id.outputs.environment_id }}
273256

274257
- name: Pull Client Certificates
275258
run: make truststore-pull-client ENV=dev
276259

277-
- name: Get AWS Account ID
278-
id: get_account_id
279-
run: echo "aws_account_id=$(aws secretsmanager get-secret-value --secret-id nhsd-nrlf--mgmt--dev-account-id --query SecretString --output text)" >> "$GITHUB_OUTPUT"
280-
281260
- name: Configure Dev Account Credentials
282-
id: configure-dev-account-credentials
283-
run: |
284-
aws_credentials=$(aws sts assume-role --role-arn arn:aws:iam::${{ steps.get_account_id.outputs.aws_account_id }}:role/terraform --role-session-name github-actions-ci-${{ needs.set-environment-id.outputs.environment_id }} --output json)
285-
echo "aws_access_key_id=$(echo $aws_credentials | jq -r '.Credentials.AccessKeyId')" >> "$GITHUB_OUTPUT"
286-
echo "aws_secret_access_key=$(echo $aws_credentials | jq -r '.Credentials.SecretAccessKey')" >> "$GITHUB_OUTPUT"
287-
echo "aws_session_token=$(echo $aws_credentials | jq -r '.Credentials.SessionToken')" >> "$GITHUB_OUTPUT"
261+
uses: aws-actions/configure-aws-credentials@v4
262+
with:
263+
aws-region: eu-west-2
264+
role-chaining: true
265+
role-to-assume: ${{ secrets.DEPLOY_ROLE_ARN }}
266+
role-session-name: github-actions-ci-${{ needs.set-environment-id.outputs.environment_id }}
288267

289268
- name: Setup Environment Test Data
290269
run: make test-performance-prepare TF_WORKSPACE=${{ needs.set-environment-id.outputs.environment_id }}
291-
env:
292-
AWS_ACCESS_KEY_ID: ${{ steps.configure-dev-account-credentials.outputs.aws_access_key_id }}
293-
AWS_SECRET_ACCESS_KEY: ${{ steps.configure-dev-account-credentials.outputs.aws_secret_access_key }}
294-
AWS_SESSION_TOKEN: ${{ steps.configure-dev-account-credentials.outputs.aws_session_token }}
295270

296271
- name: Run Performance Test - Baseline
297272
run: make test-performance-baseline HOST=${{ needs.set-environment-id.outputs.environment_id }}.api.record-locator.dev.national.nhs.uk ENV_TYPE=dev
@@ -310,7 +285,3 @@ jobs:
310285

311286
- name: Cleanup Environment Test Data
312287
run: make test-performance-cleanup TF_WORKSPACE=${{ needs.set-environment-id.outputs.environment_id }}
313-
env:
314-
AWS_ACCESS_KEY_ID: ${{ steps.configure-dev-account-credentials.outputs.aws_access_key_id }}
315-
AWS_SECRET_ACCESS_KEY: ${{ steps.configure-dev-account-credentials.outputs.aws_secret_access_key }}
316-
AWS_SESSION_TOKEN: ${{ steps.configure-dev-account-credentials.outputs.aws_session_token }}

terraform/account-wide-infrastructure/dev/.terraform.lock.hcl

Lines changed: 0 additions & 26 deletions
This file was deleted.

terraform/account-wide-infrastructure/mgmt/.terraform.lock.hcl

Lines changed: 0 additions & 25 deletions
This file was deleted.

terraform/account-wide-infrastructure/mgmt/route53.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ resource "aws_route53_record" "int_zone" {
5555
"ns-1877.awsdns-42.co.uk.",
5656
"ns-279.awsdns-34.com.",
5757
"ns-789.awsdns-34.net.",
58-
"zns-1362.awsdns-42.org. "
58+
"ns-1362.awsdns-42.org."
5959
]
6060
ttl = 300
6161
type = "NS"

terraform/account-wide-infrastructure/mgmt/vars.tf

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
variable "assume_account" {
2-
sensitive = true
3-
}
4-
5-
variable "assume_role" {}
6-
71
variable "private_subnet_cidr_blocks" {
82
description = "Available CIDR blocks for private subnets"
93
type = list(string)

terraform/account-wide-infrastructure/prod/.terraform.lock.hcl

Lines changed: 0 additions & 25 deletions
This file was deleted.

terraform/account-wide-infrastructure/test/.terraform.lock.hcl

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)