Wie kann ich ressourcenbasierte Richtlinien mit AWS Lambda verwenden, um Berechtigungen für AWS-Services zu erteilen?

Letzte Aktualisierung: 27.09.2021

Ich möchte ressourcenbasierte Richtlinien mit AWS Lambda verwenden, um Berechtigungen für AWS-Services zu erteilen.

Kurzbeschreibung

Sie können AWS Command Line Interface (AWS CLI) mit Lambda verwenden, um AWS-Services mithilfe ressourcenbasierter Richtlinien Berechtigungen zu erteilen. Weitere Informationen finden Sie unter Verwendung ressourcenbasierter Richtlinien für AWS Lambda.

Auflösung

Im folgenden Beispiel wird die Berechtigung für EventBridge hinzugefügt und überprüft, ob die Lambda-Funktion die ressourcenbasierte Richtlinie aufruft.

Hinweis:

Vergewissern Sie sich, dass für die Lambda-Funktion keine Ressourcenrichtlinie konfiguriert ist

Einige AWS-Services wie EventBridge erstellen eine ressourcenbasierte Richtlinie für die Lambda-Funktion. Stellen Sie mit dem AWS-CLI-Befehl get-policy sicher, dass die ressourcenbasierte Richtlinie keine Berechtigung für EventBridge hat, ähnlich dem folgenden:

aws lambda get-policy --region your-region --function-name your-function

An error occurred (ResourceNotFoundException) when calling the GetPolicy operation: The resource you requested does not exist.

Dieser Fehler bestätigt, dass für die Lambda-Funktion keine ressourcenbasierte Richtlinie konfiguriert ist.

Berechtigungen für EventBridge hinzufügen

Führen Sie den AWS-CLI-Befehl add-permission aus, um eine Lambda-Funktion ähnlich der folgenden aufzurufen:

aws lambda add-permission --region your-region --function-name your-function --statement-id "your-event-permission" --action "lambda:InvokeFunction" --principal "events.amazonaws.com" --source-arn "arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event"

{
    "Statement": "{\"Sid\":\"your-event-permission\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"events.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:your-region:xxxxxxxxxxxxx:function:your-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event\"}}}"
}

Überprüfen Sie die Berechtigungen für die ressourcenbasierte Richtlinie der Lambda-Funktion

Führen Sie den AWS-CLI-Befehl get-policy erneut ähnlich wie folgt aus:

aws lambda get-policy --region your-region --function-name your-function

{
  "Version": "2012-10-17",
  "Id": "default",
  "Statement": [
    {
      "Sid": "your-event-permission",
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:your-region:xxxxxxxxxxxxx:function:your-function",
      "Condition": {
        "ArnLike": {
          "AWS:SourceArn": "arn:aws:events:your-region:xxxxxxxxxxxxx:rule/your-event"
        }
      }
    }
  ]
}

(Optional) Entfernen Sie die Berechtigung aus einer ressourcenbasierten Richtlinie für Lambda-Funktionen

Wenn Sie keinen AWS-Service mehr benötigen, um die Lambda-Funktion auszulösen, können Sie den AWS-CLI-Befehl remove-permission ähnlich wie folgt ausführen:

aws lambda remove-permission --region your-region --function-name your-function --statement-id "your-event-permission"

Hinweis: Das ressourcenbasierte Richtlinienkontingent der Lambda-Funktion beträgt 20 KB. Weitere Informationen finden Sie unter Lambda-Kontingente.