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 ein Amazon-CloudWatch-Ereignis hinzugefügt und bestätigt, dass 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 CloudWatch 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 das CloudWatch-Ereignis besitzt, ähnlich der 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 das CloudWatch-Ereignis 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.