Como posso fornecer acesso granular às funções do Lambda?

9 minuto de leitura
0

Quero conceder acesso de leitura e gravação a uma função específica do AWS Lambda identificada pelo Amazon Resource Name (ARN). Como posso fornecer acesso granular às funções do Lambda?

Descrição resumida

Você pode configurar as permissões para funções do Lambda usando as políticas do AWS Identity and Access Management (IAM) para:

  • Criar uma função do Lambda
  • Excluir uma função do Lambda
  • Visualizar os detalhes de configuração de uma função do Lambda
  • Modificar uma função do Lambda
  • Invocar uma função do Lambda
  • Monitorar uma função Lambda

Nos exemplos de políticas a seguir, as ações de API do Lambda que oferecem suporte a permissões em nível de recurso estão restritas a uma função específica do Lambda que está listada no elemento Resource de cada instrução. Um nome de função específico é usado no elemento Condition para ações de API que oferecem suporte a esses elementos.

As ações de API que não oferecem suporte a permissões em nível de recurso exigem um curinga (“*”) no elemento Resource e não podem aplicar nenhuma chave de condição específica do serviço do Lambda. Para obter mais informações sobre ações, recursos e condições do IAM com suporte no Lambda, consulte ações, recursos e chaves de condição para o AWS Lambda.

O valor do elemento Resource de uma instrução usa o ARN para identificar os recursos aos quais a instrução se aplica. Por exemplo, quando a Action é Invoke, o Resource é um ARN da função. O IAM compara esse ARN com o ARN da função que é identificado pelos parâmetros FunctionName e Qualifier de uma solicitação Invoke. Para obter mais informações, consulte as versões da função do AWS Lambda.

Observação: se você usar várias versões e aliases, talvez seja necessário incluir “arn:aws:lambda:region:AccountID:function:function_name:*” no elemento de recurso.

Resolução

Permissões necessárias para criar uma função do Lambda

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando a versão mais recente da AWS CLI.

As permissões lambda:CreateFunction e iam:PassRole são necessárias para criar uma função do Lambda usando a AWS Command Line Interface (AWS CLI) ou um SDK. Por exemplo, consulte Políticas do IAM baseadas em identidade para o AWS Lambda. A seguinte política permite que o chamador da API crie uma função do Lambda, transmita o perfil do IAM como o perfil de execução do Lambda para a função e, em seguida, faça o upload do código da sua máquina local:

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

Observação: atualize a política para incluir a região relevante, a ID da conta, o nome da função, o ARN e assim por diante.

Se você fizer o upload do código de um bucket do Amazon Simple Storage Service (Amazon S3), adicione uma política semelhante à seguinte à política do IAM existente para conceder as permissões necessárias ao Amazon S3:

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

Observação: atualize a política para incluir seus nomes de arquivo e bucket relevantes do S3.

Como o código não pode ser fornecido quando a função é criada no console do Lambda, as permissões de API, como ações de API em nível de leitura e permissão para visualizar e atualizar a função, são necessárias. Adicione uma política semelhante à seguinte para conceder essas permissões:

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

Observação: atualize a política para incluir a região relevante, a ID da conta, o nome da função, o ARN e assim por diante.

Para criar um perfil do IAM durante o processo de criação da função do Lambda, adicione outras permissões do IAM semelhantes às seguintes:

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

Permissões necessárias para excluir uma função do Lambda

Para excluir uma função do Lambda usando a AWS CLI ou um SDK, adicione permissões semelhantes às seguintes:

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

Observação: atualize a política para incluir a região relevante, a ID da conta, o nome da função, o ARN e assim por diante.

Para excluir uma função do Lambda usando o console do Lambda, adicione permissões de acesso de leitura do Lambda semelhantes às seguintes:

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

Observação: atualize a política para incluir a região relevante, a ID da conta, o nome da função, o ARN e assim por diante.

Permissões necessárias para visualizar os detalhes de configuração de uma função do Lambda

Para dar permissão ao usuário para visualizar os detalhes de configuração de uma função do Lambda, adicione permissões semelhantes às seguintes:

Observação: dependendo do nível de acesso de leitura que você deseja conceder, talvez seja necessário conceder todas ou um subconjunto das seguintes permissões ao usar a AWS CLI ou um SDK.

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

Observação: atualize a política para incluir a região relevante, a ID da conta, o nome da função, o ARN e assim por diante.

Para visualizar os detalhes da configuração de uma função usando o console do Lambda, adicione permissões semelhantes às seguintes:

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

O console do Lambda usa as funções de marcação do Lambda permitindo filtrar as funções do Lambda por tags. Para usar o AWS Tagging Service, adicione permissões semelhantes às seguintes:

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

O console do Lambda exibe detalhes sobre o perfil do IAM associado a uma função do Lambda e os recursos aos quais o perfil do IAM da função tem acesso. Para visualizar esses detalhes, adicione permissões semelhantes às seguintes:

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

Observação: dependendo dos seus requisitos e dos serviços integrados à sua função do Lambda, talvez seja necessário conceder permissões adicionais a outros serviços da AWS. Para obter mais informações, consulte Permissões do AWS Lambda.

Permissões necessárias para modificar uma função do Lambda

Para conceder a um usuário permissão para modificar uma função do Lambda, adicione permissões semelhantes às seguintes:

Observação: dependendo do nível de acesso de gravação que você deseja conceder, talvez seja necessário conceder todas ou um subconjunto das seguintes permissões ao usar a AWS CLI ou um SDK.

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

Observação: atualize a política para incluir a região relevante, a ID da conta, o nome da função, o ARN e assim por diante.

Você pode restringir ainda mais o acesso usando lambda:AddPermission e lambda:RemovePermission a uma entidade principal incluída em uma política aprovada. Você também pode limitar lambda:UpdateEventSourceMapping e lambda:DeleteEventSourceMapping a um mapeamento da origem do evento específico. Para obter mais informações, consulte Políticas do IAM baseadas em identidade para o AWS Lambda.

Para especificar uma chave do AWS Key Management Service (AWS KMS) gerenciada pelo cliente para criptografar variáveis de ambiente, adicione permissões adicionais do KMS usando um trecho de política do IAM semelhante ao seguinte:

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

Observação: atualize a política para incluir a região relevante, a ID da conta, o nome da função, o ARN e assim por diante.

Para modificar as configurações de uma função do Lambda usando o console do Lambda, adicione permissões semelhantes às seguintes:

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

Permissões necessárias para invocar uma função do Lambda

Para invocar manualmente uma função do Lambda para fins de teste usando a AWS CLI ou um SDK, adicione permissões semelhantes às seguintes:

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

Observação: atualize a política para incluir a região relevante, a ID da conta, o nome da função, o ARN e assim por diante.

Para listar as funções do Lambda usando o console do Lambda, adicione permissões semelhantes às seguintes:

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

Para permitir que outros serviços invoquem uma função do Lambda, use políticas baseadas em recursos para o AWS Lambda. Você também pode usar políticas de função para fornecer acesso entre contas às funções do Lambda. O exemplo de política a seguir pode ser usado para permitir que um usuário de uma conta diferente da AWS invoque manualmente uma função do 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"
    }
  ]
}

Observação: atualize a política para incluir a região relevante, a ID da conta, o nome da função, o ARN e assim por diante.

Permissões necessárias para monitorar as funções do Lambda

Para visualizar as métricas do Amazon CloudWatch na visualização de monitoramento do console do Lambda, adicione permissões semelhantes às seguintes:

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

Para conceder permissão a métricas específicas do CloudWatch e CloudWatch Logs Insights, consulte Referência de permissões do Amazon CloudWatch e Referência de permissões do CloudWatch Logs.