Option

Verwalten Sie AWS Identity and Access Management für Benutzer, Rollen, Richtlinien und Berechtigungen. Erstellen Sie IAM-Richtlinien, konfigurieren Sie den kontoübergreifenden Zugriff, richten Sie Dienstrollen ein, beheben Sie Berechtigungsfehler und setzen Sie das Prinzip der geringsten Berechtigungen durch.

...Alle erweitern
34
Zeit aktualisiert 21. September 2026

AWS IAM

AWS Identity and Access Management (IAM) ermöglicht eine sichere Zugriffskontrolle auf AWS-Dienste und -Ressourcen. „ IAM “ bildet die Grundlage für die AWS-Sicherheit – jeder AWS-API-Aufruf wird über „ IAM “ authentifiziert und autorisiert.

Inhaltsverzeichnis

  • Kernkonzepte
  • Häufige Muster
  • CLI-Referenz
  • Bewährte Verfahren
  • Fehlerbehebung
  • Referenzen

Grundlegende Konzepte

Prinzipale

Entitäten, die Anfragen an AWS stellen können: „ IAM “-Benutzer, Rollen, Verbundbenutzer und Anwendungen.

Richtlinien

JSON-Dokumente, die Berechtigungen definieren. Typen:

  • Identitätsbasiert: Sind mit Benutzern, Gruppen oder Rollen verknüpft
  • Ressourcenbasiert: An Ressourcen (S3-Buckets, SQS-Warteschlangen) gebunden
  • Berechtigungsgrenzen: Maximale Berechtigungen, über die eine Identität verfügen kann
  • Service-Control-Richtlinien (SCPs): Organisationsweite Beschränkungen

Rollen

Identitäten mit Berechtigungen, die von vertrauenswürdigen Entitäten übernommen werden können. Keine permanenten Anmeldedaten – es werden temporäre Sicherheitstoken verwendet.

Vertrauensbeziehungen

Legen fest, welche Prinzipale eine Rolle übernehmen können. Werden über die Vertrauensrichtlinie der Rolle konfiguriert.

Häufige Muster

Erstellen einer Service-Rolle für Lambda

AWS-CLI:

# Vertrauensrichtlinie erstellen
cat > trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "Service": "lambda.amazonaws.com" },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF

# Die Rolle erstellen
aws iam create-role \
  --role-name MyLambdaRole \
  --assume-role-policy-document file://trust-policy.json

# Eine verwaltete Richtlinie zuweisen
aws iam attach-role-policy \
  --role-name MyLambdaRole \
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

boto3:

import boto3
import json

iam = boto3.client('iam')

trust_policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"Service": "lambda.amazonaws.com"},
            "Action": "sts:AssumeRole"
        }
    ]
}

# Rolle erstelleniam.create_role(
    RoleName='MyLambdaRole',
    AssumeRolePolicyDocument=json.dumps(trust_policy)
)

# Verwaltete Richtlinie zuweisen
iam.attach_role_policy(
    RoleName='MyLambdaRole',
    PolicyArn='arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'
)

Benutzerdefinierte Richtlinie mit dem Prinzip der geringsten Berechtigungen erstellen

cat > policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query"
      ],
      "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MyTable"
    }
  ]
}
EOF

aws iam create-policy \
  --policy-name MyDynamoDBPolicy \
  --policy-document file://policy.json

Übernahme einer kontoübergreifenden Rolle

# In Konto B (vertrauenswürdiges Konto) eine Rolle mit Vertrauensbeziehung zu Konto A erstellen
cat > cross-account-trust.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111111111111:root" },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": { "sts:ExternalId": "unique-external-id" }
      }
    }
  ]
}
EOF

# Übernehmen Sie die Rolle von Konto A
aws sts assume-role \
  --role-arn arn:aws:iam::222222222222:role/CrossAccountRole \
  --role-session-name MySession \
  --external-id unique-external-id

CLI-Referenz

Wichtige Befehle

Befehl Beschreibung
aws iam create-role Eine neue „ IAM “-Rolle erstellen
aws iam create-policy Eine vom Kunden verwaltete Richtlinie erstellen
aws iam attach-role-policy Eine verwaltete Richtlinie einer Rolle zuweisen
aws iam put-role-policy Eine Inline-Richtlinie zu einer Rolle hinzufügen
aws iam get-role Rolendetails abrufen
aws iam list-roles Alle Rollen auflisten
aws iam simulate-principal-policy Richtlinienberechtigungen testen
aws sts assume-role Eine Rolle übernehmen und temporäre Anmeldedaten abrufen
aws sts get-caller-identity Aktuelle Identität abrufen

Nützliche Flags

  • --query: Ausgabe mit JMESPath filtern
  • --output table: Für Menschen lesbare Ausgabe
  • --no-cli-pager: Pager für Skripte deaktivieren

Bewährte Vorgehensweisen

Sicherheit

  • Verwenden Sie niemals das Root-Konto für alltägliche Aufgaben
  • Aktivieren Sie MFA für alle menschlichen Benutzer
  • Verwenden Sie Rollen anstelle von Langzeit-Zugriffsschlüsseln
  • Wenden Sie das Prinzip der geringsten Berechtigungen an – erteilen Sie nur die erforderlichen Berechtigungen
  • Verwenden Sie Bedingungen, um den Zugriff nach IP-Adresse, Zeit oder MFA einzuschränken
  • Wechseln Sie Anmeldedaten regelmäßig
  • Verwenden Sie Berechtigungsgrenzen für die delegierte Verwaltung

Richtlinienentwurf

  • Beginnen Sie mit von AWS verwalteten Richtlinien und passen Sie diese bei Bedarf an
  • Verwenden Sie Richtlinienvariablen (${aws:username}) für dynamische Richtlinien
  • Bevorzugen Sie explizite Verweigerungen für sensible Aktionen
  • Gruppieren Sie verwandte Berechtigungen logisch

Überwachung

  • Aktivieren Sie CloudTrail für die API-Überwachung
  • Verwenden Sie den „IAM Access Analyzer“, um zu freizügige Richtlinien zu identifizieren
  • Überprüfen Sie regelmäßig die Berichte zu Anmeldedaten
  • Richten Sie Warnmeldungen zur Nutzung des Root-Kontos ein

Fehlerbehebung

Fehler „Zugriff verweigert“

Symptom: „AccessDeniedException“ oder „UnauthorizedAccess“

Schritte zur Fehlerbehebung:

  1. Identität überprüfen: aws sts get-caller-identity
  2. Überprüfen Sie die zugeordneten Richtlinien: ` aws iam list-attached-role-policies --role-name MyRole`
  3. Aktion simulieren:
    aws iam simulate-principal-policy \
      --policy-source-arn arn:aws:iam::123456789012:role/MyRole \
      --action-names dynamodb:GetItem \
      --resource-arns arn:aws:dynamodb:us-east-1:123456789012:table/MyTable
    
    
  4. Prüfen Sie SCPs und Berechtigungsgrenzen auf explizite Verweigerungen
  5. Stellen Sie sicher, dass ressourcenbasierte Richtlinien dem Prinzipal die Berechtigung erteilen

Rolle kann nicht übernommen werden

Symptom: „AccessDenied“ beim Aufruf von „AssumeRole“

Ursachen:

  • Die Vertrauensrichtlinie umfasst den aufrufenden Prinzipal nicht
  • Fehlende Berechtigung „sts:AssumeRole“ beim Aufrufer
  • „ExternalId“-Diskrepanz (bei kontoübergreifenden Rollen)
  • Die Sitzungsdauer überschreitet das Maximum

Behebung: Überprüfen und aktualisieren Sie die Vertrauensbeziehung der Rolle.

Größenbeschränkungen für Richtlinien

  • Verwaltete Richtlinie: 6.144 Zeichen
  • Inline-Richtlinie: 2.048 Zeichen (Benutzer), 10.240 Zeichen (Rolle/Gruppe)
  • Vertrauensrichtlinie: 2.048 Zeichen

Lösung: Verwenden Sie mehrere Richtlinien, verweisen Sie auf Ressourcen über Präfixe/Platzhalter oder nutzen Sie eine tagbasierte Zugriffskontrolle.

Referenzen

  • IAM Benutzerhandbuch
  • IAM API-Referenz
  • IAM CLI-Referenz
  • Richtlinienreferenz
  • boto3 IAM
Auf GitHub ansehen
---
name: iam
description: Manage AWS Identity and Access Management for users, roles, policies, and permissions. Create IAM policies, configure cross-account access, set up service roles, troubleshoot permission errors, and enforce least-privilege security.
---

# AWS IAM

AWS Identity and Access Management (IAM) enables secure access control to AWS services and resources. IAM is foundational to AWS security—every AWS API call is authenticated and authorized through IAM.

## Table of Contents

- [Core Concepts](#core-concepts)
- [Common Patterns](#common-patterns)
- [CLI Reference](#cli-reference)
- [Best Practices](#best-practices)
- [Troubleshooting](#troubleshooting)
- [References](#references)

## Core Concepts

### Principals

Entities that can make requests to AWS: IAM users, roles, federated users, and applications.

### Policies

JSON documents defining permissions. Types:
- **Identity-based**: Attached to users, groups, or roles
- **Resource-based**: Attached to resources (S3 buckets, SQS queues)
- **Permission boundaries**: Maximum permissions an identity can have
- **Service control policies (SCPs)**: Organization-wide limits

### Roles

Identities with permissions that can be assumed by trusted entities. No permanent credentials—uses temporary security tokens.

### Trust Relationships

Define which principals can assume a role. Configured via the role's trust policy.

## Common Patterns

### Create a Service Role for Lambda

**AWS CLI:**

```bash
# Create the trust policy
cat > trust-policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "Service": "lambda.amazonaws.com" },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOF

# Create the role
aws iam create-role \
  --role-name MyLambdaRole \
  --assume-role-policy-document file://trust-policy.json

# Attach a managed policy
aws iam attach-role-policy \
  --role-name MyLambdaRole \
  --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
```

**boto3:**

```python
import boto3
import json

iam = boto3.client('iam')

trust_policy = {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {"Service": "lambda.amazonaws.com"},
            "Action": "sts:AssumeRole"
        }
    ]
}

# Create role
iam.create_role(
    RoleName='MyLambdaRole',
    AssumeRolePolicyDocument=json.dumps(trust_policy)
)

# Attach managed policy
iam.attach_role_policy(
    RoleName='MyLambdaRole',
    PolicyArn='arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole'
)
```

### Create Custom Policy with Least Privilege

```bash
cat > policy.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:PutItem",
        "dynamodb:Query"
      ],
      "Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/MyTable"
    }
  ]
}
EOF

aws iam create-policy \
  --policy-name MyDynamoDBPolicy \
  --policy-document file://policy.json
```

### Cross-Account Role Assumption

```bash
# In Account B (trusted account), create role with trust for Account A
cat > cross-account-trust.json << 'EOF'
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": { "AWS": "arn:aws:iam::111111111111:root" },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": { "sts:ExternalId": "unique-external-id" }
      }
    }
  ]
}
EOF

# From Account A, assume the role
aws sts assume-role \
  --role-arn arn:aws:iam::222222222222:role/CrossAccountRole \
  --role-session-name MySession \
  --external-id unique-external-id
```

## CLI Reference

### Essential Commands

| Command | Description |
|---------|-------------|
| `aws iam create-role` | Create a new IAM role |
| `aws iam create-policy` | Create a customer managed policy |
| `aws iam attach-role-policy` | Attach a managed policy to a role |
| `aws iam put-role-policy` | Add an inline policy to a role |
| `aws iam get-role` | Get role details |
| `aws iam list-roles` | List all roles |
| `aws iam simulate-principal-policy` | Test policy permissions |
| `aws sts assume-role` | Assume a role and get temporary credentials |
| `aws sts get-caller-identity` | Get current identity |

### Useful Flags

- `--query`: Filter output with JMESPath
- `--output table`: Human-readable output
- `--no-cli-pager`: Disable pager for scripting

## Best Practices

### Security

- **Never use root account** for daily tasks
- **Enable MFA** for all human users
- **Use roles** instead of long-term access keys
- **Apply least privilege** — grant only required permissions
- **Use conditions** to restrict access by IP, time, or MFA
- **Rotate credentials** regularly
- **Use permission boundaries** for delegated administration

### Policy Design

- Start with AWS managed policies, customize as needed
- Use policy variables (`${aws:username}`) for dynamic policies
- Prefer explicit denies for sensitive actions
- Group related permissions logically

### Monitoring

- Enable **CloudTrail** for API auditing
- Use **IAM Access Analyzer** to identify overly permissive policies
- Review **credential reports** regularly
- Set up alerts for root account usage

## Troubleshooting

### Access Denied Errors

**Symptom:** `AccessDeniedException` or `UnauthorizedAccess`

**Debug steps:**
1. Verify identity: `aws sts get-caller-identity`
2. Check attached policies: `aws iam list-attached-role-policies --role-name MyRole`
3. Simulate the action:
   ```bash
   aws iam simulate-principal-policy \
     --policy-source-arn arn:aws:iam::123456789012:role/MyRole \
     --action-names dynamodb:GetItem \
     --resource-arns arn:aws:dynamodb:us-east-1:123456789012:table/MyTable
   ```
4. Check for explicit denies in SCPs or permission boundaries
5. Verify resource-based policies allow the principal

### Role Cannot Be Assumed

**Symptom:** `AccessDenied` when calling `AssumeRole`

**Causes:**
- Trust policy doesn't include the calling principal
- Missing `sts:AssumeRole` permission on the caller
- ExternalId mismatch (for cross-account roles)
- Session duration exceeds maximum

**Fix:** Review and update the role's trust relationship.

### Policy Size Limits

- Managed policy: 6,144 characters
- Inline policy: 2,048 characters (user), 10,240 characters (role/group)
- Trust policy: 2,048 characters

**Solution:** Use multiple policies, reference resources by prefix/wildcard, or use tags-based access control.

## References

- [IAM User Guide](https://docs.aws.amazon.com/IAM/latest/UserGuide/)
- [IAM API Reference](https://docs.aws.amazon.com/IAM/latest/APIReference/)
- [IAM CLI Reference](https://docs.aws.amazon.com/cli/latest/reference/iam/)
- [Policy Reference](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)
- [boto3 IAM](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iam.html)

Alle Dateien

3 Dateien

iam installieren

Laden Sie die Skill-Dateien herunter und entpacken Sie sie in Ihr Verzeichnis „.claude/skills/“.

ZIP herunterladen

Klonen Sie das Repository und kopieren Sie die Skill-Dateien in Ihr Projekt.

git clone https://github.com/itsmostafa/aws-agent-skills/tree/main/skills/iam # Copy SKILL.md to your .claude/skills/ directory

Kopieren Kopieren
Schnelle Einrichtung: Kopiere den Skill-Ordner nach .claude/skills/ Claude erkennt den Skill automatisch und nutzt ihn.

Ähnliche Skills

gmgn-portfolio
Zeit aktualisiert 1. Juli 2026
device-integrity
Zeit aktualisiert 29. Juni 2026
zeroize-audit
Zeit aktualisiert 1. Juli 2026
flutter-use-http-package
Zeit aktualisiert 30. Juni 2026
OR