Kentlo's picture
Sync from GitHub 37f011465a0aa2abdfdd94d8bd5f31cfe932c669
28677d8 verified
Raw
History Blame Contribute Delete
12.2 kB
[
{
"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"
}
]