Wie kann ich den Zugriff auf Lambda-Funktionen granular gewähren?

Lesedauer: 8 Minute
0

Ich möchte Lese- und Schreibzugriff auf eine bestimmte AWS Lambda-Funktion gewähren, die durch ihren Amazon-Ressourcennamen (ARN) identifiziert wird. Wie kann ich den Zugriff auf Lambda-Funktionen granular gewähren?

Kurzbeschreibung

Sie können die Berechtigungen für Lambda-Funktionen mithilfe von AWS Identity and Access Management (IAM)-RIchtlinien konfigurieren, um:

  • Erstellen einer Lambda-Funktion
  • Löschen einer Lambda-Funktion
  • Anzeigen der Konfigurationsdetails einer Lambda-Funktion
  • Modifizieren einer Lambda-Funktion
  • Aufrufen einer Lambda-Funktion
  • Eine Lambda-Funktion überwachen

In den folgenden Richtlinienbeispielen sind Lambda-API-Aktionen, die Berechtigungen auf Ressourcenebene unterstützen, auf eine bestimmte Lambda-Funktion beschränkt, die im ****Resourcenelement der jeweiligen Anweisung aufgeführt ist. Ein spezifischer Funktionsname wird im ****Bedingungselement für API-Aktionen verwendet, die diese Elemente unterstützen.

API-Aktionen, die keine Berechtigungen auf Ressourcenebene unterstützen, erfordern einen Platzhalter (“*** **„) im ****Resourcenelement und können keine Lambda-Service-spezifischen Bedingungsschlüssel anwenden. Weitere Informationen zu IAM-Aktionen, Ressourcen und Bedingungen, die von Lambda unterstützt werden, finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für AWS Lambda.

Der Wert des ****Resourcenelements einer Anweisung verwendet die ARN, um die Ressourcen zu identifizieren, für die diese Anweisung gilt. Wenn die Aktion zum Beispiel Invoke lautet, ist die Ressource eine Funktions-ARN. IAM gleicht diese ARN mit der ARN der Funktion ab, die durch die Parameter FunctionName und Qualifier einer Invoke-Anforderung identifiziert wird. Weitere Informationen finden Sie unter AWS Lambda-Funktionsversionen.

Hinweis: Wenn Sie mehrere Versionen und Aliasname verwenden, müssen Sie möglicherweise „arn:aws:lambda:region:accountID:Function:Function_name:*“ in das Ressourcenelement aufnehmen.

Behebung

Erforderliche Berechtigungen zum Erstellen einer Lambda-Funktion

Hinweis: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS CLI-Version verwenden.

Zum Erstellen einer Lambda-Funktion über die AWS-Command Line Interface (AWS CLI) oder ein SDK sind die beiden Berechtigung Lambda:createFunction und iam:PassRole erforderlich. Beispiele für Richtlinien finden Sie unter Identitätsbasierte IAM-Richtlinien für AWS Lambda. Die folgende Richtlinie ermöglicht es dem API-Aufrufer, eine Lambda-Funktion zu erstellen, die IAM-Rolle als Lambda-Ausführungsrolle für die Funktion zu übergeben und dann den Code von Ihrem lokalen Computer hochzuladen:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "PermissionToCreateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": [
        "arn:aws:lambda:region:AccountID:function:function_name"
      ]
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AccountID:role/role_name"
    }
  ]
}

Hinweis: Aktualisieren Sie die Richtlinie so, dass sie Ihre relevante Region, Konto-ID, Funktionsname, ARN usw. enthält.

Wenn Sie den Code von einem Amazon Simple Storage Service (Amazon S3)-Bucket hochladen, fügen Sie der vorhandenen IAM-Richtlinie eine Richtlinie ähnlich der folgenden hinzu, um die erforderlichen Berechtigungen für Amazon S3 zu gewähren:

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

Hinweis: Aktualisieren Sie die Richtlinie, um Ihre relevanten S3-Bucket und Dateinamen enthält.

Da der Code nicht bereitgestellt werden kann, wenn die Funktion in der Lambda-Konsole erstellt wird, sind API-Berechtigungen erforderlich, z.B. API-Aktionen auf Leseebene und die Berechtigung zum Anzeigen und Aktualisieren der Funktion. Fügen Sie eine Richtlinie ähnlich der folgenden hinzu, um diese Berechtigungen zu gewähren:

{
  "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:UpdateFunctionCode"
      ],
      "Resource": [
        "arn:aws:lambda:region:AccountID:function:function_name"
      ]
    },
    {
      "Sid": "PermissionToListExistingRoles",
      "Effect": "Allow",
      "Action": [
        "iam:ListRoles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AccountID:role/role_name"
    }
  ]
}

Hinweis: Aktualisieren Sie die Richtlinie so, dass sie Ihre relevante Region, Konto-ID, Funktionsname, ARN usw. enthält.

Um eine IAM-Rolle während des Erstellungsprozesses der Lambda-Funktion zu erstellen, fügen Sie zusätzliche IAM-Berechtigungen ähnlich wie die folgenden hinzu:

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

Erforderliche Berechtigungen zum Löschen einer Lambda-Funktion

Um eine Lambda-Funktion über die AWS-CLI oder ein SDK zu löschen, fügen Sie Berechtigungen ähnlich der folgenden hinzu:

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

Hinweis: Aktualisieren Sie die Richtlinie so, dass sie Ihre relevante Region, Konto-ID, Funktionsname, ARN usw. enthält.

Um eine Lambda-Funktion über die Lambda-Konsole zu löschen, fügen Sie 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:region:AccountID:function:function_name"
      ]
    }
  ]
}

Hinweis: Aktualisieren Sie die Richtlinie so, dass sie Ihre relevante Region, Konto-ID, Funktionsname, ARN usw. enthält.

Erforderliche Berechtigungen zum Anzeigen der Konfigurationsdetails einer Lambda-Funktion

Um einem Benutzer die Berechtigung zum Anzeigen der Konfigurationsdetails einer Lambda-Funktion zu erteilen, fügen Sie Berechtigungen ähnlich der folgenden hinzu:

Hinweis: Je nach dem Grad des Lesezugriffs, den Sie gewähren möchten, müssen Sie möglicherweise alle oder eine Teilmenge der folgenden Berechtigungen gewähren, wenn Sie die AWS CLI oder ein SDK verwenden.

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

Hinweis: Aktualisieren Sie die Richtlinie so, dass sie Ihre relevante Region, Konto-ID, Funktionsname, ARN usw. enthält.

Um die Konfigurationsdetails einer Funktion mithilfe der Lambda-Konsole anzuzeigen, fügen Sie Berechtigungen wie die folgenden hinzu:

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

Die Lambda-Konsole verwendet das Tagging von Lambda-Funktionen, so dass Sie Lambda-Funktionen nach Tags filtern können. Um den AWS Tagging Service zu nutzen, fügen Sie Berechtigungen wie die folgenden hinzu:

...
{
  "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 IAM-Rolle der Funktion Zugriff hat. Um diese Details anzuzeigen, fügen Sie Berechtigungen wie die folgenden hinzu:

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

Hinweis: Je nach Ihren Anforderungen und den in Ihre Lambda-Funktion integrierten Services müssen Sie möglicherweise zusätzliche Berechtigungen für andere AWS-Services erteilen. Weitere Informationen finden Sie unter AWS Lambda-Berechtigungen.

Erforderliche Berechtigungen zur Änderung einer Lambda-Funktion

Um einem Benutzer die Berechtigung zum Ändern einer Lambda-Funktion zu erteilen, fügen Sie Berechtigungen wie die folgenden hinzu:

Hinweis: Je nach dem Grad des Schreibzugriffs, den Sie gewähren möchten, müssen Sie möglicherweise alle oder eine Teilmenge der folgenden Berechtigungen gewähren, wenn Sie die AWS CLI oder ein SDK verwenden.

{
  "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"
      ],
      "Resource": "arn:aws:lambda:region:AccountID:function:function_name"
    },
    {
      "Sid": "ActionsWhichSupportCondition",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateEventSourceMapping",
        "lambda:UpdateEventSourceMapping",
        "lambda:DeleteEventSourceMapping"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionArn": "arn:aws:lambda:region:AccountID:function:function_name"
        }
      }
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:UntagResource",
        "lambda:TagResource"
      ],
      "Resource": "*"
    }
  ]
}

Hinweis: Aktualisieren Sie die Richtlinie so, dass sie Ihre relevante Region, Konto-ID, Funktionsname, ARN usw. enthält.

Sie können den Zugriff mit lambda:addPermissionund lambda:removePermission auf einen Principal, der in einer übergebenen Richtlinie enthalten ist, weiter einschränken. Sie können lambda:UpdateEventSourceMapping und lambda:deleteEventSourceMapping auch auf eine bestimmte Ereignisquellenzuordnung beschränken. Weitere Informationen finden Sie unter Identitätsbasierte IAM-Richtlinien für AWS Lambda.

Um einen vom Kunden verwalteten AWS Key Management Service (AWS KMS)-Schlüssel zur Verschlüsselung von Umgebungsvariablen anzugeben, fügen Sie zusätzliche KMS-Berechtigungen hinzu, indem Sie ein IAM-Richtlinien-Snippet ähnlich dem folgenden verwenden:

...
{
  "Sid": "PermissionsForCryptoOperations",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:CreateGrant"
  ],
  "Resource": "arn:aws:kms:region:AccountID:key/keyID"
},
{
  "Sid": "PermissionsToListExistingKeys",
  "Effect": "Allow",
  "Action": [
    "kms:ListKeys",
    "kms:ListAliases"
  ],
  "Resource": "*"
}
...

Hinweis: Aktualisieren Sie die Richtlinie so, dass sie Ihre relevante Region, Konto-ID, Funktionsname, ARN usw. enthält.

Um die Konfigurationen einer Lambda-Funktion über die Lambda-Konsole zu ändern, fügen Sie Berechtigungen wie die folgenden hinzu:

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

Erforderliche Berechtigungen zum Aufrufen einer Lambda-Funktion

Um eine Lambda-Funktion zu Testzwecken manuell über die AWS CLI oder ein SDK aufzurufen, fügen Sie Berechtigungen wie die folgenden hinzu:

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

Hinweis: Aktualisieren Sie die Richtlinie so, dass sie Ihre relevante Region, Konto-ID, Funktionsname, ARN usw. enthält.

Um Lambda-Funktionen mithilfe der Lambda-Konsole aufzulisten, fügen Sie Berechtigungen wie die folgenden hinzu:

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

Um anderen Services den Aufruf einer Lambda-Funktion zu ermöglichen, verwenden Sie ressourcenbasierte Richtlinien für AWS Lambda. Sie können Funktionsrichtlinien verwenden, um den kontoübergreifenden Zugriff auf Lambda-Funktionen ermöglichen. Die folgende Beispielrichtlinie kann verwendet werden, um einem Benutzer von einem anderen AWS-Konto zu erlauben, eine Lambda-Funktion manuell aufzurufen:

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::ExternalAccountID:user/username"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:region:AccountID:function:function_name"
    }
  ]
}

Hinweis: Aktualisieren Sie die Richtlinie so, dass sie Ihre relevante Region, Konto-ID, Funktionsname, ARN usw. enthält.

Für die Überwachung von Lambda-Funktionen erforderliche Berechtigungen

Um Amazon CloudWatch-Metriken in der ****Überwachungsansicht der Lambda-Konsole anzuzeigen, fügen Sie Berechtigungen wie die folgenden hinzu:

{
  "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 Amazon CloudWatch-Berechtigungsreferenz und CloudWatch Logs-Berechtigungsreferenz.