Diagnostica Access Denied

AWSBeginner
Practicar Ahora

Introducción

Un lector de informes devuelve AccessDenied después de una migración de políticas. Inspeccionarás el llamante, la acción solicitada, el recurso y la declaración de denegación, reparando una discrepancia cada vez y conservando el alcance limitado del lector.

Completa primero Concede el mínimo privilegio a un lector de informes para conocer los campos de políticas y Deny explícito. Esta VM nueva prepara default para la administración y reader para el trabajo. Trabaja en /home/labex/project y compara la política almacenada con las lecturas reales en AWS View.

Relación con las certificaciones

Certificación Tarea del examen Práctica
Solutions Architect – Associate (SAA-C03) Tarea 1.1 Diagnóstico de autorización y verificación de límites de acceso.
Developer – Associate (DVA-C02) Tarea 2.1 Diagnóstico de autorización y verificación de límites de acceso.
CloudOps Engineer – Associate (SOA-C03) Tarea 4.1 Diagnóstico de autorización y verificación de límites de acceso.
Security – Specialty (SCS-C03) Tarea 4.2 Práctica de fundamentos: Diagnóstico de autorización y verificación de límites de acceso.
Data Engineer – Associate (DEA-C01) Tarea 4.2 Práctica de fundamentos: Diagnóstico de autorización y verificación de límites de acceso.

Descripción general del laboratorio

Diagrama conceptual: Inspecciona el llamador, la acción, el ARN completo del objeto y el Deny coincidente; después repara y vuelve a probar solo la lectura necesaria de S3.

Confirma el llamante y corrige la acción solicitada

En este paso, distinguirás un error de identidad de una discrepancia de política y después corregirás la acción Allow. El mismo comando con credenciales diferentes puede producir un resultado de autorización distinto.

La política migrada tiene varias discrepancias. Corregir un campo puede dejar la solicitud denegada por otro campo o por el Deny explícito. Tras cada cambio, inspecciona el documento almacenado y repite la misma solicitud del lector; que AccessDenied no cambie no demuestra por sí solo si esa corrección era correcta.

Orden de investigación del fallo del informe en este laboratorio.

cd /home/labex/project
aws sts get-caller-identity --query Arn --output text
aws sts get-caller-identity --profile reader --query Arn --output text

Espera user/iam05-operator y user/report-reader. El trabajo de informes utiliza el lector, no el operador. Confirma que el objeto existe utilizando el operador y después reproduce el fallo del trabajo como lector.

aws s3api get-object \
  --bucket labex-iam05-reports \
  --key reports/today.txt operator-report.txt
cat operator-report.txt
aws s3api get-object --profile reader --bucket labex-iam05-reports --key reports/today.txt reader-before.txt || true

El operador recibe Daily orders: 145; el lector recibe AccessDenied. Una clave ausente o un error de conexión requerirían otra investigación. || true permite que esta solicitud fallida esperada termine en una secuencia pegada.

Enumera las políticas del lector y lee el documento almacenado. Estas son consultas del operador sobre la identidad del trabajo, no intentos de prestar el acceso del operador al trabajo.

aws iam list-user-policies --user-name report-reader
aws iam get-user-policy \
  --user-name report-reader \
  --policy-name LabReport \
  --query PolicyDocument

El Allow indica s3:ListBucket, mientras el error indica GetObject. ListBucket enumera nombres de objetos y utiliza un ARN de bucket; no descarga bytes de objetos. Cambia únicamente Action del Allow a GetObject, manteniendo Resource y Deny actuales para diagnosticar la siguiente discrepancia por separado.

cat > repair-policy.json <<'JSON'
{"Version":"2012-10-17","Statement":[
  {"Effect":"Allow","Action":"s3:GetObject","Resource":"arn:aws:s3:::labex-iam05-reports"},
  {"Effect":"Deny","Action":"s3:GetObject","Resource":"arn:aws:s3:::labex-iam05-reports/reports/*"}
]}
JSON
aws iam put-user-policy \
  --user-name report-reader \
  --policy-name LabReport \
  --policy-document file://repair-policy.json
aws iam get-user-policy \
  --user-name report-reader \
  --policy-name LabReport \
  --query PolicyDocument
aws s3api get-object --profile reader --bucket labex-iam05-reports --key reports/today.txt reader-action-fix.txt || true

Todavía devuelve AccessDenied. Action ahora es correcto, pero corregir un campo no garantiza que se superen todas las comprobaciones aplicables.

Haz coincidir el ARN completo del objeto

En este paso, repararás Resource conservando la declaración de denegación. GetObject se aplica a un ARN de objeto, que incluye su clave. El ARN de bucket arn:aws:s3:::labex-iam05-reports no coincide con arn:aws:s3:::labex-iam05-reports/reports/today.txt.

Reemplaza Resource del Allow por el ARN exacto del objeto de hoy. No utilices * para abarcar buckets o claves; el trabajo tiene una entrada requerida.

cat > repair-policy.json <<'JSON'
{"Version":"2012-10-17","Statement":[
  {"Effect":"Allow","Action":"s3:GetObject","Resource":"arn:aws:s3:::labex-iam05-reports/reports/today.txt"},
  {"Effect":"Deny","Action":"s3:GetObject","Resource":"arn:aws:s3:::labex-iam05-reports/reports/*"}
]}
JSON
aws iam put-user-policy \
  --user-name report-reader \
  --policy-name LabReport \
  --policy-document file://repair-policy.json
aws iam get-user-policy \
  --user-name report-reader \
  --policy-name LabReport \
  --query PolicyDocument
aws s3api get-object --profile reader --bucket labex-iam05-reports --key reports/today.txt reader-resource-fix.txt || true

Espera AccessDenied de nuevo. Ahora el Allow coincide tanto con Action como con Resource, así que inspecciona la declaración restante. Su Deny también coincide con GetObject en reports/*, incluido hoy. Un Deny explícito coincidente tiene prioridad sobre el Allow; mover el Allow más adelante en el documento no puede anularlo.

Repara el Deny sin ampliar el acceso

En este paso, corregirás el alcance del Deny migrado y confirmarás la reparación mínima. La protección prevista protege datos privados; no debería denegar la entrada de informes. Conserva el Allow exacto de lectura y limita el Deny a private/* en lugar de eliminar la protección o añadir concesiones más amplias.

cat > repair-policy.json <<'JSON'
{"Version":"2012-10-17","Statement":[
  {"Effect":"Allow","Action":"s3:GetObject","Resource":"arn:aws:s3:::labex-iam05-reports/reports/today.txt"},
  {"Effect":"Deny","Action":"s3:GetObject","Resource":"arn:aws:s3:::labex-iam05-reports/private/*"}
]}
JSON
aws iam put-user-policy \
  --user-name report-reader \
  --policy-name LabReport \
  --policy-document file://repair-policy.json
aws s3api get-object \
  --profile reader \
  --bucket labex-iam05-reports \
  --key reports/today.txt today.txt
cat today.txt

Espera Daily orders: 145. Prueba los recursos cercanos como el mismo lector; la reparación completa no debe ampliar su alcance.

aws s3api get-object --profile reader --bucket labex-iam05-reports --key reports/yesterday.txt yesterday-denied.txt || true
aws s3api get-object --profile reader --bucket labex-iam05-reports --key private/payroll.txt payroll-denied.txt || true
aws s3api get-object --profile reader --bucket labex-iam05-reference --key reference.txt reference-denied.txt || true

Las tres deben devolver AccessDenied. Una concesión de lectura requerida tampoco debe autorizar escrituras. Intenta el reemplazo proporcionado y después verifica que los bytes del informe original permanecen sin cambios.

aws s3api put-object --profile reader --bucket labex-iam05-reports --key reports/today.txt --body upload.txt || true
aws s3api get-object \
  --profile reader \
  --bucket labex-iam05-reports \
  --key reports/today.txt today.txt
cat today.txt
aws iam get-user-policy \
  --user-name report-reader \
  --policy-name LabReport \
  --query PolicyDocument

Espera AccessDenied de PutObject y Daily orders: 145 sin cambios. AWS View ahora muestra hoy como Readable y los demás recursos como Denied. La inspección de la política explica la reparación; las solicitudes reales demuestran su efecto.

La reparación mínima de la política restaura únicamente la lectura requerida. Ejemplo: hoy es legible con sus bytes originales, mientras ayer, los datos privados y la referencia siguen siendo rechazados. La política almacenada conserva el Deny privado y el Allow exacto del informe.

Revoca la reparación y limpia los datos propios

En este paso, eliminarás LabReport y demostrarás que el acceso se retira mientras el informe todavía existe. Después elimina únicamente el bucket de informes propio y sus tres claves.

aws iam delete-user-policy --user-name report-reader --policy-name LabReport
aws iam list-user-policies --user-name report-reader
aws s3api get-object --profile reader --bucket labex-iam05-reports --key reports/today.txt revoked.txt || true

Espera una lista de políticas vacía y AccessDenied. La revocación de políticas y la eliminación de datos son comprobaciones independientes. Conserva el bucket de referencia sin cambios.

aws s3api delete-object --bucket labex-iam05-reports --key reports/today.txt
aws s3api delete-object --bucket labex-iam05-reports --key reports/yesterday.txt
aws s3api delete-object --bucket labex-iam05-reports --key private/payroll.txt
aws s3api list-objects-v2 --bucket labex-iam05-reports

Comprueba KeyCount: 0 en una respuesta autenticada correcta, sin entradas restantes de objetos en Contents.

aws s3api delete-bucket --bucket labex-iam05-reports
aws s3api list-buckets --query 'Buckets[].Name'
aws s3api get-object --bucket labex-iam05-reference --key reference.txt reference.txt
cat reference.txt

Solo queda el bucket de referencia con Platform reference: keep. Los fallos del servicio no demuestran la eliminación. Las identidades preparadas se retiran cuando termina el entorno; la política del trabajo y los datos propios del ejercicio se han eliminado.

Resumen

Confirmaste el llamante, comparaste la operación fallida con Action del Allow, hiciste coincidir el ARN completo del objeto y corregiste un Deny explícito que se superponía. Los fallos intermedios ayudaron a identificar los obstáculos restantes. El lector final solo podía leer su informe requerido y no podía escribirlo ni leer datos ajenos a la tarea. Revocaste la concesión reparada y completaste la limpieza delimitada. Utiliza la misma identidad y prueba tanto solicitudes correctas como prohibidas al diagnosticar el acceso.

Para ampliar este tema, consulta la referencia de AWS: Diagnóstico de errores de acceso denegado IAM.