

# Segurança e permissões
<a name="microvms-security"></a>

Esta seção descreve os perfis, os tokens de autenticação e os controles de acesso do IAM para o AWS Lambda MicroVMS.

## Perfis do IAM
<a name="microvms-security-iam-roles"></a>

### Perfil de compilação
<a name="microvms-security-build-role"></a>

Esse perfil é usado durante a criação da imagem. Ele exige as seguintes permissões para recuperar artefatos de origem e gerar registros em log:`s3:GetObject`, `logs:CreateLogGroup`, `logs:CreateLogStream` e `logs:PutLogEvents`. Adicione também `ecr:GetAuthorizationToken` se estiver fazendo referência a imagens do ECR privadas.

O perfil de compilação é opcional. Se você não fornecer um perfil de compilação, o Lambda não poderá gravar os registros em log da compilação no CloudWatch.

### Função de execução
<a name="microvms-security-execution-role"></a>

Esse perfil é usado no runtime da microVM para fornecer permissões de acesso para gravar registros em log no CloudWatch e usar outros serviços da AWS.

O perfil de execução é opcional. Se você não fornecer um perfil de execução, o Lambda não emitirá logs de runtime para o CloudWatch e sua microVM não poderá acessar outros serviços da AWS.

Os ganchos do ciclo de vida são executados sob o perfil associado à respectiva fase. Os hooks do tempo de compilação (`/ready` e `/validate`) são executados sob o perfil de compilação. Os hooks de runtime (`/run`, `/resume`, `/suspend` e `/terminate`) são executados sob o perfil de execução.

### Políticas de confiança
<a name="microvms-security-trust-policies"></a>

Ambos os perfis exigem uma política de confiança que permita à entidade principal do serviço do Lambda `lambda.amazonaws.com` realizar `sts:AssumeRole` e `sts:TagSession`.

## Tokens de autenticação
<a name="microvms-security-auth-tokens"></a>

Os tokens controlam o acesso de entrada às microVMs em execução. Eles têm escopo de porta e cada token especifica a quais portas concede acesso.

```
# Token granting access to all ports
aws lambda-microvms create-microvm-auth-token \
  --microvm-identifier <id> \
  --expiration-in-minutes 30 \
  --allowed-ports '[{"allPorts":{}}]'

# Token granting access to port 8080 only
aws lambda-microvms create-microvm-auth-token \
  --microvm-identifier <id> \
  --expiration-in-minutes 30 \
  --allowed-ports '[{"port":8080}]'
```

## Tokens de acesso do shell
<a name="microvms-security-shell-tokens"></a>

O acesso ao shell usa uma API de token separada. A microVM de destino deve ter sido executada com o conector de rede `SHELL_INGRESS` (`arn:aws:lambda:{{us-east-1}}:aws:network-connector:aws-network-connector:SHELL_INGRESS`). Se a microVM não tiver sido iniciada com esse conector, `create-microvm-shell-auth-token` falhará com uma `ValidationException`:

```
aws lambda-microvms create-microvm-shell-auth-token \
  --microvm-identifier <id> \
  --expiration-in-minutes 30
```

Para obter uma orientação completa sobre como se conectar ao shell da microVM, consulte [Acesso ao shell](microvms-troubleshooting.md#microvms-troubleshooting-shell).

## Marcar recursos
<a name="microvms-security-tagging"></a>

Os recursos do Lambda MicroVM (imagens, microVMs) oferecem suporte às tags de recursos da AWS para organização e alocação de custos. Adicione tags ao criar uma imagem usando o parâmetro `--tags` ou explicitamente após a criação. Você também pode listar e excluir tags, conforme demonstrado abaixo. Você também pode fazer referência às tags nas condições da política do IAM para controlar o acesso aos recursos da microVM.

```
# Add tags when creating an image
aws lambda-microvms create-microvm-image \
  --name my-app-image \
  --code-artifact '{"uri":"s3://my-bucket/app.zip"}' \
  --base-image-arn arn:aws:lambda:{{us-east-1}}:aws:microvm-image:al2023-1 \
  --build-role-arn arn:aws:iam::123456789012:role/MicrovmBuildRole \
  --tags '{"Environment":"production","Team":"platform"}'

# List tags on a resource
aws lambda-microvms list-tags \
  --resource arn:aws:lambda:us-east-1:123456789012:microvm-image:my-app-image

# Add tags to an existing resource
aws lambda-microvms tag-resource \
  --resource arn:aws:lambda:us-east-1:123456789012:microvm-image:my-app-image \
  --tags '{"CostCenter":"12345","Project":"sandbox-platform"}'

# Remove tags by key
aws lambda-microvms untag-resource \
  --resource arn:aws:lambda:us-east-1:123456789012:microvm-image:my-app-image \
  --tag-keys '["CostCenter","Project"]'
```

## Referência das permissões do IAM
<a name="microvms-security-iam-reference"></a>

O Lambda MicroVMS define as ações do IAM a seguir. Use-as nas políticas do IAM para controlar o acesso às operações da MicroVM.


| Ação | Descrição | 
| --- | --- | 
| lambda:CreateMicrovmImage | Criar uma nova imagem da microVM | 
| lambda:UpdateMicrovmImage | Atualize uma imagem existente da microVM. | 
| lambda:DeleteMicrovmImage | Exclua uma imagem da microVM. | 
| lambda:GetMicrovmImage | Obtenha detalhes da imagem da microVM | 
| lambda:ListMicrovmImages | Liste imagens da microVM na conta. | 
| lambda:RunMicrovm | Execute uma nova microVM. | 
| lambda:GetMicrovm | Obtenha o estado e os detalhes da microVM. | 
| lambda:ListMicrovms | Liste as microVMs na conta. | 
| lambda:SuspendMicrovm | Suspenda uma microVM em execução. | 
| lambda:ResumeMicrovm | Retome uma microVM suspensa. | 
| lambda:TerminateMicrovm | Finalize uma microVM. | 
| lambda:CreateMicrovmAuthToken | Gere um token de autenticação para uma microVM. | 
| lambda:CreateMicrovmShellAuthToken | Gere um token de acesso do shell. | 

## Formatos do ARN dos recursos
<a name="microvms-security-resource-arns"></a>

```
# MicroVM image
arn:aws:lambda:<region>:<account>:microvm-image:<image-name>
# MicroVM instance
arn:aws:lambda:<region>:<account>:microvm:<microvm-id>
# Network connector
arn:aws:lambda:<region>:<account>:network-connector:<connector-id>
```

## Exemplo: política de privilégios mínimos para um operador
<a name="microvms-security-least-privilege"></a>

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lambda:RunMicrovm",
        "lambda:GetMicrovm",
        "lambda:ListMicrovms",
        "lambda:SuspendMicrovm",
        "lambda:ResumeMicrovm",
        "lambda:TerminateMicrovm",
        "lambda:CreateMicrovmAuthToken"
      ],
      "Resource": "arn:aws:lambda:*:123456789012:microvm:*"
    },
    {
      "Effect": "Allow",
      "Action": ["lambda:GetMicrovmImage", "lambda:ListMicrovmImages"],
      "Resource": "arn:aws:lambda:*:123456789012:microvm-image:*"
    }
  ]
}
```