Salta al contenuto

Come posso fornire un accesso granulare alle funzioni Lambda?

8 minuti di lettura
0

Desidero concedere autorizzazioni di lettura e scrittura per una funzione AWS Lambda specifica a un utente AWS Identity and Access Management (IAM).

Risoluzione

Usa le policy IAM per configurare le autorizzazioni per consentire agli utenti IAM di creare, eliminare, modificare, invocare e monitorare le funzioni Lambda e di visualizzare la configurazione di una funzione Lambda.

Le policy di esempio seguenti limitano le operazioni API Lambda che supportano le autorizzazioni a livello di risorsa a una funzione Lambda specifica indicata nell'elemento Resource. Puoi usare l'elemento Condition nelle operazioni API per identificare la funzione Lambda nella policy IAM.

Per le operazioni API che non supportano le autorizzazioni a livello di risorsa, devi usare un carattere jolly (\ *) nell'elemento Resource. Non puoi applicare chiavi di condizione specifiche per Lambda. Per ulteriori informazioni, consulta Actions, resources, and condition keys for AWS Lambda.

L'elemento Resource utilizza un ARN per identificare le risorse a cui si applica l'istruzione. Ad esempio, se Action è Invoke, il valore di Resource è l'ARN di una funzione. IAM confronta l'ARN con l'ARN della funzione nei parametri FunctionName e Qualifier della richiesta Invoke. Per ulteriori informazioni sugli ARN nelle diverse versioni di Lambda, consulta Using versions.

Se usi più versioni Lambda, non è necessario aggiungere ogni ARN Lambda. È sufficiente includere il carattere jolly (*) nell'elemento Resources:

arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME:*

Nota: sostituisci AWS_REGION:AWS_ACCOUNT_ID con l'ARN Lambda e LAMBDA_FUNCTION_NAME con il nome della funzione Lambda.

Nelle policy IAM di esempio che seguono, sostituisci questi valori:

  • AWS_ACCOUNT_ID con l'ID del tuo account AWS
  • LAMBDA_FUNCTION_NAME con il nome della tua funzione Lambda
  • IAM_USER_NAME con l'utente IAM a cui stai fornendo l'accesso a Lambda
  • AWS_REGION con la tua regione AWS
  • KEY_ID con la tua chiave del Servizio AWS di gestione delle chiavi (AWS KMS)
  • IAM_ROLE_NAME con il tuo ruolo IAM
  • S3_BUCKET_NAME con il nome del bucket Amazon Simple Storage Service (Amazon S3)

Autorizzazioni per creare una funzione Lambda

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

Per utilizzare AWS CLI o la console Lambda per creare una funzione Lambda, devi disporre delle autorizzazioni lambda:CreateFunction e iam:PassRole. Per esempi di policy, consulta Identity-based IAM policies for Lambda.

La policy di esempio seguente consente al chiamante dell'API di creare una funzione Lambda e passare il ruolo IAM come ruolo di esecuzione Lambda della funzione:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "PermissionToCreateFunction",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

Se memorizzi il codice della funzione Lambda in un bucket S3, aggiungi una policy per concedere le autorizzazioni Amazon S3 alla policy IAM.

Policy di esempio:

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

Nota: sostituisci FileName.zip con il file .zip del codice della tua funzione Lambda.

Per visualizzare e aggiornare la funzione, devi aggiungere operazioni e autorizzazioni API a livello di lettura.

Policy di esempio:

{  "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:ListTags"
        "lambda:UpdateFunctionCode"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "PermissionToListExistingRoles",
      "Effect": "Allow",
      "Action": [
        "iam:ListRoles"
      ],
      "Resource": "*"
    },
    {
      "Sid": "PermissionToPassARole",
      "Effect": "Allow",
      "Action": [
        "iam:PassRole"
      ],
      "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME"
    }
  ]
}

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

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

Autorizzazioni per eliminare una funzione Lambda

Per eliminare una funzione Lambda, aggiungi le autorizzazioni seguenti alla policy IAM:

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

Per usare la console Lambda per eliminare una funzione, aggiungi le autorizzazioni di accesso in lettura Lambda alla policy IAM:

{  "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:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    }
  ]
}

Autorizzazioni per visualizzare i dettagli di configurazione di una funzione Lambda

Per consentire a un utente di visualizzare i dettagli di configurazione di una funzione Lambda, aggiungi le autorizzazioni seguenti alla policy IAM:

{  "Version": "2012-10-17",  "Statement": [
    {
      "Sid": "ActionsWhichSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:GetFunction",
        "lambda:ListTags",
        "lambda:TagResource",
        "lambda:GetFunctionConfiguration",
        "lambda:GetPolicy",
        "lambda:GetAlias",
        "lambda:ListVersionsByFunction",
        "lambda:ListAliases"
      ],
      "Resource": [
        "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
      ]
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:ListTags",
        "lambda:GetEventSourceMapping",
        "lambda:ListEventSourceMappings"
      ],
      "Resource": "*"
    }
  ]
}

Nota: in base al livello di accesso in lettura che desideri concedere, puoi aggiungere tutte le autorizzazioni precedenti o solo alcune di esse. Se utilizzi i livelli Lambda, puoi aggiungere anche le autorizzazioni lambda:GetLayerVersion o lambda:ListLayerVersions.

Per usare la console Lambda per visualizzare i dettagli di configurazione di una funzione, aggiungi le autorizzazioni seguenti alla policy IAM:

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

La console Lambda utilizza tag sulle funzioni Lambda che consentono di filtrare le funzioni in base al tag. Per utilizzare i tag, aggiungi le autorizzazioni seguenti alla policy IAM:

{  "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 i dettagli, aggiungi le autorizzazioni seguenti alla policy IAM:

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

Se hai requisiti aggiuntivi, potresti dover concedere autorizzazioni aggiuntive ad altri servizi AWS.

Autorizzazioni per modificare una funzione Lambda

Per consentire a un utente di modificare una funzione Lambda, aggiungi le autorizzazioni seguenti alla policy IAM:

{  "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",
        "lambda:UpdateFunctionEventInvokeConfig",
        "lambda:PutFunctionEventInvokeConfig"
      ],
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    },
    {
      "Sid": "ActionsWhichSupportCondition",
      "Effect": "Allow",
      "Action": [
        "lambda:CreateEventSourceMapping",
        "lambda:UpdateEventSourceMapping",
        "lambda:DeleteEventSourceMapping"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "lambda:FunctionArn": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
        }
      }
    },
    {
      "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions",
      "Effect": "Allow",
      "Action": [
        "lambda:UntagResource",
        "lambda:TagResource"
      ],
      "Resource": "*"
    }
  ]
}

Nota: in base al livello di accesso in scrittura che desideri concedere, puoi aggiungere tutte le autorizzazioni precedenti o solo alcune di esse.

Per limitare l'accesso, aggiungi lambda:AddPermission e lambda:RemovePermission a un principale incluso in una policy collegata. Puoi anche limitare lambda:UpdateEventSourceMapping e lambda:DeleteEventSourceMapping a un particolare strumento di mappatura dell'origine degli eventi.

Per usare una chiave gestita dal cliente per crittografare le variabili di ambiente, aggiungi le autorizzazioni AWS KMS seguenti alla policy IAM:

{  "Sid": "PermissionsForCryptoOperations",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:CreateGrant"
  ],
  "Resource": "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/KEY_ID"
},
{
  "Sid": "PermissionsToListExistingKeys",
  "Effect": "Allow",
  "Action": [
    "kms:ListKeys",
    "kms:ListAliases"
  ],
  "Resource": "*"
}

Per usare la console Lambda per modificare le configurazioni di una funzione Lambda, aggiungi le autorizzazioni seguenti alla policy IAM:

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

Autorizzazioni per invocare una funzione Lambda

Per invocare manualmente una funzione Lambda, aggiungi le autorizzazioni seguenti alla policy IAM:

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

Per usare la console Lambda per elencare le funzioni Lambda, aggiungi le autorizzazioni seguenti alla policy IAM:

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

Per consentire ad altri servizi di invocare una funzione Lambda, utilizza policy basate sulle risorse per Lambda. Puoi anche utilizzare le policy delle funzioni per fornire accesso multi-account alle funzioni Lambda.

La policy di esempio seguente può essere utilizzata per consentire a un utente di un altro account di invocare manualmente una funzione Lambda:

{  "Version": "2012-10-17",  "Id": "default",
  "Statement": [
    {
      "Sid": "PermissionToInvoke",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::External_AWS_ACCOUNT_ID:user/IAM_USER_NAME"
      },
      "Action": "lambda:InvokeFunction",
      "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME"
    }
  ]
}

Nota: sostituisci External_AWS_ACCOUNT_ID con l'account a cui desideri consentire di invocare la funzione.

Autorizzazioni per monitorare le funzioni Lambda

Per visualizzare le metriche di Amazon CloudWatch nella scheda Monitoraggio della console Lambda, aggiungi le autorizzazioni seguenti alla policy IAM:

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

Per concedere le autorizzazioni per metriche di CloudWatch e Approfondimenti di CloudWatch Logs specifici, consulta Amazon CloudWatch permissions reference e CloudWatch Logs permissions reference.