|
| 1 | +# AGENTS.md |
| 2 | + |
| 3 | +## Project Overview |
| 4 | + |
| 5 | +**Security-101** is a beginner-friendly cybersecurity curriculum created by Microsoft. The project is a documentation-based learning resource that teaches fundamental cybersecurity concepts through structured modules. It is vendor-agnostic and designed to be completed in small lessons (30-60 minutes each). |
| 6 | + |
| 7 | +**Key Technologies:** |
| 8 | +- Markdown for content |
| 9 | +- Docsify for static site generation |
| 10 | +- GitHub Pages for hosting |
| 11 | +- Co-op Translator for multi-language support (50+ languages) |
| 12 | +- GitHub Actions for CI/CD |
| 13 | + |
| 14 | +**Architecture:** |
| 15 | +- Educational content organized in 8 main modules, each with sub-lessons |
| 16 | +- Static HTML site with Docsify rendering Markdown content |
| 17 | +- Automated translation workflow using Azure AI services |
| 18 | +- No build tools or package managers required for core content |
| 19 | + |
| 20 | +## Repository Structure |
| 21 | + |
| 22 | +``` |
| 23 | +/ |
| 24 | +├── README.md # Main entry point with curriculum overview |
| 25 | +├── index.html # Docsify site entry point |
| 26 | +├── [1-8].[1-4] *.md # Curriculum modules and lessons |
| 27 | +├── CODE_OF_CONDUCT.md # Community guidelines |
| 28 | +├── SECURITY.md # Security policy |
| 29 | +├── SUPPORT.md # Support information |
| 30 | +├── LICENSE # MIT License |
| 31 | +├── images/ # Image assets for lessons |
| 32 | +├── translated_images/ # Translated image assets |
| 33 | +├── translations/ # Translated versions (50+ languages) |
| 34 | +└── .github/ |
| 35 | + ├── workflows/ |
| 36 | + │ ├── co-op-translator.yml # Automated translation workflow |
| 37 | + │ ├── deploy.yaml # GitHub Pages deployment |
| 38 | + │ └── jekyll-gh-pages.yml # Jekyll site generation |
| 39 | + └── ISSUE_TEMPLATE/ # Issue templates |
| 40 | +``` |
| 41 | + |
| 42 | +## Setup Commands |
| 43 | + |
| 44 | +This is a documentation project with no dependencies to install. To work with the content: |
| 45 | + |
| 46 | +```bash |
| 47 | +# Clone the repository |
| 48 | +git clone https://github.com/microsoft/Security-101.git |
| 49 | +cd Security-101 |
| 50 | + |
| 51 | +# View content locally - any Markdown viewer works |
| 52 | +# OR serve with a simple HTTP server to use Docsify rendering |
| 53 | +python -m http.server 8000 |
| 54 | +# Then visit http://localhost:8000 in your browser |
| 55 | +``` |
| 56 | + |
| 57 | +## Development Workflow |
| 58 | + |
| 59 | +### Viewing Content Locally |
| 60 | + |
| 61 | +The project uses Docsify for rendering. To preview changes: |
| 62 | + |
| 63 | +```bash |
| 64 | +# Option 1: Use Python's built-in HTTP server |
| 65 | +python -m http.server 8000 |
| 66 | + |
| 67 | +# Option 2: Use Node.js http-server (if available) |
| 68 | +npx http-server -p 8000 |
| 69 | + |
| 70 | +# Option 3: View Markdown files directly in any Markdown editor |
| 71 | +``` |
| 72 | + |
| 73 | +### Content Structure |
| 74 | + |
| 75 | +Modules are numbered sequentially: |
| 76 | +- **Module 1:** Basic security concepts (1.1-1.7) |
| 77 | +- **Module 2:** Identity & access management (2.1-2.4) |
| 78 | +- **Module 3:** Network security (3.1-3.4) |
| 79 | +- **Module 4:** Security operations (4.1-4.4) |
| 80 | +- **Module 5:** Application security (5.1-5.3) |
| 81 | +- **Module 6:** Infrastructure security (6.1-6.3) |
| 82 | +- **Module 7:** Data security (7.1-7.3) |
| 83 | +- **Module 8:** AI security (8.1-8.4) |
| 84 | + |
| 85 | +Each module ends with a quiz file (e.g., "1.7 End of module quiz.md"). |
| 86 | + |
| 87 | +### Making Content Changes |
| 88 | + |
| 89 | +1. Edit Markdown files directly in the root directory |
| 90 | +2. Follow existing naming convention: `[module].[lesson] [Title].md` |
| 91 | +3. Update README.md table if adding/removing modules |
| 92 | +4. Add images to `/images/` directory |
| 93 | +5. Reference images using relative paths: `` |
| 94 | + |
| 95 | +## Translation Workflow |
| 96 | + |
| 97 | +**Automated Translation:** |
| 98 | +- Translations are handled automatically by the Co-op Translator GitHub Action |
| 99 | +- When you push changes to `main` branch, the workflow translates content to 50+ languages |
| 100 | +- Translated files are stored in `/translations/[language_code]/` |
| 101 | +- Translation metadata is preserved in YAML frontmatter |
| 102 | + |
| 103 | +**Supported Languages:** Arabic, Bengali, Bulgarian, Burmese, Chinese (Simplified, Traditional), Croatian, Czech, Danish, Dutch, Estonian, Finnish, French, German, Greek, Hebrew, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Lithuanian, Malay, Marathi, Nepali, Norwegian, Persian, Polish, Portuguese, Punjabi, Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swahili, Swedish, Tagalog, Tamil, Thai, Turkish, Ukrainian, Urdu, Vietnamese, and more. |
| 104 | + |
| 105 | +**Do NOT manually edit translation files** - they will be overwritten by the automated workflow. |
| 106 | + |
| 107 | +## Code Style Guidelines |
| 108 | + |
| 109 | +### Markdown Conventions |
| 110 | + |
| 111 | +- Use standard Markdown syntax |
| 112 | +- Headings: Use `#` for main title, `##` for sections, `###` for subsections |
| 113 | +- Lists: Use `-` or `*` for unordered lists, `1.` for ordered lists |
| 114 | +- Links: Use descriptive text with full GitHub URLs for cross-references |
| 115 | +- Images: Store in `/images/` directory, use descriptive alt text |
| 116 | +- Code blocks: Use triple backticks with language identifier when applicable |
| 117 | + |
| 118 | +### Content Guidelines |
| 119 | + |
| 120 | +- Keep lessons focused and concise (30-60 minute read time) |
| 121 | +- Use clear, beginner-friendly language |
| 122 | +- Avoid vendor-specific tool instructions (curriculum is vendor-agnostic) |
| 123 | +- Include learning objectives at the start of each module |
| 124 | +- Link to external Microsoft Learn resources where appropriate |
| 125 | +- Ensure content is educational, not promotional |
| 126 | + |
| 127 | +### File Naming |
| 128 | + |
| 129 | +- Use format: `[Module].[Lesson] [Title].md` |
| 130 | +- Example: `1.1 The CIA triad and other key concepts.md` |
| 131 | +- Quiz files: `[Module].[Last] End of module quiz.md` |
| 132 | +- Use spaces in filenames (existing convention) |
| 133 | + |
| 134 | +## GitHub Workflows |
| 135 | + |
| 136 | +### Co-op Translator (co-op-translator.yml) |
| 137 | + |
| 138 | +**Trigger:** Push to `main` branch |
| 139 | +**Purpose:** Automatically translates new/modified Markdown files to 50+ languages |
| 140 | + |
| 141 | +**Environment Variables Required:** |
| 142 | +- Azure AI Service credentials (AZURE_AI_SERVICE_API_KEY, AZURE_AI_SERVICE_ENDPOINT) |
| 143 | +- Azure OpenAI credentials (optional alternative) |
| 144 | +- OpenAI credentials (optional alternative) |
| 145 | + |
| 146 | +### Deploy (deploy.yaml) |
| 147 | + |
| 148 | +**Trigger:** Push to `main` branch when README.md changes |
| 149 | +**Purpose:** Deploys static site to GitHub Pages |
| 150 | +**Output:** Updates GitHub Pages site |
| 151 | + |
| 152 | +### Jekyll GitHub Pages (jekyll-gh-pages.yml) |
| 153 | + |
| 154 | +**Trigger:** Push to configured branch |
| 155 | +**Purpose:** Builds and deploys site using Jekyll |
| 156 | + |
| 157 | +## Pull Request Guidelines |
| 158 | + |
| 159 | +### Before Submitting |
| 160 | + |
| 161 | +1. **Content Review:** Ensure accuracy and clarity of cybersecurity concepts |
| 162 | +2. **Formatting:** Verify Markdown formatting renders correctly |
| 163 | +3. **Links:** Test all internal and external links |
| 164 | +4. **Images:** Ensure all images load and have descriptive alt text |
| 165 | +5. **Consistency:** Follow existing content structure and style |
| 166 | + |
| 167 | +### PR Title Format |
| 168 | + |
| 169 | +Use descriptive titles: |
| 170 | +- `Add: [New content description]` |
| 171 | +- `Update: [Module/Lesson] - [Brief description]` |
| 172 | +- `Fix: [Issue description]` |
| 173 | +- `Docs: [Documentation changes]` |
| 174 | + |
| 175 | +### Required Checks |
| 176 | + |
| 177 | +- Content accuracy (manual review) |
| 178 | +- Markdown formatting validation |
| 179 | +- Link verification |
| 180 | +- Translation workflow completion (for `main` branch merges) |
| 181 | + |
| 182 | +### Review Process |
| 183 | + |
| 184 | +1. At least one maintainer review required |
| 185 | +2. Focus on technical accuracy of security concepts |
| 186 | +3. Verify accessibility and beginner-friendliness |
| 187 | +4. Ensure vendor neutrality is maintained |
| 188 | + |
| 189 | +## Common Tasks |
| 190 | + |
| 191 | +### Adding a New Lesson |
| 192 | + |
| 193 | +```bash |
| 194 | +# 1. Create new Markdown file with proper naming |
| 195 | +touch "[Module].[Lesson] [Title].md" |
| 196 | + |
| 197 | +# 2. Add content following template structure |
| 198 | +# 3. Update README.md module table with new entry |
| 199 | +# 4. Add entry to module overview table |
| 200 | +# 5. Ensure quiz file numbering is correct |
| 201 | + |
| 202 | +# 6. Commit changes |
| 203 | +git add "[Module].[Lesson] [Title].md" README.md |
| 204 | +git commit -m "Add: [Module].[Lesson] - [Title]" |
| 205 | +git push |
| 206 | +``` |
| 207 | + |
| 208 | +### Updating Existing Content |
| 209 | + |
| 210 | +```bash |
| 211 | +# 1. Edit the relevant Markdown file |
| 212 | +# 2. Verify formatting and links |
| 213 | +# 3. Commit with descriptive message |
| 214 | +git add "[Module].[Lesson] [Title].md" |
| 215 | +git commit -m "Update: [Module].[Lesson] - [Brief description of changes]" |
| 216 | +git push |
| 217 | +``` |
| 218 | + |
| 219 | +### Adding Images |
| 220 | + |
| 221 | +```bash |
| 222 | +# 1. Add image to /images/ directory |
| 223 | +cp new-image.png images/ |
| 224 | + |
| 225 | +# 2. Reference in Markdown |
| 226 | +#  |
| 227 | + |
| 228 | +# 3. Commit both content and image |
| 229 | +git add "images/new-image.png" "[Module].[Lesson] [Title].md" |
| 230 | +git commit -m "Add: Image for [description]" |
| 231 | +git push |
| 232 | +``` |
| 233 | + |
| 234 | +## Testing and Validation |
| 235 | + |
| 236 | +### Content Validation |
| 237 | + |
| 238 | +Since this is a documentation project, testing focuses on: |
| 239 | + |
| 240 | +1. **Markdown Rendering:** View changes locally using Docsify |
| 241 | +2. **Link Validation:** Manually click through all links |
| 242 | +3. **Image Loading:** Verify all images display correctly |
| 243 | +4. **Translation:** Check that files are picked up by translator workflow (automated) |
| 244 | +5. **Accessibility:** Ensure proper heading hierarchy and alt text |
| 245 | + |
| 246 | +### Local Preview |
| 247 | + |
| 248 | +```bash |
| 249 | +# Serve locally to test Docsify rendering |
| 250 | +python -m http.server 8000 |
| 251 | + |
| 252 | +# Visit http://localhost:8000 |
| 253 | +# Click through navigation to verify all links work |
| 254 | +# Check that images load properly |
| 255 | +# Verify Markdown formatting renders correctly |
| 256 | +``` |
| 257 | + |
| 258 | +### Pre-commit Checklist |
| 259 | + |
| 260 | +- [ ] Markdown files use correct syntax |
| 261 | +- [ ] All links are valid and use HTTPS where possible |
| 262 | +- [ ] Images have descriptive alt text |
| 263 | +- [ ] Content is beginner-friendly and accurate |
| 264 | +- [ ] Vendor-neutral language is maintained |
| 265 | +- [ ] README.md updated if adding/removing modules |
| 266 | +- [ ] File naming follows conventions |
| 267 | + |
| 268 | +## Security Considerations |
| 269 | + |
| 270 | +- **No secrets in content:** Never commit API keys, passwords, or sensitive data |
| 271 | +- **Link validation:** Ensure all external links are to trusted sources |
| 272 | +- **Image content:** Verify images don't contain sensitive information |
| 273 | +- **Translation workflow:** Uses Azure AI services with proper authentication |
| 274 | +- **SECURITY.md:** Follow vulnerability reporting process in SECURITY.md |
| 275 | + |
| 276 | +## Additional Resources |
| 277 | + |
| 278 | +### Related Microsoft Courses |
| 279 | + |
| 280 | +This curriculum is part of a larger collection of Microsoft educational resources: |
| 281 | +- Generative AI for Beginners |
| 282 | +- AI for Beginners |
| 283 | +- Data Science for Beginners |
| 284 | +- ML for Beginners |
| 285 | +- Web Dev for Beginners |
| 286 | +- IoT for Beginners |
| 287 | + |
| 288 | +### External Learning Paths |
| 289 | + |
| 290 | +After completing Security-101: |
| 291 | +- [Microsoft Security, Compliance, and Identity Fundamentals](https://learn.microsoft.com/training/paths/describe-concepts-of-security-compliance-identity/) |
| 292 | +- [Exam SC-900: Microsoft Security, Compliance, and Identity Fundamentals](https://learn.microsoft.com/credentials/certifications/exams/sc-900/) |
| 293 | + |
| 294 | +## Contributing |
| 295 | + |
| 296 | +1. **Fork the repository** on GitHub |
| 297 | +2. **Create a feature branch** for your changes |
| 298 | +3. **Make your changes** following the guidelines above |
| 299 | +4. **Test locally** to ensure everything renders correctly |
| 300 | +5. **Submit a pull request** with a clear description of changes |
| 301 | +6. **Respond to feedback** from maintainers |
| 302 | + |
| 303 | +## Common Issues and Troubleshooting |
| 304 | + |
| 305 | +### Translations Not Working |
| 306 | + |
| 307 | +- Ensure changes are pushed to `main` branch |
| 308 | +- Check GitHub Actions tab for workflow status |
| 309 | +- Verify translation workflow secrets are configured |
| 310 | +- Translation happens automatically; do not manually edit translation files |
| 311 | + |
| 312 | +### Images Not Loading |
| 313 | + |
| 314 | +- Verify image path uses forward slashes: `images/filename.png` |
| 315 | +- Check that image file is committed to repository |
| 316 | +- Ensure image filename matches exactly (case-sensitive) |
| 317 | +- Use relative paths, not absolute URLs |
| 318 | + |
| 319 | +### Docsify Not Rendering |
| 320 | + |
| 321 | +- Check that `index.html` is present in root |
| 322 | +- Verify Docsify CDN links are accessible |
| 323 | +- Ensure Markdown files use standard syntax |
| 324 | +- Check browser console for JavaScript errors |
| 325 | + |
| 326 | +### Links Not Working |
| 327 | + |
| 328 | +- Use full GitHub URLs for cross-references between lessons |
| 329 | +- Format: `https://github.com/microsoft/Security-101/blob/main/[file].md` |
| 330 | +- Test links in rendered view, not just in raw Markdown |
| 331 | + |
| 332 | +## Project Maintenance |
| 333 | + |
| 334 | +### Regular Tasks |
| 335 | + |
| 336 | +- Review and merge community contributions |
| 337 | +- Update content for accuracy as security landscape evolves |
| 338 | +- Monitor translation workflow for errors |
| 339 | +- Respond to issues and discussions |
| 340 | +- Keep external links up to date |
| 341 | + |
| 342 | +### Version Control |
| 343 | + |
| 344 | +- `main` branch is protected and requires PR reviews |
| 345 | +- All changes go through pull request process |
| 346 | +- Translation files are auto-generated, do not edit manually |
| 347 | +- Use meaningful commit messages |
| 348 | + |
| 349 | +## Notes for AI Coding Agents |
| 350 | + |
| 351 | +- **This is a documentation project** - focus on content quality, not code |
| 352 | +- **Do not modify translation files** - they are auto-generated |
| 353 | +- **Preserve file naming conventions** - use spaces in filenames as per existing pattern |
| 354 | +- **Update README.md** when adding/removing modules to keep table in sync |
| 355 | +- **Test locally** before submitting PRs to ensure Markdown renders correctly |
| 356 | +- **Follow existing content style** - maintain beginner-friendly, vendor-neutral tone |
| 357 | +- **No build process required** - simple HTTP server is sufficient for local development |
| 358 | +- **Respect the module structure** - each module has consistent numbering and organization |
0 commit comments