Задание из LMS (оригинал)
- При помощи
aws cliсоздайте security group с Вашим именем и Вашей группой (например--group-name 20240915-andrew-sg) и описанием ("Security Group for MySQL and HTTPS and SSH"). Скопируйте id только что созданной sg, например,sg-092d4ec2208cc14a6. - При помощи
aws cliдобавьте правила входящего (inbound) трафика для портов 3306 (с комментарием mysql) и 443 (с комментарием https) для 0.0.0.0 (для всех адресов)--cidr 0.0.0.0/0. - В AWS Management Console (UI) — найдите свою security group и добавьте ещё одно правило: порт 22 (SSH) для вашего IP-адреса:
- В поле Type выберите SSH (порт 22 будет добавлен автоматически)
- В поле Source выберите опцию My IP — это автоматически подставит ваш текущий IP-адрес
- Добавьте описание в поле Description (опционально, например, "SSH My IP")
- Пришлите результат выполнения команды (не забудьте указать id именно Вашей security group!):
aws ec2 describe-security-groups --group-ids sg-092d4ec2208cc14a6 --query 'SecurityGroups[*].IpPermissions' --output json - Пришлите команды, использованные для создания security group и правил (из п. 1 и 2).
- Удалите Вашу security group с inbound и outbound правилами.
Подготовка окружения
1. AWS CLI установлен и настроен
Убедитесь, что AWS CLI v2 установлен и настроен:
# Терминал (PowerShell)
aws --version
# Ожидаем: aws-cli/2.x.x ...
aws configure list
# Ожидаем: access_key и secret_key заполнены, region = eu-central-1
Если ещё не настраивали — выполните:
# Терминал
aws configure
# Ввести: Access Key ID, Secret Access Key, eu-central-1, json
2. Проверка прав доступа
# Терминал — убеждаемся, что CLI работает с AWS
aws ec2 describe-security-groups --output table
# Должен вернуть список SG без ошибки Access Denied
Пошаговое решение
Шаг 1: Создать Security Group
Замените 20240915-andrew-sg на ваш формат: YYYYMMDD-yourname-sg.
# Терминал
# Создаём Security Group и сохраняем её ID
aws ec2 create-security-group \
--group-name "20240915-andrew-sg" \
--description "Security Group for MySQL and HTTPS and SSH" \
--region eu-central-1
Ответ команды вернёт JSON с GroupId:
{
"GroupId": "sg-092d4ec2208cc14a6"
}
Скопируйте GroupId — он понадобится в следующих командах. Замените
sg-092d4ec2208cc14a6 на ваш реальный ID.
Шаг 2: Добавить правила inbound (порты 3306 и 443)
# Терминал
# Добавляем порт 3306 (MySQL) для всех адресов с комментарием
aws ec2 authorize-security-group-ingress \
--group-id sg-092d4ec2208cc14a6 \
--ip-permissions \
'[{"IpProtocol":"tcp","FromPort":3306,"ToPort":3306,"IpRanges":[{"CidrIp":"0.0.0.0/0","Description":"mysql"}]}]' \
--region eu-central-1
# Добавляем порт 443 (HTTPS) для всех адресов с комментарием
aws ec2 authorize-security-group-ingress \
--group-id sg-092d4ec2208cc14a6 \
--ip-permissions \
'[{"IpProtocol":"tcp","FromPort":443,"ToPort":443,"IpRanges":[{"CidrIp":"0.0.0.0/0","Description":"https"}]}]' \
--region eu-central-1
Связь с теорией: Параметр
--ip-permissions с JSON — это полный формат правила, позволяющий задать Description. Более простой формат (--protocol tcp --port 3306 --cidr 0.0.0.0/0) не поддерживает Description. Подробнее: Справочник → Security Groups.
Шаг 3: Добавить правило SSH через консоль AWS
- Откройте AWS Management Console → EC2 → Security Groups
- Найдите вашу SG по имени (например
20240915-andrew-sg) - Нажмите на ID группы → вкладка Inbound rules
- Нажмите Edit inbound rules
- Нажмите Add rule:
- Type: SSH (порт 22 подставится автоматически)
- Source: My IP (автоматически подставит ваш текущий IP)
- Description:
SSH My IP
- Нажмите Save rules
Шаг 4: Проверка — describe-security-groups
# Терминал — команда для проверки и сдачи в LMS
aws ec2 describe-security-groups \
--group-ids sg-092d4ec2208cc14a6 \
--query 'SecurityGroups[*].IpPermissions' \
--output json \
--region eu-central-1
Ожидаемый вывод (три правила: SSH, MySQL, HTTPS):
[
[
{
"FromPort": 22,
"IpProtocol": "tcp",
"IpRanges": [
{
"CidrIp": "YOUR.IP.ADDRESS/32",
"Description": "SSH My IP"
}
],
"ToPort": 22
},
{
"FromPort": 443,
"IpProtocol": "tcp",
"IpRanges": [
{
"CidrIp": "0.0.0.0/0",
"Description": "https"
}
],
"ToPort": 443
},
{
"FromPort": 3306,
"IpProtocol": "tcp",
"IpRanges": [
{
"CidrIp": "0.0.0.0/0",
"Description": "mysql"
}
],
"ToPort": 3306
}
]
]
Шаг 5: Сдача задания в LMS
Скопируйте и пришлите:
- JSON-вывод команды
describe-security-groups(из шага 4) - Команды, использованные в шагах 1 и 2 (создание SG и добавление правил)
Шаг 6: Удаление Security Group
Перед удалением SG сначала нужно удалить все inbound и outbound правила, затем саму группу. Или можно удалить сразу, если SG не используется EC2-инстансами.
# Терминал — удаление inbound правил
aws ec2 revoke-security-group-ingress \
--group-id sg-092d4ec2208cc14a6 \
--ip-permissions \
'[{"IpProtocol":"tcp","FromPort":3306,"ToPort":3306,"IpRanges":[{"CidrIp":"0.0.0.0/0"}]},{"IpProtocol":"tcp","FromPort":443,"ToPort":443,"IpRanges":[{"CidrIp":"0.0.0.0/0"}]}]' \
--region eu-central-1
# Удаляем правило SSH (замените YOUR.IP.ADDRESS на ваш IP)
aws ec2 revoke-security-group-ingress \
--group-id sg-092d4ec2208cc14a6 \
--protocol tcp \
--port 22 \
--cidr YOUR.IP.ADDRESS/32 \
--region eu-central-1
# Удаляем саму Security Group
aws ec2 delete-security-group \
--group-id sg-092d4ec2208cc14a6 \
--region eu-central-1
# Терминал — проверяем, что SG удалена
aws ec2 describe-security-groups \
--group-ids sg-092d4ec2208cc14a6 \
--region eu-central-1
# Должна вернуть: InvalidGroup.NotFound
Проверка в VS Code
Запуск команд в терминале VS Code
- Открыть VS Code
- Терминал → New Terminal (или Ctrl+`)
- Убедиться, что открыт PowerShell: в строке терминала должно быть
PS C:\... - Выполнить команды пошагово, копируя из этой страницы
Работа с файлом .aws/credentials
Открыть файл credentials в VS Code для проверки:
# Терминал PowerShell
code $HOME\.aws\credentials
Убедитесь, что файл
credentials НЕ открыт в репозитории git. Проверьте .gitignore.
Связь с теорией и примерами
- Теория: IAM Access Keys — что такое Access Key ID и Secret Access Key
- Теория: Использование AWS CLI — параметры EC2 команд
- Примеры — примеры с Security Groups и EC2
- Справочник — шпаргалка по командам Security Groups