{"id":26267985,"url":"https://github.com/oslabs-beta/fennecr","last_synced_at":"2025-08-11T05:10:08.917Z","repository":{"id":239820417,"uuid":"798877377","full_name":"oslabs-beta/FennECR","owner":"oslabs-beta","description":"Image Security Tracking Simplified | FennECR centralizes and simplifies the security management of your AWS ECR container images, providing comprehensive insights and streamlined vulnerability tracking.","archived":false,"fork":false,"pushed_at":"2024-08-16T18:08:05.000Z","size":60841,"stargazers_count":25,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-30T19:42:06.262Z","etag":null,"topics":["container-image","containers","docker","ecr"],"latest_commit_sha":null,"homepage":"https://fennecr.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oslabs-beta.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"open-source-labs","custom":["https://donorbox.org/donations-to-oslabs-inc"]}},"created_at":"2024-05-10T16:57:22.000Z","updated_at":"2025-01-13T06:53:38.000Z","dependencies_parsed_at":"2024-05-18T21:25:14.859Z","dependency_job_id":"24d20aa2-5cb1-4895-8500-d0a07dc1d127","html_url":"https://github.com/oslabs-beta/FennECR","commit_stats":null,"previous_names":["oslabs-beta/insightecr","oslabs-beta/fennecr"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oslabs-beta/FennECR","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslabs-beta%2FFennECR","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslabs-beta%2FFennECR/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslabs-beta%2FFennECR/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslabs-beta%2FFennECR/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oslabs-beta","download_url":"https://codeload.github.com/oslabs-beta/FennECR/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oslabs-beta%2FFennECR/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269832883,"owners_count":24482330,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-11T02:00:10.019Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["container-image","containers","docker","ecr"],"created_at":"2025-03-14T04:19:00.074Z","updated_at":"2025-08-11T05:10:04.478Z","avatar_url":"https://github.com/oslabs-beta.png","language":"TypeScript","funding_links":["https://github.com/sponsors/open-source-labs","https://donorbox.org/donations-to-oslabs-inc"],"categories":[],"sub_categories":[],"readme":"# FennECR\n\n- [Summary](#summary)\n- [Key Features](#key-features-of-fennecr)\n- [Setup for docker image version](#docker-container)\n- [Setup for source version](#from-sources)\n- [Meet the team](#the-fennecr-team)\n\n## Summary\n\n![](https://github.com/oslabs-beta/FennECR/blob/main/client/insightecr/Public/FennecrBanner.png?raw=true)\n\nFennECR tracks and organizes vulnerability scans performed by AWS ECR, and provides a user-friendly interface to manage and respond to security findings effectively.\n\n## Key Features of FennECR\n\n#### a. Centralized Dashboard:\n\nA basic yet powerful dashboard that displays scan results in a unified view, as depicted in this demo.\n![](https://github.com/oslabs-beta/FennECR/blob/main/client/insightecr/Public/DashboardDemo.gif?raw=true)\nDetailed insights into the security status and vulnerability details of your container images, as shown in this demo.\n![](https://github.com/oslabs-beta/FennECR/blob/main/client/insightecr/Public/RepoAndImagDetailsDemo.gif?raw=true)\nEasily toggle scan-on-push settings for your repositories directly from our interface, enhancing your workflow as demonstrated in this demo.\n![](https://github.com/oslabs-beta/FennECR/blob/main/client/insightecr/Public/ScanOnPushDemo.gif?raw=true)\n\n#### b. Local Environment Variable Integration\n\nSecure Credential Management: Your credentials remain under your control. Security is our utmost priority, your local environment variables are managed with the highest level of security on your local environment.\n\n#### c. Multi-Access Key Support\n\nAre you managing multiple AWS accounts? FennECR seamlessly supports multi access keys, allowing you to track and manage vulnerabilities across various accounts with ease, as demonstrated in this demo.\n![](https://github.com/oslabs-beta/FennECR/blob/main/client/insightecr/Public/AccountSwitchingDemo.gif?raw=true)\n\n#### d. Historical scan results secured in DynamoDB\n\nNeed to review past scan results? FennECR securely stores historical data in DynamoDB, making accessing and analyzing previous scan outcomes easy.\n\n#### e. Dark Mode\n\nEnjoy the flexibility of dark mode, designed to reduce eye strain and provide a visually pleasing interface for users who prefer a darker theme, as illustrated in this demo.\n![](https://github.com/oslabs-beta/FennECR/blob/main/client/insightecr/Public/DarkModeDemo.gif?raw=true)\n\n## Setup\n\n### Docker Container\n\n1. Install [docker](https://www.docker.com/)\n2. Create a folder for the app `mkdir FennECR`\n3. Go to the folder you just created `cd FennECR`\n4. Create Docker compose file(run `touch docker-compose.yml` and paste in the below template or [download](https://github.com/oslabs-beta/FennECR/raw/main/docker-compose.yml) here and put in the same folder)\n\n- docker-compose.yml template\n\n```yml\nversion: '3.8'\n\nservices:\n  client:\n    image: fennecr/insightecr-client\n    ports:\n      - '80:80'\n    depends_on:\n      - server\n    env_file:\n      - .env\n    networks:\n      - insightecr-network\n\n  server:\n    image: fennecr/insightecr-server\n    ports:\n      - '3000:3000'\n    container_name: insightecr-server-1\n    depends_on:\n      - dynamodb\n    env_file:\n      - .env\n    networks:\n      - insightecr-network\n\n  dynamodb:\n    image: amazon/dynamodb-local\n    container_name: dynamodb\n    ports:\n      - '8000:8000'\n    volumes:\n      - dynamodbdata:/data\n    env_file:\n      - .env\n    networks:\n      - insightecr-network\n\nvolumes:\n  dynamodbdata:\n\nnetworks:\n  insightecr-network:\n    driver: bridge\n```\n\n5. Setup environment variables\n\n- \u0026nbsp; 5.1 Create a `.env` file \u003cstrong\u003e\u003cu\u003ein the same folder\u003c/u\u003e\u003c/strong\u003e using below template\n\n  ```sh\n  # AWS Credentials for Development Environment\n  AWS_REGION_DEV=\"your_aws_region\"\n  AWS_ACCESS_KEY_ID_DEV=\"your_iam_access_key_id\"\n  AWS_SECRET_ACCESS_KEY_DEV=\"your_iam_secret_access_key\"\n\n  # AWS Credentials for Production Environment(e.g., for other aws roles or accounts, you can replace DEV or PROD with other string)\n  AWS_REGION_PROD=\"your_aws_region\"\n  AWS_ACCESS_KEY_ID_PROD=\"your_iam_access_key_id\"\n  AWS_SECRET_ACCESS_KEY_PROD=\"your_iam_secret_access_key\"\n\n  # DynamoDB Configuration\n  DYNAMODB_TABLE_NAME=\"ImagesTable\"\n  SCAN_RESULT_TABLE=\"SingleScanResult\"\n  DYNAMODB_ACCESS_KEY_ID=\"local\"\n  DYNAMODB_SECRET_ACCESS_KEY=\"local\"\n\n  # Use \"http://localhost:8000\" when running on localhost\n  # Use \"http://dynamodb:8000\" when running the docker version\n  DYNAMODB_ENDPOINT=\"http://dynamodb:8000\"\n  ```\n\n- \u0026nbsp; 5.2 Replace \"your_aws_region\", \"your_iam_access_key_id\", \"your_iam_secret_access_key\" with your own credentials\n\n6. Run `docker-compose up`\n7. Browse to http://localhost\n\n### From Sources\n\n1. Install [Node.js](https://nodejs.org/en/download/package-manager)\n2. Run `git clone https://github.com/oslabs-beta/FennECR.git` (or clone [your own fork](https://github.com/oslabs-beta/FennECR/fork) of the repository)\n3. Go into the cloned folder with `cd FennECR`\n4. Run `npm install` to install dependencies in the root folder\n5. Run `cd server \u0026\u0026 npm install \u0026\u0026 cd ..` to install server side dependencies\n6. Run `cd client/insightecr \u0026\u0026 npm install \u0026\u0026 cd ../..` to install client side dependencies\n7. Setup DynamoDB local\n\n- \u0026nbsp; 7.1 Install [docker](https://www.docker.com/)\n- \u0026nbsp; 7.2 Pull the DynamoDB docker image from docker Hub ` docker pull amazon/dynamodb-local`\n- \u0026nbsp; 7.3 Run the image `docker run -p 8000:8000 amazon/dynamodb-local` and keep the terminal open\n\n8. Setup environment variables\n\n- \u0026nbsp; 8.1 Create a `.env` file \u003cstrong\u003e\u003cu\u003ein the root of server folder\u003c/u\u003e\u003c/strong\u003e using below template\n\n  ```sh\n  # AWS Credentials for Development Environment\n  AWS_REGION_DEV=\"your_aws_region\"\n  AWS_ACCESS_KEY_ID_DEV=\"your_iam_access_key_id\"\n  AWS_SECRET_ACCESS_KEY_DEV=\"your_iam_secret_access_key\"\n\n  # AWS Credentials for Production Environment(e.g., for other aws roles or accounts, you can replace DEV or PROD with other string)\n  AWS_REGION_PROD=\"your_aws_region\"\n  AWS_ACCESS_KEY_ID_PROD=\"your_iam_access_key_id\"\n  AWS_SECRET_ACCESS_KEY_PROD=\"your_iam_secret_access_key\"\n\n  # DynamoDB Configuration\n  DYNAMODB_TABLE_NAME=\"ImagesTable\"\n  SCAN_RESULT_TABLE=\"SingleScanResult\"\n  DYNAMODB_ACCESS_KEY_ID=\"local\"\n  DYNAMODB_SECRET_ACCESS_KEY=\"local\"\n\n  # Use \"http://localhost:8000\" when running on localhost\n  # Use \"http://dynamodb:8000\" when running the docker version\n  DYNAMODB_ENDPOINT=\"http://localhost:8000\"\n  ```\n\n- \u0026nbsp; 8.2 Replace \"your_aws_region\", \"your_iam_access_key_id\", \"your_iam_secret_access_key\" with your own credentials\n\n9. Run `npm start`\n10. Browse to http://localhost\n\n## The FennECR Team\n\n|     Developed By     |                                                                                                                                               |                                                                                                                                               |\n| :------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------: |\n|       Cyane Li       |   [![Github](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/CyaneL)   |      [![LinkedIn](https://img.shields.io/badge/LinkedIn-%230077B5.svg?logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/q-li/)      |\n|       Jing Xia       |   [![Github](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/jxia03)   |    [![LinkedIn](https://img.shields.io/badge/LinkedIn-%230077B5.svg?logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/jingxia03)    |\n| Ricardo De los Reyes |  [![Github](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/rickyd88)  |   [![LinkedIn](https://img.shields.io/badge/LinkedIn-%230077B5.svg?logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/ricardodlr)    |\n|    Richard Araujo    |   [![Github](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/rcad14)   | [![LinkedIn](https://img.shields.io/badge/LinkedIn-%230077B5.svg?logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/richard-araujo/) |\n|      Peter Gao       | [![Github](https://img.shields.io/badge/github-%23121011.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/petergaoxl) |  [![LinkedIn](https://img.shields.io/badge/LinkedIn-%230077B5.svg?logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/xiaolei-gao/)   |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foslabs-beta%2Ffennecr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foslabs-beta%2Ffennecr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foslabs-beta%2Ffennecr/lists"}