55 branches : [ main, develop ]
66 pull_request :
77 branches : [ main ]
8+ # Deployment solo cuando el usuario lo solicite manualmente
9+ workflow_dispatch :
10+ inputs :
11+ deploy_to_aws :
12+ description : ' ¿Desplegar a AWS?'
13+ required : true
14+ default : ' false'
15+ type : choice
16+ options :
17+ - ' true'
18+ - ' false'
19+ environment :
20+ description : ' Entorno de deployment'
21+ required : true
22+ default : ' staging'
23+ type : choice
24+ options :
25+ - ' staging'
26+ - ' production'
27+
28+ # Permisos necesarios para AWS OIDC
29+ permissions :
30+ id-token : write # Para AWS OIDC authentication
31+ contents : read # Para hacer checkout del código
832
933env :
1034 AWS_REGION : eu-west-1
1135 ECR_REPOSITORY : neurobank-fastapi
36+ AWS_ACCOUNT_ID : 120242956739
37+ AWS_ROLE_ARN : arn:aws:iam::120242956739:role/GitHubActionsOIDCRole
1238
1339jobs :
1440 test :
@@ -83,44 +109,54 @@ jobs:
83109 - name : Check deployment readiness
84110 run : |
85111 echo "🔍 Checking deployment readiness..."
86- if [ -z "${{ secrets.AWS_ACCESS_KEY_ID }}" ] || [ -z "${{ secrets.AWS_SECRET_ACCESS_KEY }}" ]; then
112+ if [ -z "${{ secrets.AWS_ACCOUNT_ID }}" ]; then
87113 echo ""
88- echo "⚠️ AWS CREDENTIALS NOT CONFIGURED"
114+ echo "⚠️ AWS OIDC NOT CONFIGURED"
89115 echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
90116 echo "To enable automatic deployment, please configure:"
91117 echo ""
92118 echo "1. Go to: https://github.com/${{ github.repository }}/settings/secrets/actions"
93- echo "2. Add these Repository Secrets:"
94- echo " • AWS_ACCESS_KEY_ID"
95- echo " • AWS_SECRET_ACCESS_KEY"
96- echo " • API_KEY (for your application)"
119+ echo "2. Add this Repository Secret:"
120+ echo " • AWS_ACCOUNT_ID (your 12-digit AWS account number)"
121+ echo " • API_KEY (for your application - optional)"
122+ echo ""
123+ echo "3. Ensure AWS OIDC role exists:"
124+ echo " • Role name: GitHubActionsOIDCRole"
125+ echo " • Trust policy allows: ${{ github.repository }}"
97126 echo ""
98- echo "3 . Also create an ECR repository named: ${{ env.ECR_REPOSITORY }}"
127+ echo "4 . Also create an ECR repository named: ${{ env.ECR_REPOSITORY }}"
99128 echo ""
100129 echo "✅ Tests and Security scans completed successfully!"
101- echo "🚀 Deployment will run automatically once credentials are configured"
130+ echo "🚀 Deployment will run automatically once OIDC is configured"
102131 echo ""
103132 else
104- echo "✅ AWS credentials are configured - deployment will proceed"
133+ echo "✅ AWS OIDC is configured - deployment will proceed"
105134 echo "🚀 Ready for production deployment to AWS Lambda!"
106135 echo "📍 Region: ${{ env.AWS_REGION }}"
107136 echo "📦 ECR Repository: ${{ env.ECR_REPOSITORY }}"
137+ echo "🔐 AWS Role: ${{ env.AWS_ROLE_ARN }}"
138+ echo "🏗️ Using secure OIDC authentication (no long-term keys) ✨"
108139 fi
109140
110141 build-and-deploy :
111142 needs : [test, security]
112143 runs-on : ubuntu-latest
113- if : github.ref == 'refs/heads/main'
144+ # Solo deployar cuando el usuario lo active manualmente con workflow_dispatch
145+ if : |
146+ (github.event_name == 'workflow_dispatch' &&
147+ github.event.inputs.deploy_to_aws == 'true' &&
148+ github.ref == 'refs/heads/main')
114149
115150 steps :
116151 - name : Checkout
117152 uses : actions/checkout@v4
118153
119- - name : Verify deployment prerequisites
154+ - name : Verify OIDC prerequisites
120155 run : |
121- echo "🚀 Starting deployment process..."
156+ echo "🚀 Starting OIDC-secured deployment process..."
122157 echo "📍 AWS Region: ${{ env.AWS_REGION }}"
123158 echo "📦 ECR Repository: ${{ env.ECR_REPOSITORY }}"
159+ develop
124160 echo "🔑 Checking AWS Credentials..."
125161
126162 # Verify secrets are available (without exposing them)
@@ -136,25 +172,47 @@ jobs:
136172 exit 1
137173 else
138174 echo "✅ AWS_SECRET_ACCESS_KEY is available"
175+
176+ echo "� AWS Role ARN: ${{ env.AWS_ROLE_ARN }}"
177+ echo "🏗️ Using secure OIDC authentication ✨"
178+
179+ # Verify AWS Account ID is available
180+ if [ -z "${{ secrets.AWS_ACCOUNT_ID }}" ]; then
181+ echo "❌ AWS_ACCOUNT_ID secret is missing"
182+ echo "💡 Add it in: https://github.com/${{ github.repository }}/settings/secrets/actions"
183+ exit 1
184+ else
185+ echo "✅ AWS_ACCOUNT_ID is configured"
186+ main
139187 fi
140188
141189 if [ -z "${{ secrets.API_KEY }}" ]; then
142190 echo "⚠️ API_KEY is missing - using default"
143191 else
192+ develop
144193 echo "✅ API_KEY is available"
194+
195+ echo "✅ API_KEY is configured"
196+ main
145197 fi
146198
147199 - name : Set up Python
148200 uses : actions/setup-python@v5
149201 with :
150202 python-version : ' 3.11'
151203
152- - name : Configure AWS credentials
204+ - name : Configure AWS credentials via OIDC
153205 uses : aws-actions/configure-aws-credentials@v4
154206 with :
155- aws-access-key-id : ${{ secrets.AWS_ACCESS_KEY_ID }}
156- aws-secret-access-key : ${{ secrets.AWS_SECRET_ACCESS_KEY }}
207+ role-to-assume : ${{ env.AWS_ROLE_ARN }}
157208 aws-region : ${{ env.AWS_REGION }}
209+ role-session-name : GitHubActions-${{ github.run_id }}
210+
211+ - name : Debug AWS identity
212+ run : |
213+ echo "🧪 Testing AWS OIDC connection..."
214+ aws sts get-caller-identity
215+ echo "✅ AWS OIDC connection successful!"
158216
159217 - name : Test AWS connection
160218 run : |
@@ -201,3 +259,9 @@ jobs:
201259 --region ${{ env.AWS_REGION }} \
202260 --parameter-overrides ApiKey=${{ secrets.API_KEY || 'default-api-key' }}
203261 echo "🎉 Deployment completed successfully!"
262+ develop
263+
264+ echo "📋 Stack: neurobank-api"
265+ echo "📍 Region: ${{ env.AWS_REGION }}"
266+ echo "🔗 Check AWS Lambda console for endpoint URL"
267+ main
0 commit comments