Skip to content

Grant GitHub Actions AWS IAM Permissions to Provision Marketing Site Stacks#65584

Merged
sureshc merged 78 commits into
stagingfrom
CMS-572/iam
Jun 26, 2025
Merged

Grant GitHub Actions AWS IAM Permissions to Provision Marketing Site Stacks#65584
sureshc merged 78 commits into
stagingfrom
CMS-572/iam

Conversation

@sureshc

@sureshc sureshc commented Apr 30, 2025

Copy link
Copy Markdown
Contributor

https://codedotorg.atlassian.net/browse/CMS-572
https://codedotorg.atlassian.net/browse/INF-1652

Testing story

code-dot-org $ export AWS_PROFILE=codeorg-admin
code-dot-org $ bin/aws_access
code-dot-org $ bundle exec rake stack:iam:validate RAILS_ENV=production VERBOSE=yup_of_course

Pending update for stack `IAM`:
Add CloudFormationServiceMarketingSitesDevelopmentRole [AWS::IAM::Role]
Add CloudFormationServiceMarketingSitesProductionRole [AWS::IAM::Role]
Add CloudFormationServiceMarketingSitesTestRole [AWS::IAM::Role]
Add GitHubActionsDevelopmentRole [AWS::IAM::Role]
Add GitHubActionsProductionRole [AWS::IAM::Role]
Add GitHubActionsTestRole [AWS::IAM::Role]
Add GitHubOpenIDConnectProvider [AWS::IAM::OIDCProvider]
Add MarketingSitesRoleCreationBoundaryDevelopmentPolicy [AWS::IAM::ManagedPolicy]
Add MarketingSitesRoleCreationBoundaryProductionPolicy [AWS::IAM::ManagedPolicy]
Add MarketingSitesRoleCreationBoundaryTestPolicy [AWS::IAM::ManagedPolicy]
Finished stack:iam:validate (less than a minute)

Deployment strategy

code-dot-org $ export AWS_PROFILE=codeorg-admin
code-dot-org $ bin/aws_access
code-dot-org $ bundle exec rake stack:iam:start RAILS_ENV=production ADMIN=yes

Follow-up work

Updating the Stack that provisions marketing sites to namespace or tag all Resources with marketing-sites to identify the type of application (Stack) and the environment type (development, test, production) so that GitHub Actions has permissions (depending on the GitHub Environment) to provision specific Resources.

Privacy

Security

Caching

PR Checklist:

  • Tests provide adequate coverage
  • Privacy and Security impacts have been assessed
  • Code is well-commented
  • New features are translatable or updates will not break translations
  • Relevant documentation has been added or updated
  • User impact is well-understood and desirable
  • Pull Request is labeled appropriately
  • Follow-up work items (including potential tech debt) are tracked and linked

@cat5inthecradle cat5inthecradle left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM with some naming nitpicks.

If we get the ARN's wrong in this policy, this template will still deploy correctly, as they aren't validated. When we go to deploy the marketing stack, we will get an error if we're missing permisions, and we'll have to come back here to fix it.

There aren't really any good solutions that don't get us into weird chicken/egg bootstrapping. Just acknowledging that we may have to come back and tweak this policy when we go to use these permissions for the first time.

Comment thread aws/cloudformation/iam.yml.erb Outdated
Comment thread aws/cloudformation/iam.yml.erb Outdated
Comment thread aws/cloudformation/iam.yml.erb Outdated
Comment thread aws/cloudformation/iam.yml.erb Outdated

@unlox775-code-dot-org unlox775-code-dot-org left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have serious concerns about storing access tokens for any user with this much access (full CloudFormation blank check) in AWS Secrets manager. All it takes is for any new policy to mention secrets with an insecure pattern and they have a very large access profile by stealing these creds.

@cat5inthecradle

Copy link
Copy Markdown
Contributor

I have serious concerns about storing access tokens for any user with this much access (full CloudFormation blank check) in AWS Secrets manager. All it takes is for any new policy to mention secrets with an insecure pattern and they have a very large access profile by stealing these creds.

This PR creates a user with tightly scoped Cloudformation permissions. For example, CreateStack is limited to Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/marketing-sites-<%=environment_type%>-*"

And to clarify - these credentials would not be stored in AWS Secrets Manager, they would be stored in GitHub for use by the continuous deployment Github Actions workflows. That doesn't eliminate risk, but I want to make sure we're all on the same page here as we evaluate risk.

@sureshc

sureshc commented May 1, 2025

Copy link
Copy Markdown
Contributor Author

I have serious concerns about storing access tokens for any user with this much access (full CloudFormation blank check) in AWS Secrets manager. All it takes is for any new policy to mention secrets with an insecure pattern and they have a very large access profile by stealing these creds.

This PR creates a user with tightly scoped Cloudformation permissions. For example, CreateStack is limited to Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/marketing-sites-<%=environment_type%>-*"

And to clarify - these credentials would not be stored in AWS Secrets Manager

The original proposal was to generate an API key, store it and its secret in an AWS Secret, and then an engineer would manually copy those values over to a GitHub Environment secret (marketing-sites-test —> AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY).

I agree that there’s a risk with creating the API Key and placing it in an AWS Secret, so I’m removing that from this template. An Infrastructure engineer would need to manually create the API Key and copy it to the GitHub Environment secret. All other Engineers do not have permission to create the API key.

@sureshc sureshc marked this pull request as ready for review May 1, 2025 18:25
@sureshc sureshc requested a review from a team as a code owner May 1, 2025 18:25
@unlox775-code-dot-org

unlox775-code-dot-org commented May 1, 2025

Copy link
Copy Markdown
Contributor

@cat5inthecradle

This PR creates a user with tightly scoped Cloudformation permissions. For example, CreateStack is limited to Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/marketing-sites-<%=environment_type%>-*"

Doesn't that just constrain the name of the stack? The DevPermissions is a little more restrictive. What would prevent me from adding to the cloudformation template things like:

  • Use any existing IAM Role, and a new code runner (EC2 or Lambda) to run and connect/exfiltrate/delete data from any database/S3 bucket (this or this look nice, and let me do anything)
  • Set up bitcoin mining
  • using priv escalation above from an EC2 (which include PassRole *), I can assume Administrator access

I think if we made a much more restrictive Permission Bounday (I am working on it as part of INF-1618), then we could find a way that granting CloudFormation access isn't extremely high risk. But permission boundaries that encompass such a wide range of activities that our stack uses, is by nature VERY complex, and complexity is the enemy of security. Which is why I lean in general against CF access

@sureshc

sureshc commented May 2, 2025

Copy link
Copy Markdown
Contributor Author

@cat5inthecradle

This PR creates a user with tightly scoped Cloudformation permissions. For example, CreateStack is limited to Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/marketing-sites-<%=environment_type%>-*"

Doesn't that just constrain the name of the stack? The DevPermissions is a little more restrictive. What would prevent me from adding to the cloudformation template things like:

  • Use any existing IAM Role, and a new code runner (EC2 or Lambda) to run and connect/exfiltrate/delete data from any database/S3 bucket (this or this look nice, and let me do anything)
  • Set up bitcoin mining
  • using priv escalation above from an EC2 (which include PassRole *), I can assume Administrator access

I think if we made a much more restrictive Permission Bounday (I am working on it as part of INF-1618), then we could find a way that granting CloudFormation access isn't extremely high risk. But permission boundaries that encompass such a wide range of activities that our stack uses, is by nature VERY complex, and complexity is the enemy of security. Which is why I lean in general against CF access

These are the only Actions (and Resources) that the GitHub Deployer User will be able to execute:

Statement:
- Effect: Allow
Action:
- cloudformation:CreateStack
- cloudformation:DescribeStacks
- cloudformation:CreateChangeSet
- cloudformation:DescribeChangeSet
- cloudformation:DeleteChangeSet
- cloudformation:ExecuteChangeSet
# The Stack Name must match this naming prefix convention. Examples:
# marketing-sites-production-code-org
# marketing-sites-production-hourofcode-com
# marketing-sites-test-teachai-org
# marketing-sites-test-code-org
# marketing-sites-development-code-org-my-feature-branch
# marketing-sites-development-code-org-my-other-branch
Resource: !Sub "arn:aws:cloudformation:${AWS::Region}:${AWS::AccountId}:stack/marketing-sites-<%=environment_type%>-*"
# Deployment User can Get and Pass any Fargate Task and Task Execution Roles for the current environment type.
- Effect: Allow
Action:
- iam:GetRole
- iam:PassRole
Resource: marketing-sites-<%=environment_type%>-*"
- Effect: Allow
Action:
- ecs:RegisterTaskDefinition
Resource: !Sub "arn:aws:ecs:${AWS::Region}:${AWS::AccountId}:task-definition/marketing-sites-<%=environment_type%>-*:*"
- Effect: Allow
Action:
- ecs:DeregisterTaskDefinition
- ecs:DescribeTaskDefinition
- elasticloadbalancing:DescribeLoadBalancers
- ec2:DescribeSecurityGroups
Resource: '*'
- Effect: Allow
Action:
- ecs:DescribeServices
- ecs:UpdateService
Resource: !Sub "arn:aws:ecs:${AWS::Region}:${AWS::AccountId}:service/marketing-sites-<%=environment_type%>-*/marketing-sites-<%=environment_type%>-*"
- Effect: Allow
Action:
- s3:PutObject
- s3:ListBucket
Resource:
# For the marketing site `my-feature-branch-code.marketing-sites.dev-code.org` the NextJS assets Bucket
# will be named `org.dev-code.marketing-sites.my-feature-branch.static-assets` so the `development`
# Deployer should have permission to all Buckets with the naming pattern `org.dev-code*static-assets`
- "<%=configuration[:base_domain_name].split('.').tap(&:reverse!).join('.')%>*static-assets"
- "<%=configuration[:base_domain_name].split('.').tap(&:reverse!).join('.')%>*static-assets/*"

Changes to this IAM Stack can only be deployed by an Infrastructure Engineer.

Comment thread aws/cloudformation/iam.yml.erb Outdated
Action:
- iam:GetRole
- iam:PassRole
Resource: marketing-sites-<%=environment_type%>-*"

@unlox775-code-dot-org unlox775-code-dot-org May 5, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sureshc

Where is this role defined: marketing-sites-<%=environment_type%>-*"? I don't see it in The CloudFormation template here. Create Stack operation (which uses iam:PassRole) executes as this role, and not the permissions of the current user. I.e. a user bob-tiny with no access but CloudFormation CreateStack (with resource of * role or just Administrator), would allow them to run the stack create with Adminstrator (full access), regardless of bob-tiny's access restrictions.

@cat5inthecradle cat5inthecradle May 5, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm guessing this is for passing the ECS Task Execution role (docs). In which case, we should still make this much more specific with conditions.

Looks like neither the Task Execution Role nor the Task Role are named, so these magic strings may not yet be correct.

- Effect: Allow
  Action: iam:PassRole
  Resource:
    - arn:aws:iam::123456789012:role/ecsTaskExecutionRole
    - arn:aws:iam::123456789012:role/yourTaskRole
  Condition:
    StringEqualsIfExists:
      iam:PassedToService: ecs-tasks.amazonaws.com

Comment thread aws/cloudformation/iam.yml.erb Outdated
# Deployer should have permission to all Buckets with the naming pattern `org.dev-code*static-assets`
- "<%=configuration[:base_domain_name].split('.').tap(&:reverse!).join('.')%>*static-assets"
- "<%=configuration[:base_domain_name].split('.').tap(&:reverse!).join('.')%>*static-assets/*"
<% end %>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To note some more permissions to add for Cloudfront invalidation and autoscaling features:

  - Effect: Allow
    Action:
      - 'iam:GetRole'
    Resource:  !GetAtt ECSAutoScalingRole.Arn
  - Effect: Allow
    Action:
      - "cloudfront:CreateInvalidation"
    Resource: !Sub 'arn:aws:cloudfront::${AWS::AccountId}:distribution/${CloudFrontDistribution}'

# permissions needed to create/update/delete a marketing sites CloudFormation Stack.
# ------------------------------------------------------------
<%
marketing_sites_environment_type_configuration = {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Further down the PR, I see you differentiate sites/clusters by indicating that the environment_type is the suffix of the name which flattens the structure

One suggestion is to go with a multi-dimensional configuration with "site" (or "cluster") being one of the dimensions. Although I think your flattened config might make more sense to start with and is less restrictive.

marketing_sites_environment_type_configuration = {
   "hoc": { // This one would not be here for this PR, but eventually added
     dev: {}, test: {}, prod: {}
    },
    "cdo": {
      dev: {}, test: {}, prod: {}
    }
}

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup. This initial approach proposes one Role per environment type (development, test, production), and there's a risk that a a GitHub Action that builds the test corporate site would maliciously or accidentally modify/delete/create resources for the test Hour of Code site. For now, I think the simplicity of provisioning 3 Roles outweighs having 9 or more Roles for the matrix of environment type and the type of marketing website.

Comment thread aws/cloudformation/iam.yml.erb Outdated
Comment thread aws/cloudformation/iam.yml.erb Outdated
# The Stack Name must match this naming prefix convention. Examples:
# marketing-sites-production-code-org
# marketing-sites-production-hourofcode-com
# marketing-sites-test-teachai-org

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not related to your PR, but I think a "low traffic" multi-tenant stack may more sense than having one for each site from a cost perspective. Especially since HA enables handling peak Code.org levels of traffic by default.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With our current 1 vCPU per Availability Zone X 3 Zones per Stack, I think our costs will be relatively low and we won't need to modify the design to support a single Stack that operates multiple websites. Definitely open to considering that as we monitor costs of the first website.

Comment thread aws/cloudformation/iam.yml.erb Outdated
@sureshc sureshc changed the title Create AWS IAM Users for GitHub Actions to Deploy Marketing Sites Enable GutHub Actions to Provision Marketing Site Stacks May 9, 2025
Comment on lines +925 to +932
- Sid: AllowCloudfrontInvalidation
Effect: Allow
Action:
- cloudfront:CreateInvalidation
Resource: '*'
Condition:
StringEquals:
aws:ResourceTag/environment-type: <%=environment_type%>

@cat5inthecradle cat5inthecradle May 9, 2025

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cloudfront:CreateInvalidation can be scoped down to specific distributions via Resource. Looks like you're using tagging instead? I'm curious why.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Distribution ARN doesn't have any human readable identifiers. Just that randomly generated Distribution ID.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ah, makes sense. I wonder if we should go even farther with standardized tagging?

Comment thread aws/cloudformation/iam.yml.erb Outdated
@sureshc sureshc changed the title Enable GutHub Actions to Provision Marketing Site Stacks Grant GittHub Actions AWS IAM Permissions to Provision Marketing Site Stacks May 9, 2025
@sureshc sureshc changed the title Grant GittHub Actions AWS IAM Permissions to Provision Marketing Site Stacks Grant GitHub Actions AWS IAM Permissions to Provision Marketing Site Stacks May 12, 2025
@sureshc

sureshc commented Jun 2, 2025

Copy link
Copy Markdown
Contributor Author

deployed latest commit:

Stack update requested, waiting for provisioning to complete...
.2025-06-02 17:53:29 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_IN_PROGRESS]
2025-06-02 17:53:29 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_IN_PROGRESS]
..2025-06-02 17:53:46 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
.2025-06-02 17:53:46 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
2025-06-02 17:53:49 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]

Stack update complete.

@sureshc

sureshc commented Jun 4, 2025

Copy link
Copy Markdown
Contributor Author

Deployed latest commit:

Stack update requested, waiting for provisioning to complete...
.2025-06-04 18:53:37 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_IN_PROGRESS]
2025-06-04 18:53:37 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_IN_PROGRESS]
..2025-06-04 18:53:54 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
2025-06-04 18:53:54 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
.2025-06-04 18:53:57 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]

Stack update complete.

Comment thread aws/cloudformation/iam.yml.erb Outdated
Comment on lines +996 to +997
# Add more statements here as we need the Roles provisioned within a marketing sites Stack to have more permissions.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are there still any remaining statements to be added here? If we have a working stack, does that mean we have added all we need to? If not, could this comment be removed?

Suggested change
# Add more statements here as we need the Roles provisioned within a marketing sites Stack to have more permissions.

Comment thread aws/cloudformation/iam.yml.erb Outdated
Co-authored-by: Dave2 Buchanan <146779710+unlox775-code-dot-org@users.noreply.github.com>
@sureshc

sureshc commented Jun 18, 2025

Copy link
Copy Markdown
Contributor Author

Deployed most recent commit:

Stack update requested, waiting for provisioning to complete...
.2025-06-18 20:01:17 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_IN_PROGRESS]
2025-06-18 20:01:17 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_IN_PROGRESS]
...2025-06-18 20:01:34 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
2025-06-18 20:01:34 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
2025-06-18 20:01:37 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]

Stack update complete.

@cat5inthecradle cat5inthecradle self-requested a review June 20, 2025 18:49
@sureshc

sureshc commented Jun 24, 2025

Copy link
Copy Markdown
Contributor Author

reverted and deployed the revert of the tag-based restrictions as they don't work for Actions that Create Resources because when using Stack tag propagation, the tag doesn't exist yet on the Resource when CloudFormation tries to create it.

Stack update requested, waiting for provisioning to complete...
.2025-06-24 18:52:26 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_IN_PROGRESS]
2025-06-24 18:52:26 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_IN_PROGRESS]
...2025-06-24 18:52:43 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
2025-06-24 18:52:43 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
2025-06-24 18:52:46 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]
2025-06-24 18:52:43 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
2025-06-24 18:52:43 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
2025-06-24 18:52:46 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]

Stack update complete.

@sureshc

sureshc commented Jun 24, 2025

Copy link
Copy Markdown
Contributor Author

Deployed latest commit:

Stack update requested, waiting for provisioning to complete...
.2025-06-24 21:24:16 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_IN_PROGRESS]
2025-06-24 21:24:16 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_IN_PROGRESS]
...2025-06-24 21:24:33 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
2025-06-24 21:24:33 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
2025-06-24 21:24:36 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]
2025-06-24 21:24:33 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
2025-06-24 21:24:33 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
2025-06-24 21:24:36 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]

Stack update complete.

@sureshc

sureshc commented Jun 24, 2025

Copy link
Copy Markdown
Contributor Author

Deployed latest commit:

Stack update requested, waiting for provisioning to complete...
.2025-06-24 22:52:53 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_IN_PROGRESS]
2025-06-24 22:52:53 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_IN_PROGRESS]
...2025-06-24 22:53:10 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
2025-06-24 22:53:10 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
.2025-06-24 22:53:13 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]

Stack update complete.

@sureshc

sureshc commented Jun 25, 2025

Copy link
Copy Markdown
Contributor Author

Deployed last 2 commits:

Stack update requested, waiting for provisioning to complete...
.2025-06-25 17:20:37 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_IN_PROGRESS]
2025-06-25 17:20:37 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_IN_PROGRESS]
...2025-06-25 17:20:54 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
2025-06-25 17:20:55 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
.2025-06-25 17:20:58 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]

@sureshc

sureshc commented Jun 25, 2025

Copy link
Copy Markdown
Contributor Author

Deployed latest commit:

Stack update requested, waiting for provisioning to complete...
.2025-06-25 17:52:10 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_IN_PROGRESS]
2025-06-25 17:52:10 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_IN_PROGRESS]
...2025-06-25 17:52:27 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
2025-06-25 17:52:27 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
.2025-06-25 17:52:31 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]

Stack update complete.

@sureshc

sureshc commented Jun 25, 2025

Copy link
Copy Markdown
Contributor Author

Deployed latest 2 commits:

Stack update requested, waiting for provisioning to complete...
.2025-06-25 22:30:52 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_IN_PROGRESS]
2025-06-25 22:30:53 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_IN_PROGRESS]
...2025-06-25 22:31:09 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
2025-06-25 22:31:10 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
2025-06-25 22:31:13 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]
2025-06-25 22:31:09 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
2025-06-25 22:31:10 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
2025-06-25 22:31:13 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]

Stack update complete.

@sureshc

sureshc commented Jun 25, 2025

Copy link
Copy Markdown
Contributor Author

Deployed latest commit:

Stack update requested, waiting for provisioning to complete...
.2025-06-25 23:15:23 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_IN_PROGRESS]
2025-06-25 23:15:23 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_IN_PROGRESS]
...2025-06-25 23:15:40 UTC- CloudFormationServiceMarketingSitesProductionRole [UPDATE_COMPLETE]
2025-06-25 23:15:40 UTC- CloudFormationServiceMarketingSitesTestRole [UPDATE_COMPLETE]
.2025-06-25 23:15:43 UTC- IAM [UPDATE_COMPLETE_CLEANUP_IN_PROGRESS]

Stack update complete.

@sureshc sureshc merged commit cb47b6a into staging Jun 26, 2025
5 of 6 checks passed
@sureshc sureshc deleted the CMS-572/iam branch June 26, 2025 05:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants