Введение
Двум аналитикам нужен одинаковый доступ к отчётам. Вы будете управлять одной общей политикой, передадите ответственность за отчётность от Alice к Bob и проверите, что бывший участник теряет этот доступ.
Сначала выполните работу Предоставьте читателю отчётов минимальные привилегии, чтобы освоить политики идентичности и разрешённые и запрещённые запросы. Эта новая VM предоставляет default для администрирования и alice, bob и outsider для проверок. Используйте /home/labex/project и AWS View, чтобы сравнивать членство с фактическим чтением.
Связь с сертификацией
| Сертификация | Задача экзамена | Практика |
|---|---|---|
| Cloud Practitioner (CLF-C02) | Задача 2.3 | Членство в группах IAM и наследуемые разрешения доступа. |
| Solutions Architect – Associate (SAA-C03) | Задача 1.1 | Членство в группах IAM и наследуемые разрешения доступа. |
| Developer – Associate (DVA-C02) | Задача 2.1 | Членство в группах IAM и наследуемые разрешения доступа. |
| CloudOps Engineer – Associate (SOA-C03) | Задача 4.1 | Членство в группах IAM и наследуемые разрешения доступа. |
| Security – Specialty (SCS-C03) | Задача 4.2 | Базовая практика: Членство в группах IAM и наследуемые разрешения доступа. |
| Data Engineer – Associate (DEA-C01) | Задача 4.1 | Базовая практика: Членство в группах IAM и наследуемые разрешения доступа. |
| DevOps Engineer – Professional (DOP-C02) | Задача 6.1 | Базовая практика: Членство в группах IAM и наследуемые разрешения доступа. |
| Solutions Architect – Professional (SAP-C02) | Задача 2.3 | Базовая практика: Членство в группах IAM и наследуемые разрешения доступа. |
Обзор лабораторной работы

Создайте команду и одну общую политику
На этом шаге вы создадите пустую группу и прикрепите встроенную политику. Группа — объект управления разрешениями, а не новая идентичность для запросов. Сначала подтвердите оператора и Alice через STS; их ARN должны заканчиваться соответственно на user/iam02-operator и user/alice.
Команде нужно разрешение на чтение, которое вы предоставляли одному пользователю. Прикрепите его один раз к группе и меняйте её участников при передаче ответственности между аналитиками. Отчёт и политика остаются прежними; меняется пользователь, наследующий разрешение.
Группа IAM объединяет пользователей, чтобы они наследовали её разрешения. У неё нет учётных данных, и она не может сама входить или принимать роль. Это упражнение отрабатывает существующую схему пользователей IAM; доступ людей в рабочей среде обычно использует федерацию и временные роли.
cd /home/labex/project
aws sts get-caller-identity --query Arn --output text
aws sts get-caller-identity --profile alice --query Arn --output text
У Alice изначально нет разрешения читать существующий отчёт. Его подготовкой владеет оператор. Проверьте до предоставления доступа:
aws s3api get-object --profile alice --bucket labex-iam02-reports --key reports/today.txt before.txt || true
Ожидайте AccessDenied. || true позволяет намеренно неуспешной команде завершиться во вставленной последовательности; он не превращает сбой подключения в свидетельство разрешений.
Создайте ReportTeam. Это пока не создаёт участников и не предоставляет разрешений.
aws iam create-group --group-name ReportTeam
Напишите политику, разрешающую только GetObject в префиксе reports этого бакета. ARN объекта включает ключ; подстановочный знак после reports/ не соответствует payroll или другому бакету. Соответствующий Allow разрешает запрос, если его не отменяет применимый явный Deny.
cat > team-policy.json <<'JSON'
{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"s3:GetObject","Resource":"arn:aws:s3:::labex-iam02-reports/reports/*"}]}
JSON
put-group-policy хранит эту встроенную политику непосредственно в группе. Она применяется к участникам группы; одно редактирование локального файла не имеет эффекта.
aws iam put-group-policy \
--group-name ReportTeam \
--policy-name ReportRead \
--policy-document file://team-policy.json
aws iam get-group --group-name ReportTeam --query 'Users[].UserName'
aws iam get-group-policy \
--group-name ReportTeam \
--policy-name ReportRead \
--query PolicyDocument
Список участников пуст. Alice по-прежнему получает отказ, поскольку членство не связывает её с политикой.
aws s3api get-object --profile alice --bucket labex-iam02-reports --key reports/today.txt still-denied.txt || true
Добавьте Alice и проверьте границу разрешений
На этом шаге вы свяжете Alice с разрешением группы и сравните её фактические запросы с Bob и посторонним пользователем. add-user-to-group меняет членство; он не создаёт и не выводит учётные данные.

aws iam add-user-to-group --group-name ReportTeam --user-name alice
aws iam get-group --group-name ReportTeam --query 'Users[].UserName'
aws iam list-groups-for-user --user-name alice --query 'Groups[].GroupName'
Ожидайте Alice в ReportTeam и ReportTeam в списке групп Alice. Теперь используйте учётные данные Alice для запроса байтов отчёта.
aws s3api get-object \
--profile alice \
--bucket labex-iam02-reports \
--key reports/today.txt alice-report.txt
cat alice-report.txt
Ожидайте Daily orders: 145. Тот же запрос отчёта от Bob и постороннего пользователя должен завершиться отказом, поскольку они не участники.
aws s3api get-object --profile bob --bucket labex-iam02-reports --key reports/today.txt bob-denied.txt || true
aws s3api get-object --profile outsider --bucket labex-iam02-reports --key reports/today.txt outsider-denied.txt || true
Alice также остаётся без доступа вне области ресурсов группы. Эти существующие объекты позволяют диагностировать авторизацию, а не отсутствующий ключ.
aws s3api get-object --profile alice --bucket labex-iam02-reports --key private/payroll.txt private-denied.txt || true
aws s3api get-object --profile alice --bucket labex-iam02-reference --key reference.txt reference-denied.txt || true
Ожидайте AccessDenied для всех четырёх отрицательных запросов. AWS View показывает членство и выполняет фактические запросы GetObject для каждого пользователя; раскройте сегодняшний отчёт, чтобы изучить байты Alice.
Передайте членство и повторно проверьте прежний доступ
На этом шаге вы передадите ответственность за отчётность Bob и проверите, что Alice теряет унаследованное разрешение. Удаление членства в группе удаляет разрешения, унаследованные от этой группы. Оно не отзывает другие разрешения, которые пользователь мог бы иметь; у этих подготовленных пользователей их нет.
Сначала добавьте Bob, затем удалите Alice. Пока оба пользователя являются участниками, они используют общую политику группы; после удаления только Bob должен наследовать её.
aws iam add-user-to-group --group-name ReportTeam --user-name bob
aws iam remove-user-from-group --group-name ReportTeam --user-name alice
aws iam get-group --group-name ReportTeam --query 'Users[].UserName'
Ожидайте только Bob. Прочитайте отчёт как Bob, затем повторите идентичный запрос как Alice.
aws s3api get-object \
--profile bob \
--bucket labex-iam02-reports \
--key reports/today.txt bob-report.txt
cat bob-report.txt
aws s3api get-object --profile alice --bucket labex-iam02-reports --key reports/today.txt former-member.txt || true
aws s3api get-object --profile outsider --bucket labex-iam02-reports --key reports/today.txt outsider-denied.txt || true
Bob получает 145; Alice и посторонний пользователь получают AccessDenied. Учётные данные выбирают вызывающую сторону, а текущие действующие разрешения определяют успех её запроса.
Группа разрешает чтение, а не запись. Попробуйте предоставленную замену как Bob и подтвердите, что исходный отчёт всё ещё существует.
aws s3api put-object --profile bob --bucket labex-iam02-reports --key reports/today.txt --body upload.txt || true
aws s3api get-object \
--profile bob \
--bucket labex-iam02-reports \
--key reports/today.txt bob-report.txt
cat bob-report.txt
Ожидайте AccessDenied для PutObject, затем неизменённое Daily orders: 145. Теперь AWS View показывает Bob как участника и отказ Alice; сама политика группы не изменилась.

Удалите команду и очистите её данные
На этом шаге вы отзовёте унаследованный доступ Bob перед удалением группы и собственных данных отчётов. IAM требует отсутствия участников и прикреплённых политик у группы перед удалением. Оставьте независимую ReferenceTeam и членство outsider в ней без изменений.
aws iam remove-user-from-group --group-name ReportTeam --user-name bob
aws s3api get-object --profile bob --bucket labex-iam02-reports --key reports/today.txt revoked.txt || true
Ожидайте AccessDenied, пока отчёт ещё существует. Удалите встроенную политику, затем пустую группу.
aws iam delete-group-policy --group-name ReportTeam --policy-name ReportRead
aws iam delete-group --group-name ReportTeam
aws iam list-groups --query 'Groups[].GroupName'
aws iam get-group --group-name ReferenceTeam --query 'Users[].UserName'
Остаётся только ReferenceTeam, всё ещё содержащая outsider. Удалите ровно два собственных ключа объектов и проверьте пустоту бакета отчётов перед удалением.
aws s3api delete-object --bucket labex-iam02-reports --key reports/today.txt
aws s3api delete-object --bucket labex-iam02-reports --key private/payroll.txt
aws s3api list-objects-v2 --bucket labex-iam02-reports
Проверьте, что KeyCount равен 0 и в Contents не осталось записей объектов.
aws s3api delete-bucket --bucket labex-iam02-reports
aws s3api list-buckets --query 'Buckets[].Name'
aws s3api get-object --bucket labex-iam02-reference --key reference.txt reference.txt
cat reference.txt
Остаётся только эталонный бакет с Platform reference: keep. Успешные запросы API устанавливают очистку; сетевые ошибки — нет. AWS View показывает Group removed и Reports bucket removed. Подготовленные пользователи и ресурсы освобождаются при завершении временной среды; созданная учащимся группа и разрешения удалены.
Резюме
Вы назначили одну политику группе, доказали, что членство предоставляет доступ к отчётам, передали этот доступ и подтвердили, что бывший участник и посторонний пользователь остаются без доступа. Членство в группе — один из источников разрешений; проверяйте все применимые политики, когда идентичность неожиданно остаётся авторизованной. Вы отозвали доступ перед ограниченной очисткой и сохранили постороннюю группу и данные.
Подробнее см. в документации AWS: Группы пользователей IAM и наследуемые разрешения.



