Управляйте командой с помощью групп IAM

AWSBeginner
Практиковаться сейчас

Введение

Двум аналитикам нужен одинаковый доступ к отчётам. Вы будете управлять одной общей политикой, передадите ответственность за отчётность от 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 и наследуемые разрешения доступа.

Обзор лабораторной работы

Концептуальная схема: ReportTeam использует общую политику чтения S3; членство переходит от Alice к Bob, а бывший участник теряет это унаследованное разрешение.

Создайте команду и одну общую политику

На этом шаге вы создадите пустую группу и прикрепите встроенную политику. Группа — объект управления разрешениями, а не новая идентичность для запросов. Сначала подтвердите оператора и 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 меняет членство; он не создаёт и не выводит учётные данные.

После вступления Alice в ReportTeam политика чтения применяется к её запросам. Bob и посторонний пользователь всё ещё вне группы.

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. Пример: та же политика группы предоставляет Bob доступ чтения, а бывший участник Alice и посторонний пользователь остаются без доступа. Раскрытый отчёт показывает фактические байты, возвращённые как Bob.

Удалите команду и очистите её данные

На этом шаге вы отзовёте унаследованный доступ 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 и наследуемые разрешения.