Wie erteile ich einer Lambda-Funktion mithilfe einer AWS-SAM-Vorlage IAM-Berechtigungen?

Lesedauer: 4 Minute
0

Ich möchte Berechtigungen für AWS Lambda-Funktionen in meiner AWS Serverless Application Model (AWS SAM)-Anwendung gewähren. Wie definiere ich eine Lambda-Ausführungsrolle mit bereichsbezogenen Berechtigungen in einer AWS-SAM-Vorlage?

Kurzbeschreibung

Um eine Lambda-Ausführungsrolle in einer AWS-SAM-Vorlage zu definieren, können Sie die folgenden AWS::Serverless::Function-Ressourceneigenschaften verwenden:

  • Richtlinien — Ermöglichen es Ihnen, mithilfe vordefinierter Richtlinien, die auf Ihre Lambda-Funktion zugeschnitten werden können, eine neue Ausführungsrolle zu erstellen.
  • Rolle — Ermöglicht es Ihnen, eine AWS Identity and Access Management (IAM)-Rolle zu definieren, die als Ausführungsrolle der Funktion verwendet werden soll.
  • PermissionsBoundary — Ermöglicht es Ihnen, eine IAM-Berechtigungsgrenze für die von Ihnen erstellte Ausführungsrolle festzulegen.

**Hinweis:**Die Eigenschaften Richtlinien und Rollen können nicht zusammen verwendet werden. Die Verwendung der Eigenschaft Rolle ist hilfreich, wenn Ihre Ausführungsrolle Berechtigungen erfordert, die zu spezifisch sind, um vordefinierte Richtlinien zu verwenden.

Behebung

Richtlinien für eine neue Lambda-Ausführungsrolle angeben

Geben Sie für die Eigenschaft Richtlinien eine beliebige Kombination der folgenden Elemente ein:

**Hinweis:**AWS-SAM-Richtlinienvorlagen sind auf bestimmte AWS-Ressourcen beschränkt. In der Tabelle mit Richtlinienvorlagen finden Sie eine Liste der Richtlinienvorlagen und die Berechtigungen, die sie Ihren Lambda-Funktionen gewähren.

Im Folgenden finden Sie einige Beispiel AWS-SAM-YAML-Vorlagen mit definierten Richtlinien:

Beispiel für eine AWS-SAM-YAML-Vorlage mit einer von AWS verwalteten Richtlinie mit dem Namen

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31' b
Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: 's3://my-bucket/function.zip'
      Policies:
      # Give the Lambda service access to poll your DynamoDB Stream
      - AmazonDynamoDBFullAccess

Beispiel für eine AWS-SAM-YAML-Vorlage mit einer definierten AWS-SAM-Richtlinienvorlage (SQSPollerPolicy)

MyFunction:
  Type: 'AWS::Serverless::Function'
  Properties:
    CodeUri: ${codeuri}
    Handler: hello.handler
    Runtime: python2.7
    Policies:
      - SQSPollerPolicy:
          QueueName:
            !GetAtt MyQueue.QueueName

Beispiel für eine AWS-SAM-YAML-Vorlage mit einem definierten Inline-Richtliniendokument

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: 's3://my-bucket/function.zip'
      Policies:
      - Statement:
        - Sid: SSMDescribeParametersPolicy
          Effect: Allow
          Action:
          - ssm:DescribeParameters
          Resource: '*'
        - Sid: SSMGetParameterPolicy
          Effect: Allow
          Action:
          - ssm:GetParameters
          - ssm:GetParameter
          Resource: '*'

(Optional) Geben Sie eine IAM-Berechtigungsgrenze an

Verwenden Sie eine IAM-Berechtigungsgrenze, um die maximal zulässigen Berechtigungen für die Ausführungsrolle Ihrer Lambda-Funktion festzulegen.

Gehen Sie in Ihrer AWS-SAM-YAML-Vorlage wie folgt vor, um eine IAM-Berechtigungsgrenze festzulegen:

Geben Sie den Amazon-Ressourcennamen (ARN) einer Berechtigungsgrenze an

Geben Sie für die Eigenschaft PermissionsBoundary den ARN einer Berechtigungsgrenze ein. Zum Beispiel:

Properties:
  PermissionsBoundary: arn:aws:iam::123456789012:policy/LambdaBoundaries

**Hinweis:**Sie können PermissionsBoundary nur definieren, wenn Sie eine neue Rolle mit Ihrer AWS-SAM-Vorlage erstellen. Sie können keine Berechtigungsgrenze für eine vorhandene Rolle festlegen, die Sie angeben.

Erstellen einer Lambda-Ausführungsrolle

Geben Sie für die Eigenschaft Rolle eine der folgenden Optionen ein:

**Hinweis:**Wenn Sie in Ihrer AWS-SAM-Vorlage keine Rolle angeben, wird bei der Bereitstellung Ihrer Anwendung eine Ausführungsrolle erstellt. Diese Ausführungsrolle umfasst alle Richtlinien, die Sie definieren.

Beispiel für eine AWS-SAM-YAML-Vorlage mit definierter Eigenschaft Rolle

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      Handler: index.handler
      Runtime: nodejs8.10
      CodeUri: 's3://my-bucket/function.zip'
      Role: arn:aws:iam::111111111111:role/SAMPolicy

Verpacken und Bereitstellen Ihrer Anwendung

1.Führen Sie in der AWS-SAM-Befehlszeilenschnittstelle (AWS SAM CLI) den Befehl sam build aus, um Ihre Anwendung zu erstellen und zu verpacken.
**Hinweis:**Wenn Sie beim Ausführen der AWS-CLI-Befehle Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.

2.Führen Sie den Befehl sam deploy aus, um Ihr AWS-SAM-Anwendungspaket bereitzustellen.

Weitere Informationen finden Sie unter Anwendungen erstellen und Serverless Anwendungen bereitstellen.


Ähnliche Informationen

Erste Schritte mit AWS SAM

AWS Serverless Application Model (AWS SAM) (AWS SAM GitHub-Repo)

Richtlinienvorlagen (AWS SAM GitHub-Repo)

Verwaltete Richtlinien und Inline-Richtlinien

Validierung von AWS-SAM-Vorlagendateien

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren