Spaces:
Running
Running
| [ | |
| { | |
| "id": "azure-lab-1", | |
| "title": "๋ฆฌ์์ค ๊ทธ๋ฃน ์์ฑ", | |
| "task_description": "Korea Central ์ง์ญ์ `myRG`๋ผ๋ ๋ฆฌ์์ค ๊ทธ๋ฃน์ ๋ง๋์ธ์.", | |
| "expected_command": "az group create --name myRG --location koreacentral", | |
| "grading_conditions": ["az group create", "--name myRG", "--location koreacentral"], | |
| "hint": "`az group create --name <์ด๋ฆ> --location <์ง์ญ>` ํ์์ ์ฌ์ฉํฉ๋๋ค.", | |
| "explanation": "๋ฆฌ์์ค ๊ทธ๋ฃน์ Azure ๋ฆฌ์์ค๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ฌถ๋ ์ปจํ ์ด๋์ ๋๋ค. ์ง์ญ์ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ ์์น์ด๋ฉฐ ๋ด๋ถ ๋ฆฌ์์ค์ ๋ฌ๋ผ๋ ๋ฉ๋๋ค.", | |
| "difficulty": "easy" | |
| }, | |
| { | |
| "id": "azure-lab-2", | |
| "title": "์คํ ๋ฆฌ์ง ๊ณ์ ์์ฑ (Standard LRS)", | |
| "task_description": "`myRG` ๋ฆฌ์์ค ๊ทธ๋ฃน์ Standard_LRS ์ค๋ณต์ฑ์ ๊ฐ์ง `mystorageacct` ์คํ ๋ฆฌ์ง ๊ณ์ ์ ์์ฑํ์ธ์.", | |
| "expected_command": "az storage account create --name mystorageacct --resource-group myRG --sku Standard_LRS --kind StorageV2", | |
| "grading_conditions": ["az storage account create", "--name mystorageacct", "--resource-group myRG", "--sku Standard_LRS"], | |
| "hint": "`az storage account create`์ `--sku`์ `--kind` ์ต์ ์ ์ถ๊ฐํฉ๋๋ค.", | |
| "explanation": "StorageV2(๋ฒ์ฉ v2)๋ ํ์ฌ ๊ถ์ฅ ์คํ ๋ฆฌ์ง ์ข ๋ฅ์ ๋๋ค. LRS๋ ๋จ์ผ ๋ฐ์ดํฐ์ผํฐ ๋ด 3๋ณต์ ๋ก ๊ฐ์ฅ ์ ๋ ดํ ์ค๋ณต์ฑ์ ๋๋ค.", | |
| "difficulty": "easy" | |
| }, | |
| { | |
| "id": "azure-lab-3", | |
| "title": "๊ฐ์ ๋คํธ์ํฌ์ ์๋ธ๋ท ์์ฑ", | |
| "task_description": "`myRG`์ ์ฃผ์ ๊ณต๊ฐ `10.0.0.0/16`, ์๋ธ๋ท `default`(`10.0.0.0/24`)๋ฅผ ๊ฐ์ง VNet `myVNet`์ ์์ฑํ์ธ์.", | |
| "expected_command": "az network vnet create --name myVNet --resource-group myRG --address-prefix 10.0.0.0/16 --subnet-name default --subnet-prefix 10.0.0.0/24", | |
| "grading_conditions": ["az network vnet create", "--name myVNet", "--address-prefix 10.0.0.0/16", "--subnet-name default", "--subnet-prefix 10.0.0.0/24"], | |
| "hint": "`az network vnet create`์ `--address-prefix`์ `--subnet-name`, `--subnet-prefix`๋ฅผ ํจ๊ป ์ง์ ํฉ๋๋ค.", | |
| "explanation": "VNet ์ฃผ์ ๊ณต๊ฐ(/16)๊ณผ ์๋ธ๋ท ๋ฒ์(/24)๋ ํฌํจ ๊ด๊ณ์ฌ์ผ ํฉ๋๋ค. Azure๋ ๊ฐ ์๋ธ๋ท์์ 5๊ฐ IP๋ฅผ ์์ฝํฉ๋๋ค.", | |
| "difficulty": "easy" | |
| }, | |
| { | |
| "id": "azure-lab-4", | |
| "title": "NSG ๊ท์น์ผ๋ก SSH ํ์ฉ", | |
| "task_description": "NSG `myNSG`์ ์ฐ์ ์์ 100์ผ๋ก TCP ํฌํธ 22 ์ธ๋ฐ์ด๋๋ฅผ ํ์ฉํ๋ ๊ท์น `allow-ssh`๋ฅผ ์ถ๊ฐํ์ธ์.", | |
| "expected_command": "az network nsg rule create --nsg-name myNSG --resource-group myRG --name allow-ssh --priority 100 --access Allow --protocol Tcp --destination-port-ranges 22", | |
| "grading_conditions": ["az network nsg rule create", "--nsg-name myNSG", "--name allow-ssh", "--priority 100", "--access Allow", "--destination-port-ranges 22"], | |
| "hint": "`az network nsg rule create`์ `--priority`, `--access`, `--protocol`, `--destination-port-ranges`๋ฅผ ์ง์ ํฉ๋๋ค.", | |
| "explanation": "NSG ๊ท์น์ ์ฐ์ ์์ ์ซ์๊ฐ ๋ฎ์์๋ก ๋จผ์ ์ ์ฉ๋ฉ๋๋ค. 100์ ๊ธฐ๋ณธ ๊ท์น(65000~65500)๋ณด๋ค ํจ์ฌ ๋์ ์ฐ์ ์์์ ๋๋ค.", | |
| "difficulty": "easy" | |
| }, | |
| { | |
| "id": "azure-lab-5", | |
| "title": "RBAC ์ญํ ํ ๋น (Contributor)", | |
| "task_description": "`alice@example.com`์๊ฒ `myRG` ๋ฆฌ์์ค ๊ทธ๋ฃน ๋ฒ์์ `Contributor` ์ญํ ์ ํ ๋นํ์ธ์.", | |
| "expected_command": "az role assignment create --assignee alice@example.com --role Contributor --scope /subscriptions/SUB_ID/resourceGroups/myRG", | |
| "grading_conditions": ["az role assignment create", "--assignee alice@example.com", "--role Contributor", "--scope"], | |
| "hint": "`az role assignment create`์ `--assignee`, `--role`, `--scope`๋ฅผ ์ง์ ํฉ๋๋ค. scope๋ ๋ฆฌ์์ค ๊ทธ๋ฃน์ ์ ์ฒด ARM ID์ ๋๋ค.", | |
| "explanation": "Contributor๋ ๋ฆฌ์์ค ์์ฑ/์์ /์ญ์ ๋ ๊ฐ๋ฅํ์ง๋ง ์ญํ ํ ๋น์ ๋ถ๊ฐํฉ๋๋ค. Owner๋ง ์ญํ ํ ๋น ๊ถํ์ ๊ฐ์ง๋๋ค.", | |
| "difficulty": "medium" | |
| }, | |
| { | |
| "id": "azure-lab-6", | |
| "title": "๋ฆฌ์์ค ์ ๊ธ ์ค์ (CanNotDelete)", | |
| "task_description": "`myRG` ๋ฆฌ์์ค ๊ทธ๋ฃน์ `CanNotDelete` ์ ๊ธ `prod-lock`์ ์ค์ ํ์ธ์.", | |
| "expected_command": "az lock create --name prod-lock --resource-group myRG --lock-type CanNotDelete", | |
| "grading_conditions": ["az lock create", "--name prod-lock", "--resource-group myRG", "--lock-type CanNotDelete"], | |
| "hint": "`az lock create`์ `--lock-type`์ผ๋ก `CanNotDelete` ๋๋ `ReadOnly`๋ฅผ ์ ํํฉ๋๋ค.", | |
| "explanation": "CanNotDelete ์ ๊ธ์ ์ฝ๊ธฐ์ ์์ ์ ํ์ฉํ์ง๋ง ์ญ์ ๋ฅผ ์ฐจ๋จํฉ๋๋ค. Owner๋ผ๋ ์ ๊ธ์ ๋จผ์ ํด์ ํด์ผ ์ญ์ ํ ์ ์์ต๋๋ค.", | |
| "difficulty": "easy" | |
| }, | |
| { | |
| "id": "azure-lab-7", | |
| "title": "Blob ์ ๊ทผ ๊ณ์ธต ๋ณ๊ฒฝ (Cool)", | |
| "task_description": "`mycontainer`์ `report.log` Blob์ Cool ๊ณ์ธต์ผ๋ก ๋ณ๊ฒฝํ์ธ์.", | |
| "expected_command": "az storage blob set-tier --account-name mystorageacct --container-name mycontainer --name report.log --tier Cool", | |
| "grading_conditions": ["az storage blob set-tier", "--account-name mystorageacct", "--container-name mycontainer", "--name report.log", "--tier Cool"], | |
| "hint": "`az storage blob set-tier`์ `--tier`๋ก Hot/Cool/Cold/Archive๋ฅผ ์ง์ ํฉ๋๋ค.", | |
| "explanation": "Cool ๊ณ์ธต์ 30์ผ ์ด์ ์ ์ฅํ๋ ๋ฐ์ดํฐ์ ์ ํฉํฉ๋๋ค. ์ ์ฅ ๋น์ฉ์ ๋ฎ์ง๋ง ์ ๊ทผ ๋น์ฉ์ด Hot๋ณด๋ค ๋์ต๋๋ค.", | |
| "difficulty": "easy" | |
| }, | |
| { | |
| "id": "azure-lab-8", | |
| "title": "VM ๋ฐฑ์ ํ์ฑํ", | |
| "task_description": "`myVault` Recovery Services Vault์์ `myVM` ๊ฐ์ ๋จธ์ ์ ๋ฐฑ์ ์ `DefaultPolicy`๋ก ํ์ฑํํ์ธ์.", | |
| "expected_command": "az backup protection enable-for-vm --vault-name myVault --resource-group myRG --vm myVM --policy-name DefaultPolicy", | |
| "grading_conditions": ["az backup protection enable-for-vm", "--vault-name myVault", "--vm myVM", "--policy-name DefaultPolicy"], | |
| "hint": "`az backup protection enable-for-vm`์ vault, vm, policy ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.", | |
| "explanation": "VM ๋ฐฑ์ ํ์ฑํ ํ ์ต์ด ๋ฐฑ์ ์ ์ฆ์ ํธ๋ฆฌ๊ฑฐํ๊ฑฐ๋ ๋ค์ ์์ฝ ์๊ฐ๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. Vault์ VM์ ๊ฐ์ region์ ์์ด์ผ ํฉ๋๋ค.", | |
| "difficulty": "medium" | |
| }, | |
| { | |
| "id": "azure-lab-9", | |
| "title": "Key Vault ๋น๋ฐ ์ ์ฅ", | |
| "task_description": "`myKV` Key Vault์ `db-password`๋ผ๋ ์ด๋ฆ์ผ๋ก `MyP@ss123` ๋น๋ฐ์ ์ ์ฅํ์ธ์.", | |
| "expected_command": "az keyvault secret set --vault-name myKV --name db-password --value MyP@ss123", | |
| "grading_conditions": ["az keyvault secret set", "--vault-name myKV", "--name db-password", "--value"], | |
| "hint": "`az keyvault secret set`์ vault ์ด๋ฆ, ๋น๋ฐ ์ด๋ฆ, ๊ฐ์ ์ง์ ํฉ๋๋ค.", | |
| "explanation": "๋น๋ฐ์ ๋ฒ์ ๊ด๋ฆฌ๋ฉ๋๋ค. ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ค์ ์ ์ฅํ๋ฉด ์ ๋ฒ์ ์ด ์์ฑ๋๊ณ ์ด์ ๋ฒ์ ์ ๋นํ์ฑํ๋ฉ๋๋ค.", | |
| "difficulty": "easy" | |
| }, | |
| { | |
| "id": "azure-lab-10", | |
| "title": "VNet ํผ์ด๋ง ์์ฑ", | |
| "task_description": "`VNet1`์์ `VNet2`๋ก ํฅํ๋ ํผ์ด๋ง `VNet1-to-VNet2`๋ฅผ ์์ฑํ์ธ์. (resource group: myRG)", | |
| "expected_command": "az network vnet peering create --name VNet1-to-VNet2 --vnet-name VNet1 --remote-vnet VNet2 --resource-group myRG", | |
| "grading_conditions": ["az network vnet peering create", "--name VNet1-to-VNet2", "--vnet-name VNet1", "--remote-vnet VNet2"], | |
| "hint": "ํผ์ด๋ง์ ์๋ฐฉํฅ์ ๊ฐ๊ฐ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ์ด ๋ช ๋ น์ VNet1โVNet2 ๋ฐฉํฅ์ ๋๋ค.", | |
| "explanation": "VNet ํผ์ด๋ง์ ๋น์ ์ด์ (non-transitive)์ ๋๋ค. AโB, BโC๊ฐ ์์ด๋ A์์ C๋ก๋ ์ง์ ํต์ ๋ถ๊ฐ์ด๋ฉฐ AโC๋ฅผ ๋ณ๋ ์์ฑํด์ผ ํฉ๋๋ค.", | |
| "difficulty": "medium" | |
| }, | |
| { | |
| "id": "azure-lab-11", | |
| "title": "Private Endpoint ์์ฑ (Blob)", | |
| "task_description": "`myVNet`์ `default` ์๋ธ๋ท์ ์คํ ๋ฆฌ์ง ๊ณ์ `mystorageacct`์ blob ์๋น์ค์ฉ Private Endpoint `myPE`๋ฅผ ์์ฑํ์ธ์.", | |
| "expected_command": "az network private-endpoint create --name myPE --resource-group myRG --vnet-name myVNet --subnet default --private-connection-resource-id /subscriptions/SUB_ID/resourceGroups/myRG/providers/Microsoft.Storage/storageAccounts/mystorageacct --group-ids blob --connection-name myPEConnection", | |
| "grading_conditions": ["az network private-endpoint create", "--name myPE", "--vnet-name myVNet", "--group-ids blob"], | |
| "hint": "`--private-connection-resource-id`์ ์คํ ๋ฆฌ์ง ๊ณ์ ์ ์ ์ฒด ARM ID๋ฅผ ๋ฃ๊ณ , `--group-ids blob`์ ์ง์ ํฉ๋๋ค.", | |
| "explanation": "Private Endpoint๋ PaaS ์๋น์ค์ VNet ๋ด ์ฌ์ค IP๋ฅผ ๋ถ์ฌํฉ๋๋ค. ์์ฑ ํ Private DNS Zone ์ฐ๊ฒฐ์ด ์์ด์ผ DNS ํด์์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ฉ๋๋ค.", | |
| "difficulty": "hard" | |
| }, | |
| { | |
| "id": "azure-lab-12", | |
| "title": "Azure Bastion ์์ฑ", | |
| "task_description": "`myVNet`์ Public IP `myBastionIP`๋ฅผ ์ฌ์ฉํ๋ Azure Bastion `myBastion`์ Korea Central์ ์์ฑํ์ธ์.", | |
| "expected_command": "az network bastion create --name myBastion --public-ip-address myBastionIP --resource-group myRG --vnet-name myVNet --location koreacentral", | |
| "grading_conditions": ["az network bastion create", "--name myBastion", "--public-ip-address myBastionIP", "--vnet-name myVNet"], | |
| "hint": "Bastion ์์ฑ ์ VNet์ `AzureBastionSubnet`(/27 ์ด์)์ด ๋ฐ๋์ ์์ด์ผ ํฉ๋๋ค.", | |
| "explanation": "Azure Bastion์ VM์ Public IP ์์ด ํฌํธ์์ RDP/SSH ์ ๊ทผ์ ์ ๊ณตํฉ๋๋ค. AzureBastionSubnet ์ด๋ฆ์ ์ ํํ ์ผ์นํด์ผ ํฉ๋๋ค.", | |
| "difficulty": "medium" | |
| }, | |
| { | |
| "id": "azure-lab-13", | |
| "title": "App Service ์น์ฑ ์์ฑ", | |
| "task_description": "`myPlan` App Service ํ๋์ ์ฌ์ฉํ๋ `myWebApp` ์น์ฑ์ Node.js 18 LTS ๋ฐํ์์ผ๋ก ์์ฑํ์ธ์.", | |
| "expected_command": "az webapp create --name myWebApp --resource-group myRG --plan myPlan --runtime NODE:18-lts", | |
| "grading_conditions": ["az webapp create", "--name myWebApp", "--resource-group myRG", "--plan myPlan", "--runtime"], | |
| "hint": "`az webapp create`์ `--plan`๊ณผ `--runtime`์ ์ง์ ํฉ๋๋ค. ๋ฐํ์ ๋ชฉ๋ก์ `az webapp list-runtimes`๋ก ํ์ธํฉ๋๋ค.", | |
| "explanation": "App Service๋ ๋ฐํ์ ํ๊ฒฝ๊ณผ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ์ ์ฐํ๊ฒ ์ ํํ ์ ์๋ PaaS์ ๋๋ค. ๊ฐ์ ํ๋์ ์ฑ๋ค์ ์ปดํจํ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํฉ๋๋ค.", | |
| "difficulty": "easy" | |
| }, | |
| { | |
| "id": "azure-lab-14", | |
| "title": "๋ฐฐํฌ ์ฌ๋กฏ ์์ฑ (staging)", | |
| "task_description": "`myWebApp` ์น์ฑ์ `staging` ๋ฐฐํฌ ์ฌ๋กฏ์ ์์ฑํ์ธ์.", | |
| "expected_command": "az webapp deployment slot create --name myWebApp --resource-group myRG --slot staging", | |
| "grading_conditions": ["az webapp deployment slot create", "--name myWebApp", "--slot staging"], | |
| "hint": "`az webapp deployment slot create`์ `--slot`์ผ๋ก ์ฌ๋กฏ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค. Standard ์ด์ ํ๋์ด ํ์ํฉ๋๋ค.", | |
| "explanation": "๋ฐฐํฌ ์ฌ๋กฏ์ ๋ค์ดํ์ ์์ด ์คํ ์ด์ง ๋ฒ์ ์ ํ ์คํธํ๊ณ swap์ผ๋ก ์ฆ์ ๊ต์ฒดํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.", | |
| "difficulty": "easy" | |
| }, | |
| { | |
| "id": "azure-lab-15", | |
| "title": "๊ฒฝ๋ณด ๊ท์น ์์ฑ (CPU 80%)", | |
| "task_description": "`myVM`์ ํ๊ท CPU ์ฌ์ฉ๋ฅ ์ด 80%๋ฅผ ์ด๊ณผํ๋ฉด `alice@example.com`์ผ๋ก ์๋ฆผ์ ๋ณด๋ด๋ ๊ฒฝ๋ณด ๊ท์น์ ์์ฑํ์ธ์.", | |
| "expected_command": "az monitor alert create --name highCPU --resource-group myRG --resource myVM --resource-type Microsoft.Compute/virtualMachines --condition avg Percentage CPU > 80 --action email alice@example.com", | |
| "grading_conditions": ["az monitor alert create", "--name highCPU", "--condition", "Percentage CPU", "> 80", "--action email alice@example.com"], | |
| "hint": "`az monitor alert create`์ `--condition`์ผ๋ก ๋ฉํธ๋ฆญ ์ด๋ฆ๊ณผ ์๊ณ๊ฐ์, `--action`์ผ๋ก ์๋ฆผ ๋ฐฉ๋ฒ์ ์ง์ ํฉ๋๋ค.", | |
| "explanation": "๊ฒฝ๋ณด๋ Action Group ์์ด๋ ๋ฐ์ํด๋ ์ ์ ์์ต๋๋ค. --action email๋ก ๊ฐ๋จํ๊ฒ ์ง์ ํ๊ฑฐ๋, ๋ณ๋ Action Group์ ์์ฑํด ์ฐ๊ฒฐํฉ๋๋ค.", | |
| "difficulty": "medium" | |
| } | |
| ] | |