Come posso fornire un accesso granulare alle funzioni Lambda?

8 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).

Breve descrizione

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

  • Crea 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 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 Qualificatore 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

Segui questi passaggi e utilizza le policy IAM per configurare le autorizzazioni per le funzioni Lambda.

Nel seguente esempio di policy IAM, sostituisci AccountID, function_name, username, region, keyID, arn, role\ _name, S3BucketName e FileName con le tue variabili.

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Autorizzazioni necessarie per creare una funzione Lambda

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 e passare il ruolo IAM come ruolo di esecuzione Lambda per la funzione. Quindi, il codice viene caricato 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"
    }
  ]
}

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

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

Poiché il codice non può essere fornito quando la funzione viene creata nella console Lambda, sono necessarie autorizzazioni API aggiuntive. È necessario aggiungere azioni e autorizzazioni API a livello di lettura 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"
    }
  ]
}

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, aggiungi 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"
      ]
    }
  ]
}

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: in base al livello di accesso in lettura che desideri concedere, potresti dover concedere tutte le autorizzazioni o solo un sottoinsieme delle 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": "*"
    }
  ]
}

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 tag sulle funzioni 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 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 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 si desidera concedere, 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": "*"
    }
  ]
}

È 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, aggiungi autorizzazioni KMS aggiuntive. Aggiungi una policy IAM simile alla 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": "*"
}
...

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, aggiungi 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"
    }
  ]
}

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

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.