Durch die Nutzung von AWS re:Post stimmt du den AWS re:Post Nutzungsbedingungen

Wie gewähre ich den granularen Zugriff auf Lambda-Funktionen?

Lesedauer: 7 Minute
0

Ich möchte einem Benutzer des AWS Identity and Access Management (IAM, Identitäts- und Zugriffsmanagement) Lese- und Schreibberechtigungen für eine bestimmte AWS Lambda-Funktion gewähren.

Lösung

Verwende IAM-Richtlinien, um Berechtigungen für IAM-Benutzer zum Erstellen, Löschen, Ändern, Aufrufen und Überwachen von Lambda-Funktionen zu konfigurieren und die Konfiguration einer Lambda-Funktion anzuzeigen.

In den folgenden Richtlinienbeispielen sind Lambda-API-Aktionen, die Berechtigungen auf Ressourcenebene unterstützen, auf eine bestimmte Lambda-Funktion beschränkt, die im Element Ressource aufgeführt ist. Du kannst das Element Bedingung in den API-Aktionen verwenden, um die Lambda-Funktion in der IAM-Richtlinie zu identifizieren.

Für API-Aktionen, die keine Berechtigungen auf Ressourcenebene unterstützen, musst du einen Platzhalter (*) im Element Resource verwenden. Du kannst keine Lambda-spezifischen Bedingungsschlüssel anwenden. Weitere Informationen findest du unter Aktionen, Ressourcen und Bedingungsschlüssel für AWS Lambda.

Das Element Resource verwendet einen ARN, um die Ressourcen zu identifizieren, für die die Anweisung gilt. Wenn die Aktion beispielsweise Aufrufen lautet, dann ist der Wert der **Ressource ** ein Funktions-ARN. IAM gleicht den ARN mit dem ARN der Funktion in den Parametern FunctionName und Qualifier der Aufruf-Anforderung ab. Weitere Informationen zu ARNs in verschiedenen Versionen von Lambda findest du unter Versionen verwenden.

Wenn du mehrere Lambda-Versionen verwendest, musst du nicht jeden Lambda-ARN hinzufügen. Füge stattdessen den Platzhalter (*) in das Element Ressourcen ein:

arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME:*

Hinweis: Ersetze AWS_REGION:AWS_ACCOUNT_ID durch deinen Lambda-ARN und LAMBDA_FUNCTION_NAME durch den Namen der Lambda-Funktion.

Ersetze in den folgenden Beispiel-IAM-Richtlinien die folgenden Werte:

  • AWS_ACCOUNT_ID durch deine Konto-ID
  • LAMBDA_FUNCTION_NAME durch den Namen der Lambda-Funktion
  • IAM_USER_NAME durch den IAM-Benutzer, für den du den Lambda-Zugriff gewährst
  • AWS_REGION durch deine AWS-Region
  • KEY_ID durch denen AWS Key Management Service (AWS KMS)-Schlüssel
  • IAM_ROLE_NAME durch deine IAM-Rolle
  • S3_BUCKET_NAME durch den Namen deines Amazon Simple Storage Service (Amazon S3)-Buckets

Berechtigungen zum Erstellen einer Lambda-Funktion

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Um die AWS CLI oder die Lambda-Konsole zum Erstellen einer Lambda-Funktion zu verwenden, benötigst du die Berechtigungen lambda:CreateFunction und iam:PassRole. Beispiele für Richtlinien findest du unter Identitätsbasierte IAM-Richtlinien für Lambda.

Die folgende Beispielrichtlinie ermöglicht es dem API-Aufrufer, eine Lambda-Funktion zu erstellen und die IAM-Rolle als Lambda-Ausführungsrolle für die Funktion zu übergeben:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToCreateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

Wenn du den Lambda-Funktionscode in einem S3-Bucket speicherst, füge eine Richtlinie hinzu, um Amazon S3-Berechtigungen für die IAM-Richtlinie zu gewähren.

Beispiel für eine Richtlinie:

{  "Sid": "PermissionToUploadCodeFromS3",
  "Effect": "Allow",
  "Action": "s3:GetObject",
  "Resource": "arn:aws:s3:::S3_BUCKET_NAME/FileName.zip"
}

Hinweis: Ersetze FileName.zip durch deine .zip-Datei mit Lambda-Funktionscode.

Du musst API-Aktionen und -Berechtigungen auf Lese-Ebene hinzufügen, um die Funktion anzuzeigen und zu aktualisieren.

Beispiel für eine Richtlinie:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionsToCreateAndUpdateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction",
        "lambda:GetFunction",
        "lambda:ListTags"
        "lambda:UpdateFunctionCode"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToListExistingRoles",
      "Effect": "Allow",
      "Action": [
        "iam:ListRoles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

Füge die folgenden IAM-Berechtigungen hinzu, um während der Erstellung der Lambda-Funktion eine IAM-Rolle zu erstellen:

{  "Sid": "PermmissionsToCreateAndUpdateARole",
  "Effect": "Allow",
  "Action": [
    "iam:CreateRole",
    "iam:CreatePolicy",
    "iam:PutRolePolicy",
    "iam:AttachRolePolicy"
  ],
  "Resource": "*"
}

Berechtigungen zum Löschen einer Lambda-Funktion

Füge der IAM-Richtlinie die folgenden Berechtigungen hinzu, um eine Lambda-Funktion zu löschen:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

Um die Lambda-Konsole zum Löschen einer Funktion zu verwenden, füge Lambda-Lesezugriffsberechtigungen ähnlich der folgenden hinzu:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionsToViewFunctionsInConsole",
      "Effect": "Allow",
      "Action": [
        "lambda:ListFunctions",
        "lambda:GetAccountSettings"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToDeleteFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:DeleteFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

Berechtigungen zum Anzeigen der Konfigurationsdetails einer Lambda-Funktion

Damit ein Benutzer die Konfigurationsdetails einer Lambda-Funktion einsehen kann, füge der IAM-Richtlinie die folgenden Berechtigungen hinzu:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:GetFunction",
        "lambda:ListTags",
        "lambda:TagResource",
        "lambda:GetFunctionConfiguration",
        "lambda:GetPolicy",
        "lambda:GetAlias",
        "lambda:ListVersionsByFunction",
        "lambda:ListAliases"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:ListTags",
        "lambda:GetEventSourceMapping",
        "lambda:ListEventSourceMappings"
      ],
      "Resource": "*"
    }
  ]
}

Hinweis: Je nachdem, welchen Lesezugriff du gewähren möchtest, kannst du alle vorherigen Berechtigungen oder nur einige davon hinzufügen. Wenn du Lambda-Ebenen verwendest, kannst du auch die Berechtigungen lambda:GetLayerVersion oder lambda:ListLayerVersions hinzufügen.

Um die Lambda-Konsole zum Anzeigen der Konfigurationsdetails einer Funktion zu verwenden, füge der IAM-Richtlinie die folgenden Berechtigungen hinzu:

{  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}

Die Lambda-Konsole verwendet Tags auf Lambda-Funktionen, mit denen du Lambda-Funktionen nach Tags filtern kannst. Füge der IAM-Richtlinie die folgenden Berechtigungen hinzu, um die Tags zu verwenden:

{  "Sid": "PermissionsToFilterFunctionsByTags",
  "Effect": "Allow",
  "Action": [
     "tag:GetResources"
  ],
  "Resource": "*"
}

Die Lambda-Konsole zeigt Details über die IAM-Rolle an, die mit einer Lambda-Funktion verknüpft ist, sowie über die Ressourcen, auf die diese Rolle der Funktion Zugriff hat. Füge der IAM-Richtlinie die folgenden Berechtigungen hinzu, um die Details anzuzeigen:

{  "Sid": "PermissionsToViewRolesAndPolicies",
  "Effect": "Allow",
  "Action": [
    "iam:GetPolicy",
    "iam:GetPolicyVersion",
    "iam:GetRolePolicy",
    "iam:ListRoles",
    "iam:ListRolePolicies",
    "iam:ListAttachedRolePolicies"
  ],
  "Resource": "*"
}

Wenn du zusätzliche Anforderungen hast, musst du möglicherweise zusätzliche Berechtigungen für andere AWS-Services gewähren.

Berechtigungen zum Ändern einer Lambda-Funktion

Füge der IAM-Richtlinie die folgenden Berechtigungen hinzu, damit ein Benutzer eine Lambda-Funktion ändern kann:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:AddPermission",
        "lambda:RemovePermission",
        "lambda:CreateAlias",
        "lambda:UpdateAlias",
        "lambda:DeleteAlias",
        "lambda:UpdateFunctionCode",
        "lambda:UpdateFunctionConfiguration",
        "lambda:PutFunctionConcurrency",
        "lambda:DeleteFunctionConcurrency",
        "lambda:PublishVersion",
        "lambda:UpdateFunctionEventInvokeConfig",
        "lambda:PutFunctionEventInvokeConfig"
      ],
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    },
    {
      "Sid": "ActionsWhichSupportCondition",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateEventSourceMapping",
        "lambda:UpdateEventSourceMapping",
        "lambda:DeleteEventSourceMapping"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionArn": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
        }
      }
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:UntagResource",
        "lambda:TagResource"
      ],
      "Resource": "*"
    }
  ]
}

Hinweis: Je nachdem, welchen Schreibzugriff du gewähren möchtest, kannst du alle vorherigen Berechtigungen oder nur einige davon hinzufügen.

Um den Zugriff einzuschränken, füge lambda:AddPermission and lambda:RemovePermission zu einem Prinzipal hinzu, der in einer angehängten Richtlinie enthalten ist. Du kannst lambda:UpdateEventSourceMapping und lambda:DeleteEventSourceMapping auch auf eine bestimmte Zuordnung von Ereignisquellen beschränken.

Füge der IAM-Richtlinie die folgenden AWS KMS-Berechtigungen hinzu, um einen vom Kunden verwalteten Schlüssel zum Verschlüsseln von Umgebungsvariablen zu verwenden:

{  "Sid": "PermissionsForCryptoOperations",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:CreateGrant"
  ],
  "Resource": "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/KEY_ID"
},
{
  "Sid": "PermissionsToListExistingKeys",
  "Effect": "Allow",
  "Action": [
    "kms:ListKeys",
    "kms:ListAliases"
  ],
  "Resource": "*"
}

Füge der IAM-Richtlinie die folgenden Berechtigungen hinzu, um die Lambda-Konsole zum Ändern der Konfigurationen einer Lambda-Funktion zu verwenden:

{  "Sid": "PermissionsToViewFunctionsInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings"
  ],
  "Resource": "*"
}

Berechtigungen zum Aufrufen einer Lambda-Funktion

Füge der IAM-Richtlinie die folgenden Berechtigungen hinzu, um eine Lambda-Funktion manuell aufzurufen:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

Füge der IAM-Richtlinie die folgenden Berechtigungen hinzu, um die Lambda-Konsole zum Auflisten von Lambda-Funktionen zu verwenden:

{  "Sid": "PermissionsToViewFunctionsConfigInConsole",
  "Effect": "Allow",
  "Action": [
    "lambda:ListFunctions",
    "lambda:GetAccountSettings",
    "lambda:GetFunction",
    "lambda:ListTags"
  ],
  "Resource": "*"
}

Um anderen Services den Aufruf einer Lambda-Funktion zu ermöglichen, verwende ressourcenbasierte Richtlinien für Lambda. Du kannst Funktionsrichtlinien verwenden, um den kontoübergreifenden Zugriff auf Lambda-Funktionen zu ermöglichen.

Die folgende Beispielrichtlinie erlaubt einem Benutzer von einem anderen AWS-Konto eine Lambda-Funktion manuell aufzurufen:

{  "Version": "2012-10-17",  "Id": "default",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::External_AWS_ACCOUNT_ID:user/IAM_USER_NAME"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

Hinweis: Ersetze External_AWS_ACCOUNT_ID durch das Konto, dem du das Aufrufen der Funktion gewähren möchtest.

Berechtigungen zur Überwachung von Lambda-Funktionen

Füge der IAM-Richtlinie die folgenden Berechtigungen hinzu, um Amazon CloudWatch-Metriken auf der Registerkarte Überwachung der Lambda-Konsole anzuzeigen:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionForCloudWatchMetrics",
       "Effect": "Allow",
       "Action": [
          "cloudwatch:GetMetricStatistics",
          "cloudwatch:GetMetricData"
        ],
        "Resource": "*"
     }
  ]
}

Um Berechtigungen für bestimmte CloudWatch-Metriken und CloudWatch Logs Insights zu erteilen, siehe Referenz für Amazon CloudWatch-Berechtigungen und Referenzen für CloudWatch Logs-Berechtigungen.