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 erweiternAWS 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:
- Identität überprüfen:
aws sts get-caller-identity - Überprüfen Sie die zugeordneten Richtlinien: `
aws iam list-attached-role-policies --role-name MyRole` - 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 - Prüfen Sie SCPs und Berechtigungsgrenzen auf explizite Verweigerungen
- 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
---
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)
iam installieren
Laden Sie die Skill-Dateien herunter und entpacken Sie sie in Ihr Verzeichnis „.claude/skills/“.
ZIP herunterladenKlonen 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





Heim
