Come posso fornire un accesso granulare alle funzioni Lambda?

9 minuti di lettura
0

Voglio concedere l'accesso in lettura e scrittura a una specifica funzione AWS Lambda identificata dal suo Amazon Resource Name (ARN). Come posso fornire un accesso granulare alle funzioni Lambda?

Breve descrizione

È possibile configurare le autorizzazioni delle funzioni Lambda utilizzando le policy AWS Identity and Access Management (IAM) per:

  • Creare una funzione Lambda
  • Eliminare una funzione Lambda
  • Visualizzare i dettagli di configurazione di una funzione Lambda
  • Modificare una funzione Lambda
  • Invocare una funzione Lambda
  • Monitorare una funzione Lambda

Nei seguenti esempi di policy, le operazioni API Lambda che supportano i permessi a livello di risorsa sono limitate a una specifica funzione Lambda elencata nell'elemento Risorsa di ogni dichiarazione. Il nome di una funzione specifica viene utilizzato nell'elemento Condizione per le operazioni API che supportano tali elementi.

Le operazioni API che non supportano i permessi a livello di risorsa richiedono l’uso di un carattere jolly ("*") nell'elemento Risorsa e non possono applicare alcuna chiave di condizione specifica del servizio Lambda. Per ulteriori informazioni sulle operazioni, le risorse e le condizioni IAM supportate da Lambda, consulta Operazioni, risorse e chiavi di condizione per AWS Lambda.

Il valore dell'elemento Risorsa di un'istruzione utilizza l'ARN per identificare le risorse a cui si applica l'istruzione. Ad esempio, quando l'Operazione è Invoca, la Risorsa è una funzione ARN. IAM confronta questo ARN con l'ARN della funzione identificata dai parametri FunctionName e Qualifier di una richiesta Invoca. Per ulteriori informazioni, consulta Versioni delle funzioni Lambda.

Nota: se utilizzi più versioni e alias, potrebbe essere necessario includere "arn:aws:lambda:region:AccountID:function:function\name:*" nell'elemento Risorsa.

Risoluzione

Autorizzazioni necessarie per creare una funzione Lambda

Nota: se si verificano errori durante l'esecuzione dei comandi dell’interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Entrambe le autorizzazioni lambda:CreateFunction e iam:PassRole sono necessarie per creare una funzione Lambda utilizzando l'interfaccia della linea di comando AWS (AWS CLI) o un SDK. Per un esempio di policy, consulta Policy IAM basate sull'identità per Lambda. La seguente policy consente al chiamante dell'API di creare una funzione Lambda, passare il ruolo IAM come ruolo di esecuzione Lambda per la funzione e caricare il codice dal computer locale:

{
  "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"
    }
  ]
}

Nota: aggiorna la policy per includere la Regione pertinente, l'ID dell'account, il nome della funzione, l'ARN e così via.

Se carichi il codice da un bucket Amazon Simple Storage Service (Amazon S3), aggiungi una policy simile alla seguente alla policy IAM esistente per concedere le autorizzazioni richieste per Amazon S3:

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

Nota: aggiorna la policy per includere i nomi dei bucket e dei file S3 pertinenti.

Poiché il codice non può essere fornito quando la funzione viene creata nella console Lambda, è necessario utilizzare le autorizzazioni API, come le operazioni API a livello di lettura e l'autorizzazione per visualizzare e aggiornare la funzione. Aggiungi una policy simile alla seguente per concedere queste autorizzazioni:

{
  "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"
    }
  ]
}

Nota: aggiorna la policy per includere la Regione pertinente, l'ID dell'account, il nome della funzione, l'ARN e così via.

Per creare un ruolo IAM durante il processo di creazione della funzione Lambda, aggiungi ulteriori autorizzazioni IAM simili alle seguenti:

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

Autorizzazioni necessarie per eliminare una funzione Lambda

Per eliminare una funzione Lambda utilizzando l'interfaccia della linea di comando AWS o un SDK, aggiungi delle autorizzazioni simili alle seguenti:

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

Nota: aggiorna la policy per includere la Regione pertinente, l'ID dell'account, il nome della funzione, l'ARN e così via.

Per eliminare una funzione Lambda utilizzando la console Lambda, aggiungi delle autorizzazioni di accesso in lettura Lambda simili alle seguenti:

{
  "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"
      ]
    }
  ]
}

Nota: aggiorna la policy per includere la Regione pertinente, l'ID dell'account, il nome della funzione, l'ARN e così via.

Autorizzazioni necessarie per visualizzare i dettagli di configurazione di una funzione Lambda

Per concedere a un utente l'autorizzazione a visualizzare i dettagli di configurazione di una funzione Lambda, aggiungi delle autorizzazioni simili alle seguenti:

Nota: a seconda del livello di accesso in lettura che desideri concedere, quando usi l'interfaccia della linea di comando AWS o un SDK potrebbe essere necessario concedere tutte o una parte delle seguenti autorizzazioni.

{
  "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": "*"
    }
  ]
}

Nota: aggiorna la policy per includere la Regione pertinente, l'ID dell'account, il nome della funzione, l'ARN e così via.

Per visualizzare i dettagli di configurazione di una funzione utilizzando la console Lambda, aggiungi delle autorizzazioni simili alle seguenti:

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

La console Lambda utilizza le funzioni di tagging Lambda che consentono di filtrare le funzioni Lambda per tag. Per utilizzare AWS Tagging Service, aggiungi delle autorizzazioni simili alle seguenti:

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

La console Lambda mostra i dettagli sul ruolo IAM associato a una funzione Lambda e le risorse a cui ha accesso il ruolo IAM della funzione. Per visualizzare questi dettagli, aggiungi delle autorizzazioni simili alle seguenti:

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

Nota: a seconda delle esigenze e dei servizi integrati con la funzione Lambda, potrebbe essere necessario concedere ulteriori autorizzazioni per altri servizi AWS. Per ulteriori informazioni, consulta le Autorizzazioni di accesso alle risorse Lambda.

Autorizzazioni necessarie per modificare una funzione Lambda

Per concedere a un utente il permesso di modificare una funzione Lambda, aggiungi delle autorizzazioni simili alle seguenti:

Nota: a seconda del livello di accesso in scrittura che desideri concedere, quando usi l'interfaccia delle linea di comando AWS o un SDK potrebbe essere necessario concedere tutte o una parte delle seguenti autorizzazioni.

{
  "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": "*"
    }
  ]
}

Nota: aggiorna la policy per includere la Regione pertinente, l'ID dell'account, il nome della funzione, l'ARN e così via.

È possibile limitare ulteriormente l'accesso a un principale incluso in una policy approvata utilizzando lambda:AddPermission e lambda:RemovePermission. È anche possibile limitare lambda:UpdateEventSourceMapping e lambda:DeleteEventSourceMapping a una particolare mappatura di origine dell'evento. Per ulteriori informazioni, consulta Policy IAM basate sull'identità per Lambda.

Per specificare una chiave AWS Key Management Service (AWS KMS) gestita dal cliente per crittografare le variabili di ambiente, è necessario aggiungere ulteriori autorizzazioni KMS utilizzando un frammento di policy IAM simile al seguente:

...
{
  "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": "*"
}
...

Nota: aggiorna la policy per includere la Regione pertinente, l'ID dell'account, il nome della funzione, l'ARN e così via.

Per modificare le configurazioni di una funzione Lambda utilizzando la console Lambda, aggiungi delle autorizzazioni simili alle seguenti:

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

Autorizzazioni necessarie per richiamare una funzione Lambda

Per richiamare manualmente una funzione Lambda a scopo di test utilizzando l'interfaccia della linea di comando AWS o un SDK, aggiungi delle autorizzazioni simili alle seguenti:

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

Nota: aggiorna la policy per includere la Regione pertinente, l'ID dell'account, il nome della funzione, l'ARN e così via.

Per elencare le funzioni Lambda utilizzando la console Lambda, aggiungi delle autorizzazioni simili alle seguenti:

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

Per consentire ad altri servizi di invocare una funzione Lambda, utilizza policy basate su risorse per AWS Lambda. Puoi anche utilizzare le policy di funzione per fornire l'accesso tra più account alle funzioni Lambda. La seguente policy di esempio può essere utilizzata per consentire a un utente di un altro account AWS di invocare manualmente una funzione Lambda:

{
  "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"
    }
  ]
}

Nota: aggiorna la policy per includere la Regione pertinente, l'ID dell'account, il nome della funzione, l'ARN e così via.

Autorizzazioni necessarie per monitorare le funzioni Lambda

Per visualizzare i parametri di Amazon CloudWatch nella vista Monitoraggio della console Lambda, aggiungi delle autorizzazioni simili alle seguenti:

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

Per concedere i permessi a metriche specifiche di CloudWatch e CloudWatch Logs Insights, consulta Riferimento alle autorizzazioni Amazon CloudWatch e Riferimento alle autorizzazioni CloudWatch Logs.