

# セキュリティおよびアクセス許可
<a name="microvms-security"></a>

このセクションでは、AWS Lambda MicroVMs の 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>

このロールは、CloudWatch にログを書き込むアクセス許可と他の AWS サービスを使用するアクセス許可を提供するために MicroVM のランタイムに使用されます。

実行ロールはオプションです。実行ロールを指定しない場合、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 MicroVMs は次の 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:*"
    }
  ]
}
```