

# 보안 및 권한
<a name="microvms-security"></a>

이 섹션에서는 AWS Lambda MicroVM에 대한 IAM 역할, 인증 토큰 및 액세스 제어를 설명합니다.

## IAM 역할
<a name="microvms-security-iam-roles"></a>

### 빌드 역할
<a name="microvms-security-build-role"></a>

이 역할은 이미지 생성 중 사용됩니다. 소스 아티팩트를 검색하고 로그를 생성하려면 `s3:GetObject`, `logs:CreateLogGroup`, `logs:CreateLogStream` 및 `logs:PutLogEvents` 권한이 필요합니다. 프라이빗 ECR 이미지를 참조하는 경우 `ecr:GetAuthorizationToken`도 추가합니다.

빌드 역할은 선택 사항입니다. 빌드 역할을 제공하지 않으면 Lambda는 CloudWatch에 빌드 로그를 쓸 수 없습니다.

### 실행 역할
<a name="microvms-security-execution-role"></a>

이 역할은 MicroVM 런타임에서 CloudWatch에 로그를 기록하고 다른 AWS 서비스를 사용할 수 있는 액세스 권한을 제공하는 데 사용됩니다.

실행 역할은 선택 사항입니다. 실행 역할을 제공하지 않으면 Lambda는 CloudWatch에 런타임 로그를 내보내지 않으며 MicroVM은 다른 AWS 서비스에 액세스할 수 없습니다.

수명 주기 후크는 해당 단계와 연결된 역할로 실행됩니다. 빌드 시간 후크(`/ready` 및 `/validate`)는 빌드 역할로 실행됩니다. 런타임 후크(`/run`, `/resume`, `/suspend` 및 `/terminate`)는 실행 역할로 실행됩니다.

### 신뢰 정책
<a name="microvms-security-trust-policies"></a>

두 역할 모두 Lambda 서비스 위탁자 `lambda.amazonaws.com`이 `sts:AssumeRole` 및 `sts:TagSession`을 수행할 수 있도록 허용하는 신뢰 정책이 필요합니다.

## 인증 토큰
<a name="microvms-security-auth-tokens"></a>

토큰은 실행 중인 MicroVM에 대한 인바운드 액세스를 제어합니다. 토큰은 포트 범위가 지정되며, 각 토큰은 액세스 권한을 부여하는 포트를 지정합니다.

```
# 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}]'
```

## 쉘 액세스 토큰
<a name="microvms-security-shell-tokens"></a>

쉘 액세스는 별도의 토큰 API를 사용합니다. 대상 MicroVM은 `SHELL_INGRESS` 네트워크 커넥터(`arn:aws:lambda:{{us-east-1}}:aws:network-connector:aws-network-connector:SHELL_INGRESS`)를 사용하여 실행되어야 합니다. MicroVM이 이 커넥터를 사용하여 시작되지 않은 경우 `create-microvm-shell-auth-token`은 `ValidationException`과 함께 실패합니다.

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

MicroVM 쉘 연결에 대한 전체 단계별 안내는 [쉘 액세스](microvms-troubleshooting.md#microvms-troubleshooting-shell) 섹션을 참조하세요.

## 리소스에 태그 지정
<a name="microvms-security-tagging"></a>

Lambda MicroVM 리소스(이미지, MicroVM)는 구성과 비용 할당을 위한 AWS 리소스 태그를 지원합니다. `--tags` 파라미터를 사용하거나 생성 후 명시적으로 이미지를 생성할 때 태그를 추가합니다. 아래와 같이 태그를 나열하고 삭제할 수도 있습니다. IAM 정책 조건에서 태그를 참조하여 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"]'
```

## IAM 권한 참조
<a name="microvms-security-iam-reference"></a>

Lambda MicroVM은 다음과 같은 IAM 작업을 정의합니다. IAM 정책에서 이를 사용하여 MicroVM 작업에 대한 액세스를 제어합니다.


| 작업 | 설명 | 
| --- | --- | 
| lambda:CreateMicrovmImage | 새 MicroVM 이미지를 생성합니다. | 
| lambda:UpdateMicrovmImage | 기존 MicroVM 이미지를 업데이트합니다. | 
| lambda:DeleteMicrovmImage | MicroVM 이미지를 삭제합니다. | 
| lambda:GetMicrovmImage | MicroVM 이미지 세부 정보를 가져옵니다. | 
| lambda:ListMicrovmImages | 계정의 MicroVM 이미지를 나열합니다. | 
| lambda:RunMicrovm | 새 MicroVM을 실행합니다. | 
| lambda:GetMicrovm | MicroVM 상태 및 세부 정보를 가져옵니다. | 
| lambda:ListMicrovms | 계정의 MicroVM을 나열합니다. | 
| lambda:SuspendMicrovm | 실행 중인 MicroVM을 일시 중지합니다. | 
| lambda:ResumeMicrovm | 일시 중지된 MicroVM을 재개합니다. | 
| lambda:TerminateMicrovm | MicroVM을 종료합니다. | 
| lambda:CreateMicrovmAuthToken | MicroVM에 대한 인증 토큰을 생성합니다. | 
| lambda:CreateMicrovmShellAuthToken | 쉘 액세스 토큰을 생성합니다. | 

## 리소스 ARN 형식
<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>
```

## 예시: 운영자에 대한 최소 권한 정책
<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:*"
    }
  ]
}
```