

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon VPC Lattice におけるセキュリティ
<a name="security"></a>

でのクラウドセキュリティが最優先事項 AWS です。お客様は AWS 、セキュリティを最も重視する組織の要件を満たすように構築されたデータセンターとネットワークアーキテクチャからメリットを得られます。

ユーザーは、このインフラストラクチャでホストされるコンテンツに対する管理を維持する責任があります。[責任共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)ではこれをクラウド*の*セキュリティおよびクラウド*内*のセキュリティと説明しています。
+ **クラウドのセキュリティ** – AWS は、 で AWS サービスを実行するインフラストラクチャを保護する責任があります AWS クラウド。 AWS また、 では、安全に使用できるサービスも提供しています。サードパーティーの監査者は、[AWS コンプライアンスプログラム](https://aws.amazon.com/compliance/programs/)コンプライアンスプログラムの一環として、当社のセキュリティの有効性を定期的にテストおよび検証。Amazon VPC Lattice に適用されるコンプライアンスプログラムの詳細については、「コンプライアンスプログラム[AWS による対象範囲内のサービスコンプライアンスプログラム](https://aws.amazon.com/compliance/services-in-scope/)」を参照してください。
+ **クラウドのセキュリティ** – ユーザーにはこのインフラストラクチャでホストされているコンテンツに対する管理を行う責任があります。また、ユーザーは、データの機密性、会社の要件、適用される法律や規制など、その他の要因についても責任を負います。

このドキュメントは VPC Lattice を使用する際に責任共有モデルを適用する方法を理解するための一助となります。以下のトピックでは、VPC Lattice を設定して、セキュリティとコンプライアンスの目標を達成する方法を説明します。また、VPC Lattice AWS サービス、サービスネットワーク、リソース設定のモニタリングと保護に役立つ他の サービスの使用方法についても説明します。

**Topics**
+ [VPC Lattice サービスへのアクセスを管理する](access-management-overview.md)
+ [Amazon VPC Lattice でのデータ保護](data-protection.md)
+ [Amazon VPC Lattice のアイデンティティとアクセス管理](security-iam.md)
+ [Amazon VPC Lattice のコンプライアンス検証](compliance-validation.md)
+ [インターフェイスエンドポイント (AWS PrivateLink) を使用して Amazon VPC Lattice にアクセスする](vpc-interface-endpoints.md)
+ [Amazon VPC Lattice の耐障害性](disaster-recovery-resiliency.md)
+ [Amazon VPC Lattice のインフラストラクチャセキュリティ](infrastructure-security.md)

# VPC Lattice サービスへのアクセスを管理する
<a name="access-management-overview"></a>

VPC Lattice はデフォルトで安全です。VPC へのアクセスを提供するサービスとリソース設定、およびどの VPCs を使用するかを明確にする必要があるためです。VPC 関連付けまたはサービスネットワークタイプの VPC エンドポイントを介してサービスにアクセスできます。マルチアカウントシナリオでは、 [AWS Resource Access Manager](sharing.md)を使用して、アカウント境界間でサービス、リソース設定、サービスネットワークを共有できます。

 VPC Lattice は複数のネットワークレイヤーでdefense-in-depth戦略を実装できるフレームワークを提供します。
+ **第 1 レイヤー** – サービスネットワークとの サービス、リソース、VPC、VPC エンドポイントの関連付け。VPC は、関連付けまたは VPC エンドポイントを介してサービスネットワークに接続できます。VPC がサービスネットワークに接続されていない場合、VPC 内のクライアントは、サービスネットワークに関連付けられているサービスおよびリソース設定にアクセスできません。
+ **第 2 レイヤー** – セキュリティグループやネットワーク ACL など、サービスネットワークに対するネットワークレベルでのオプションのセキュリティ保護。これらを使用することで、VPC 内のすべてのクライアントではなく、VPC 内の特定のクライアントグループへのアクセスを許可できます。
+ **第 3 レイヤー** – オプションの VPC Lattice 認証ポリシー。認証ポリシーはサービスネットワークと個々のサービスに適用できます。通常、サービスネットワークの認可ポリシーはネットワークまたはクラウド管理者によって運用され、粗粒度の認可が実装されます。例えば、 AWS Organizations内の特定の組織からの認証されたリクエストのみを許可します。サービスレベルの認可ポリシーでは、通常、サービス所有者がきめ細かい制御を設定します。このような制御はサービスネットワークレベルで適用される粗粒度の認可よりも厳しい場合があります。
**注記**  
サービスネットワークの認証ポリシーは、サービスネットワークのリソース設定には適用されません。

**アクセスコントロール方法**
+ [認証ポリシー](auth-policies.md)
+ [セキュリティグループ](security-groups.md)
+ [ネットワーク ACL](network-acls.md)

# 認証ポリシーを使用して VPC Lattice サービスへのアクセスを制御する
<a name="auth-policies"></a>

VPC Lattice 認証ポリシーは、指定したプリンシパルによるサービスのグループまたは特定のサービスへのアクセスを制御するために、サービスネットワークまたはサービスにアタッチする IAM ポリシードキュメントです。アクセスを制御する各サービスネットワークまたはサービスに認証ポリシーを 1 つアタッチできます。

**注記**  
サービスネットワークの認証ポリシーは、サービスネットワークのリソース設定には適用されません。

認証ポリシーは IAM アイデンティティベースのポリシーとは異なります。IAM アイデンティティベースのポリシーは、IAM ユーザー、グループ、ロールにアタッチされ、実行できるアクションとリソースを定義します。認証ポリシーはサービスとサービスネットワークにアタッチされます。認可が正常に完了するためには、認可ポリシーとアイデンティティベースのポリシーの両方において、明示的な許可ステートメントが必要です。詳細については、「[認可の仕組み](#auth-policies-evaluation-logic)」を参照してください。

 AWS CLI および コンソールを使用して、サービスおよびサービスネットワークの認証ポリシーを表示、追加、更新、または削除できます。認証ポリシーを追加、更新、または削除すると、準備が完了するまでに数分かかる場合があります。を使用する場合は AWS CLI、正しい リージョンにいることを確認してください。プロファイルのデフォルトリージョンを変更するか、 コマンドで `--region`パラメータを使用できます。

**Topics**
+ [認証ポリシーの一般的な要素](#auth-policies-common-elements)
+ [認証ポリシーのリソース形式](#auth-policies-resource-format)
+ [認証ポリシーで使用できる条件キー](#auth-policies-condition-keys)
+ [リソースタグ](#resource-tags)
+ [プリンシパルタグ](#principal-tags)
+ [匿名 (認証されていない) プリンシパル](#anonymous-unauthenticated-principals)
+ [認証ポリシーの例](#example-auth-policies)
+ [認可の仕組み](#auth-policies-evaluation-logic)

認証ポリシーの使用を開始するには、手順に沿ってサービスネットワークに適用する認証ポリシーを作成します。制限の厳しいアクセス許可を他のサービスには適用しない場合には、オプションで個別のサービスに認証ポリシーを設定できます。

## 認証ポリシーを使用してサービスネットワークへのアクセスを管理する
<a name="manage-access-to-service-networks"></a>

以下の AWS CLI タスクでは、認証ポリシーを使用してサービスネットワークへのアクセスを管理する方法を示します。コンソールでの手順については、「[VPC Lattice のサービスネットワーク](service-networks.md)」を参照してください。

**Topics**
+ [認証ポリシーをサービスネットワークに追加する](#add-service-network-auth-policy)
+ [サービスネットワークの認証タイプを変更する](#change-service-network-auth-type)
+ [認証ポリシーをサービスネットワークから削除する](#remove-service-network-auth-policy)

### 認証ポリシーをサービスネットワークに追加する
<a name="add-service-network-auth-policy"></a>

このセクションの手順に従って、 を使用して以下 AWS CLI を行います。
+ IAM を使用してサービスネットワークのアクセスコントロールを有効にします。
+ 認証ポリシーをサービスネットワークに追加します。認証ポリシーを追加しない場合、すべてのトラフィックでアクセス拒否エラーが発生します。

**アクセスコントロールを有効にし、認証ポリシーを新しいサービスネットワークに追加する方法**

1. サービスネットワークでアクセスコントロールを有効にして認証ポリシーを使用できるようにするには、**create-service-network** コマンドを使用して `--auth-type` オプションを値 `AWS_IAM` と指定します。

   ```
   aws vpc-lattice create-service-network --name Name --auth-type AWS_IAM [--tags TagSpecification]
   ```

   成功すると、コマンドは以下のような出力を返します。

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "id": "sn-0123456789abcdef0",
      "name": "Name"
   }
   ```

1. **put-auth-policy** コマンドを使用して、認証ポリシーを追加するサービスネットワークの ID と追加する認証ポリシーを指定します。

   例えば、次のコマンドを使用して、ID *`sn-0123456789abcdef0`* でサービスネットワークの認証ポリシーを作成します。

   ```
   aws vpc-lattice put-auth-policy --resource-identifier sn-0123456789abcdef0 --policy file://policy.json
   ```

   JSON を使用してポリシー定義を作成します。詳細については、「[認証ポリシーの一般的な要素](#auth-policies-common-elements)」を参照してください。

   成功すると、コマンドは以下のような出力を返します。

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

**アクセスコントロールを有効にし、既存のサービスネットワークに認証ポリシーを追加する方法**

1. サービスネットワークでアクセスコントロールを有効にして認証ポリシーを使用できるようにするには、**update-service-network** コマンドを使用して `--auth-type` オプションを値 `AWS_IAM` と指定します。

   ```
   aws vpc-lattice update-service-network --service-network-identifier sn-0123456789abcdef0 --auth-type AWS_IAM
   ```

   成功すると、コマンドは以下のような出力を返します。

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "id": "sn-0123456789abcdef0",
      "name": "Name"
   }
   ```

1. **put-auth-policy** コマンドを使用して、認証ポリシーを追加するサービスネットワークの ID と追加する認証ポリシーを指定します。

   ```
   aws vpc-lattice put-auth-policy --resource-identifier sn-0123456789abcdef0 --policy file://policy.json
   ```

   JSON を使用してポリシー定義を作成します。詳細については、「[認証ポリシーの一般的な要素](#auth-policies-common-elements)」を参照してください。

   成功すると、コマンドは以下のような出力を返します。

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

### サービスネットワークの認証タイプを変更する
<a name="change-service-network-auth-type"></a>

**サービスネットワークの認証ポリシーを無効にする方法**  
**update-service-network** コマンドを使用して `--auth-type` オプションを値 `NONE` と指定します。

```
aws vpc-lattice update-service-network --service-network-identifier sn-0123456789abcdef0 --auth-type NONE
```

後ほど認証ポリシーを再度有効にする必要がある場合は、`--auth-type` オプションを `AWS_IAM` と指定してこのコマンドを実行します。

### 認証ポリシーをサービスネットワークから削除する
<a name="remove-service-network-auth-policy"></a>

**認証ポリシーをサービスネットワークから削除する方法**  
**delete-auth-policy** コマンドを使用します。

```
aws vpc-lattice delete-auth-policy --resource-identifier sn-0123456789abcdef0
```

サービスネットワークの認証タイプを `NONE` に変更する前に認証ポリシーを削除すると、リクエストはエラーとなります。

## 認証ポリシーを使用してサービスへのアクセスを管理する
<a name="manage-access-to-services"></a>

以下の AWS CLI タスクでは、認証ポリシーを使用してサービスへのアクセスを管理する方法を示します。コンソールでの手順については、「[VPC Lattice のサービス](services.md)」を参照してください。

**Topics**
+ [認証ポリシーをサービスに追加する](#add-service-auth-policy)
+ [サービスの認証タイプを変更する](#change-service-auth-type)
+ [認証ポリシーをサービスから削除する](#remove-service-auth-policy)

### 認証ポリシーをサービスに追加する
<a name="add-service-auth-policy"></a>

を使用して以下のステップを実行します AWS CLI 。
+ IAM を使用してサービスのアクセスコントロールを有効にします。
+ 認証ポリシーをサービスに追加します。認証ポリシーを追加しない場合、すべてのトラフィックでアクセス拒否エラーが発生します。

**アクセスコントロールを有効にし、認証ポリシーを新しいサービスに追加する方法**

1. サービスでアクセスコントロールを有効にして認証ポリシーを使用できるようにするには、**create-service** コマンドを使用して `--auth-type` オプションを値 `AWS_IAM` と指定します。

   ```
   aws vpc-lattice create-service --name Name --auth-type AWS_IAM [--tags TagSpecification]
   ```

   成功すると、コマンドは以下のような出力を返します。

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "dnsEntry": { 
         ...
      },
      "id": "svc-0123456789abcdef0",
      "name": "Name",
      "status": "CREATE_IN_PROGRESS"
   }
   ```

1. **put-auth-policy** コマンドを使用して、認証ポリシーを追加するサービスの ID と追加する認証ポリシーを指定します。

   例えば、次のコマンドを使用して、ID *svc-0123456789abcdef0* でサービスの認証ポリシーを作成します。

   ```
   aws vpc-lattice put-auth-policy --resource-identifier svc-0123456789abcdef0 --policy file://policy.json
   ```

   JSON を使用してポリシー定義を作成します。詳細については、「[認証ポリシーの一般的な要素](#auth-policies-common-elements)」を参照してください。

   成功すると、コマンドは以下のような出力を返します。

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

**アクセスコントロールを有効にし、既存のサービスに認証ポリシーを追加する方法**

1. サービスでアクセスコントロールを有効にして認証ポリシーを使用できるようにするには、**update-service** コマンドを使用して `--auth-type` オプションを値 `AWS_IAM` と指定します。

   ```
   aws vpc-lattice update-service --service-identifier svc-0123456789abcdef0 --auth-type AWS_IAM
   ```

   成功すると、コマンドは以下のような出力を返します。

   ```
   {
      "arn": "arn",
      "authType": "AWS_IAM",
      "id": "svc-0123456789abcdef0",
      "name": "Name"
   }
   ```

1. **put-auth-policy** コマンドを使用して、認証ポリシーを追加するサービスの ID と追加する認証ポリシーを指定します。

   ```
   aws vpc-lattice put-auth-policy --resource-identifier svc-0123456789abcdef0 --policy file://policy.json
   ```

   JSON を使用してポリシー定義を作成します。詳細については、「[認証ポリシーの一般的な要素](#auth-policies-common-elements)」を参照してください。

   成功すると、コマンドは以下のような出力を返します。

   ```
   {
      "policy": "policy",
      "state": "Active"
   }
   ```

### サービスの認証タイプを変更する
<a name="change-service-auth-type"></a>

**サービスの認証ポリシーを無効にする方法**  
**update-service** コマンドを使用して `--auth-type` オプションを値 `NONE` と指定します。

```
aws vpc-lattice update-service --service-identifier svc-0123456789abcdef0 --auth-type NONE
```

後ほど認証ポリシーを再度有効にする必要がある場合は、`--auth-type` オプションを `AWS_IAM` と指定してこのコマンドを実行します。

### 認証ポリシーをサービスから削除する
<a name="remove-service-auth-policy"></a>

**認証ポリシーをサービスから削除する方法**  
**delete-auth-policy** コマンドを使用します。

```
aws vpc-lattice delete-auth-policy --resource-identifier svc-0123456789abcdef0
```

サービスの認証タイプを `NONE` に変更する前に認証ポリシーを削除すると、リクエストはエラーとなります。

サービスに認証されたリクエストを必要とする認証ポリシーを有効にする場合、そのサービスのすべてのリクエストには、Signature Version 4 (SigV4)を使用して計算された有効なリクエストの署名が含まれている必要があります。詳細については、「[Amazon VPC Lattice の SIGv4 認証リクエスト](sigv4-authenticated-requests.md)」を参照してください。

## 認証ポリシーの一般的な要素
<a name="auth-policies-common-elements"></a>

VPC Lattice 認証ポリシーは IAM ポリシーと同じ構文を使用して指定されます。詳細については、「IAM ユーザーガイド」の「[アイデンティティベースおよびリソースベースのポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)」を参照してください。

認証ポリシーには、次の要素が含まれます。
+ **プリンシパル** – ステートメントのアクションとリソースへのアクセスが許可されているユーザーまたはアプリケーションを指します。認証ポリシーでは、プリンシパルはこのアクセス許可の被付与者である IAM エンティティを指します。プリンシパルは IAM エンティティとして認証され、サービスネットワークのサービスのように、特定のリソースまたはリソースのグループにリクエストを送信します。

  リソースベースのポリシーでは、プリンシパルを指定する必要があります。プリンシパルには、アカウント、ユーザー、ロール、フェデレーティッドユーザー、または AWS サービスを含めることができます。詳細については、「IAM ユーザーガイド」の「[AWS JSON ポリシーの要素: プリンシパル](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html)」を参照してください。
+ **効果** - 指定されたプリンシパルが特定のアクションをリクエストするときの効果を指定します。`Allow` または `Deny` のいずれかとなります。デフォルトでは、IAM を使用してサービスまたはサービスネットワークのアクセスコントロールを有効にした場合、プリンシパルにはサービスまたはサービスネットワークにリクエストをする権限がありません。
+ **アクション** – アクセス許可を付与または拒否する特定の API アクション。VPC Lattice は`vpc-lattice-svcs`、 プレフィックスを使用するアクションをサポートしています。詳細については、*「サービス認可リファレンス*」の[「Amazon VPC Lattice Services で定義されるアクション](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclatticeservices.html#amazonvpclatticeservices-actions-as-permissions)」を参照してください。
+ **リソース** – アクションによって影響を受けるサービスです。
+ **条件** – 条件はオプションです。ポリシーが有効になるタイミングを制御するために使用できます。詳細については、「サービス認可リファレンス」の「[Amazon VPC Lattice Services の条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclatticeservices.html#amazonvpclatticeservices-policy-keys)」を参照してください。

認証ポリシーを作成し管理するときは、[IAM Policy Generator](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html#access_policies_create-generator) を使用することもできます。

**要件**  
JSON のポリシーには改行または空白行を含めないでください。

## 認証ポリシーのリソース形式
<a name="auth-policies-resource-format"></a>

特定のリソースへのアクセスを制限するには、次の例のとおり `<serviceARN>/<path>` パターンと一致するスキーマを使用し `Resource` 要素をコーディングする認証ポリシーを作成します。


| プロトコル | 例 | 
| --- | --- | 
| HTTP |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/vpc-lattice/latest/ug/auth-policies.html)  | 
| gRPC |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/vpc-lattice/latest/ug/auth-policies.html)  | 

`<serviceARN>` には、次の Amazon リソースネーム (ARN)リソース形式を使用します。

```
arn:aws:vpc-lattice:region:account-id:service/service-id
```

例えば、次のようになります。

```
"Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0"
```

## 認証ポリシーで使用できる条件キー
<a name="auth-policies-condition-keys"></a>

アクセスは認証ポリシーの**条件**要素の条件キーによってさらに細かくコントロールできます。これらの条件キーはプロトコルと、リクエストが [Signature Version 4 (SigV4)](sigv4-authenticated-requests.md) または匿名のどちらで署名されているかによって、評価の対象となります。条件キーは大文字と小文字が区別されます。

AWS には、 `aws:PrincipalOrgID`や などのアクセスを制御するために使用できるグローバル条件キーが用意されています`aws:SourceIp`。 AWS グローバル条件キーのリストを確認するには、*「IAM ユーザーガイド*」の[AWS 「グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。

次のストーリーでは、VPC Lattice 条件キーを一覧表示します。詳細については、「サービス認可リファレンス」の「[Amazon VPC Lattice Services の条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclatticeservices.html#amazonvpclatticeservices-policy-keys)」を参照してください。


| 条件キー | 説明 | 例 | 匿名の (認証されていない) 発信者による利用可否 | gRPC での利用可否 | 
| --- | --- | --- | --- | --- | 
| vpc-lattice-svcs:Port | リクエストが行われたサービスポートによりアクセスをフィルタリング | 80 | はい  | はい | 
| vpc-lattice-svcs:RequestMethod | リクエスト方法によりアクセスをフィルタリング | GET | はい | 常に POST | 
| vpc-lattice-svcs:RequestPath | リクエスト URL のパス部分でアクセスをフィルタリング | /path | はい  | はい | 
| vpc-lattice-svcs:RequestHeader/header-name: value | リクエストヘッダーのヘッダー名と値のペアによりアクセスをフィルタリング | content-type: application/json | はい  | はい | 
| vpc-lattice-svcs:RequestQueryString/key-name: value | リクエスト URL 内のクエリ文字列キーと値のペアによりアクセスをフィルタリング | quux: [corge, grault] | はい | なし | 
| vpc-lattice-svcs:ServiceNetworkArn | リクエストを受け取ったサービスのサービスネットワークの ARN によりアクセスをフィルタリング | arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/sn-0123456789abcdef0 | はい  | はい | 
| vpc-lattice-svcs:ServiceArn | リクエストを受け取ったサービスの ARN によりアクセスをフィルタリング | arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0 | はい  | はい | 
| vpc-lattice-svcs:SourceVpc | リクエストが行われた VPC によりアクセスをフィルタリング | vpc-1a2b3c4d | はい  | はい | 
| vpc-lattice-svcs:SourceVpcOwnerAccount | リクエストが行われた所有アカウントの VPC によりアクセスをフィルタリング | 123456789012 | はい  | はい | 

## リソースタグ
<a name="resource-tags"></a>

*タグ*は、 AWS AWS リソースに割り当てるメタデータラベルです。各 タグは 2 つの部分で構成されます:
+ *タグキー* (例： `CostCenter`、`Environment`、または `Project`)。タグキーでは、大文字と小文字が区別されます。
+ *タグ値*として知られるオプションのフィールド (例： `111122223333` または `Production`)。タグ値を省略すると、空の文字列を使用した場合と同じになります。タグキーと同様に、タグ値でも大文字と小文字が区別されます。

タグ付けの詳細については、[「タグを使用した AWS リソースへのアクセスの制御](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)」を参照してください。

`aws:ResourceTag/key` AWS グローバル条件コンテキストキーを使用して、認証ポリシーでタグを使用できます。

次のポリシー例では、タグ を持つ サービスへのアクセスを許可します`Environment=Gamma`。このポリシーでは、ハードコーディングサービス ARNs または IDs のないサービスを参照できます。

```
{
  "Version": "2012-10-17", 		 	 	 		 	 	 
  "Statement": [
    {
      "Sid": "AllowGammaAccess",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "vpc-lattice-svcs:Invoke",
      "Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0124446789abcdef0/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Environment": "Gamma",
        }
      }
    }
  ]
}
```

## プリンシパルタグ
<a name="principal-tags"></a>

発信者の ID にアタッチされたタグに基づいて、サービスとリソースへのアクセスを制御できます。VPC Lattice は、 `aws:PrincipalTag/context`変数を使用したユーザー、ロール、またはセッションタグのプリンシパルタグに基づくアクセスコントロールをサポートします。詳細については、「[IAM プリンシパルのアクセスの制御](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html#access_iam-tags_control-principals)」を参照してください。

次のポリシー例では、タグ を持つ ID にのみアクセスを許可します`Team=Payments`。このポリシーでは、アカウント IDsまたはロール ARNs をハードコーディングせずにアクセスを制御できます。

```
{
  "Version": "2012-10-17", 		 	 	 		 	 	 
  "Statement": [
    {
      "Sid": "AllowPaymentsTeam",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "vpc-lattice-svcs:Invoke",
      "Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0/*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalTag/Team": "Payments",
        }
      }
    }
  ]
}
```

## 匿名 (認証されていない) プリンシパル
<a name="anonymous-unauthenticated-principals"></a>

匿名プリンシパルは、[署名バージョン 4 (SigV4) ](sigv4-authenticated-requests.md)で AWS リクエストに署名せず、サービスネットワークに接続されている VPC 内にある発信者です。匿名プリンシパルはサービスネットワークのサービスに対して認証されていないリクエストを認証ポリシーで許可されている場合には実行できます。

## 認証ポリシーの例
<a name="example-auth-policies"></a>

認証されたプリンシパルによるリクエストが必要な認証ポリシーの例には次のものがあります。

すべての例で、`us-west-2` リージョンと架空のアカウント ID を使用しています。

**例 1: 特定の AWS 組織によるサービスへのアクセスを制限する**  
次の認証ポリシーの例では、ポリシーが適用されるサービスネットワーク内のサービスにアクセスする権限を、認証されたすべてのリクエストに付与します。ただし、リクエストは、 条件で指定された AWS 組織に属するプリンシパルから発信される必要があります。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": "*",
         "Action": "vpc-lattice-svcs:Invoke",
         "Resource": "*",
         "Condition": {
            "StringEquals": {
               "aws:PrincipalOrgID": [ 
                  "o-123456example"
               ]
            }
         }
      }
   ]
}
```

------

**例 2: 特定の IAM ロールによるサービスへのアクセスを制限する**  
次の認証ポリシーの例では、`Resource` 要素で指定されたサービスに対して HTTP GET リクエストを行う権限を、IAM ロール `rates-client` を使用するすべての認証されたリクエストに付与します。`Resource` 要素のリソースはポリシーがアタッチされているサービスと同じです。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Effect": "Allow",
         "Principal": {
            "AWS": [
               "arn:aws:iam::123456789012:role/rates-client"
            ]
         },
         "Action": "vpc-lattice-svcs:Invoke",
         "Resource": [
            "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-0123456789abcdef0/*"
         ],
         "Condition": {
            "StringEquals": {
               "vpc-lattice-svcs:RequestMethod": "GET"
            }
         }
      }
   ]
}
```

------

**例 3: 特定の VPC の認証されたプリンシパルによるサービスへのアクセスを制限する**  
次の認証ポリシーの例では、VPC ID が `vpc-1a2b3c4d` の VPC のプリンシパルからの認証されたリクエストのみを許可します。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Principal": "*",
         "Action": "vpc-lattice-svcs:Invoke",
         "Resource": "*",
         "Condition": {
            "StringNotEquals": {
               "aws:PrincipalType": "Anonymous"
            },
            "StringEquals": {
               "vpc-lattice-svcs:SourceVpc": "vpc-1a2b3c4d"
            }
         }
      }
   ]
}
```

------

## 認可の仕組み
<a name="auth-policies-evaluation-logic"></a>

VPC Lattice サービスがリクエストを受信すると、 AWS エンフォースメントコードは関連するすべてのアクセス許可ポリシーを一緒に評価して、リクエストを承認または拒否するかどうかを決定します。リクエストコンテキストに適用されるすべての IAM アイデンティティベースのポリシーと認可ポリシーを認可時に評価します。デフォルトでは、認証タイプが `AWS_IAM` の場合、すべてのリクエストは暗黙的に拒否されます。関連するすべてのポリシーからの明示的な許可はデフォルトに優先します。

認可では次のことが行われます。
+ 関連するすべての IAM アイデンティティベースのポリシーと認証ポリシーを収集します。
+ 収集したポリシーのセットを評価します。
  + リクエスタ (IAM ユーザーまたはロールなど) が属するアカウントにおいて、オペレーションを実行する権限を持っていることを確認します。明示的な許可ステートメントがない場合、 AWS はリクエストを承認しません。
  + リクエストがサービスネットワークの認証ポリシーによって許可されていることを確認します。認証ポリシーが有効であっても明示的な許可ステートメントがない場合、 AWS はリクエストを許可しません。明示的な許可ステートメントがある場合、または認証タイプが `NONE` の場合、コードが継続します。
  + リクエストがサービスの認証ポリシーによって許可されていることを確認します。認証ポリシーが有効であっても明示的な許可ステートメントがない場合、 AWS はリクエストを許可しません。明示的な許可ステートメントがある場合、または認証タイプが `NONE` の場合、エンフォースメントコードにより**許可**の最終決定が返されます。
  + ポリシー内の明示的な拒否は、すべての許可に優先します。

次の図は認可の流れを示しています。リクエストが行われると、関連するポリシーによって特定のサービスへのリクエストアクセスが許可または拒否されます。

![\[認可の流れ\]](http://docs.aws.amazon.com/ja_jp/vpc-lattice/latest/ug/images/authpolicy.png)


# セキュリティグループを使用して VPC Lattice のトラフィックを制御する
<a name="security-groups"></a>

AWS セキュリティグループは仮想ファイアウォールとして機能し、関連付けられているエンティティとの間のネットワークトラフィックを制御します。VPC Lattice を使用すると、セキュリティグループを作成し、VPC をサービスネットワークに接続する VPC 関連付けに割り当てて、サービスネットワークに追加のネットワークレベルのセキュリティ保護を適用できます。VPC エンドポイントを使用して VPC をサービスネットワークに接続する場合は、VPC エンドポイントにセキュリティグループを割り当てることもできます。同様に、VPC 内のリソースへのアクセスを有効にするために作成したリソースゲートウェイにセキュリティグループを割り当てることができます。

**Topics**
+ [マネージドプレフィックスリスト](#managed-prefix-list)
+ [「セキュリティグループのルール」](#security-groups-rules)
+ [VPC の関連付けのセキュリティグループを管理する](#service-network-security-group)

## マネージドプレフィックスリスト
<a name="managed-prefix-list"></a>

VPC Lattice には、サービスネットワークの関連付けを使用して VPC をサービスネットワークに接続するときに、VPC Lattice ネットワーク経由でトラフィックをルーティングするために使用される IP アドレスを含むマネージドプレフィックスリストが用意されています。これらの IPsは、プライベートリンクローカル IPsまたはルーティング不可能なパブリック IPs。

 セキュリティグループルールで VPC Lattice マネージドプレフィックスリストを参照できます。これにより、トラフィックはクライアントから VPC Lattice サービスネットワークを経由して VPC Lattice サービスターゲットに流れます。

例えば、EC2 インスタンスが米国西部 (オレゴン) リージョン (`us-west-2`) でターゲットとして登録されているとします。VPC Lattice マネージドプレフィックスリストからのインバウンド HTTPS アクセスを許可するルールをインスタンスのセキュリティグループに追加すると、このリージョンの VPC Lattice トラフィックがインスタンスに到達できるようになります。セキュリティグループから他のすべてのインバウンドルールを削除すると、VPC Lattice 以外のトラフィックがインスタンスに到達することを防げます。

VPC Lattice のマネージドプレフィックスリストの名前は次のとおりです。
+ com.amazonaws.*region*.vpc-lattice
+ com.amazonaws.*region*.ipv6.vpc-lattice

詳細については、「*Amazon VPC ユーザーガイド*」の「[AWSマネージドプレフィックスリスト](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-aws-managed-prefix-lists.html#available-aws-managed-prefix-lists)」を参照してください。

**Windows および macOS クライアント**  
VPC Lattice プレフィックスリストのアドレスは、リンクローカルアドレスとルーティング不可能なパブリックアドレスです。これらのクライアントから VPC Lattice に接続する場合は、マネージドプレフィックスリストの IP アドレスをクライアントのプライマリ IP アドレスに転送するように設定を更新する必要があります。以下は、Windows クライアントの設定を更新するコマンドの例です。 169.254.171.0は、マネージドプレフィックスリストのアドレスの 1 つです。

```
C:\> route add 169.254.171.0 mask 255.255.255.0 primary-ip-address
```

macOS クライアントの設定を更新するコマンドの例を次に示します。 169.254.171.0はマネージドプレフィックスリストのアドレスの 1 つです。

```
sudo route -n add -net 169.254.171.0 primary-ip-address 255.255.255.0
```

静的ルートの作成を回避するには、VPC 内のサービスネットワークエンドポイントを使用して接続を確立することをお勧めします。詳細については、「[サービスネットワーク VPC エンドポイントの関連付けを管理する](service-network-associations.md#service-network-vpc-endpoint-associations)」を参照してください。

## 「セキュリティグループのルール」
<a name="security-groups-rules"></a>

VPC Lattice をセキュリティグループと一緒に使用してもしなくても、既存の VPC セキュリティグループの設定には影響しません。ただし、独自のセキュリティグループをいつでも追加できます。

**主な考慮事項**
+ クライアントのセキュリティグループルールは、VPC Lattice へのアウトバウンドトラフィックを制御します。
+ ターゲットのセキュリティグループルールは、ヘルスチェックトラフィックを含め、VPC Lattice からターゲットへのインバウンドトラフィックを制御します。
+ サービスネットワークと VPC の関連付けに関するセキュリティグループルールは、VPC Lattice サービスネットワークにアクセスできるクライアントを制御します。
+ リソースゲートウェイのセキュリティグループルールは、リソースゲートウェイからリソースへのアウトバウンドトラフィックを制御します。

**リソースゲートウェイからデータベースリソースに流れるトラフィックの推奨アウトバウンドルール**  
トラフィックがリソースゲートウェイからリソースに流れるには、オープンポートのアウトバウンドルールと、リソースの受け入れられたリスナープロトコルを作成する必要があります。


| 目的地 | プロトコル | ポート範囲 | コメント | 
| --- | --- | --- | --- | 
| リソースの CIDR 範囲 | TCP | 3306 | リソースゲートウェイからデータベースへのトラフィックを許可する | 

**サービスネットワークと VPC の関連付けの推奨されるインバウンドルール**  
クライアント VPCs からサービスネットワークに関連付けられたサービスにトラフィックを流れるには、サービスのリスナーポートとリスナープロトコルのインバウンドルールを作成する必要があります。


| ソース | プロトコル | ポート範囲 | コメント | 
| --- | --- | --- | --- | 
| VPC CIDR | listener | listener | クライアントから VPC Lattice へのトラフィックを許可する | 

**クライアントインスタンスから VPC Lattice に流れるトラフィックの推奨されるアウトバウンドルール**  
デフォルトで、セキュリティグループはすべてのアウトバウンドトラフィックを許可します。ただし、カスタムアウトバウンドルールがある場合は、クライアントインスタンスが VPC Lattice サービスネットワークに関連付けられているすべてのサービスに接続できるように、リスナーポートとプロトコルの VPC Lattice プレフィックスへのアウトバウンドトラフィックを許可する必要があります。VPC Lattice のプレフィックスリストの ID を参照することで、このトラフィックを許可できます。


| 目的地 | プロトコル | ポート範囲 | コメント | 
| --- | --- | --- | --- | 
| VPC Lattice プレフィックスリストの ID | listener | listener | クライアントから VPC Lattice へのトラフィックを許可する | 

**VPC Lattice からターゲットインスタンスに流れるトラフィックの推奨されるインバウンドルール**  
トラフィックは VPC Lattice から流れるため、クライアントセキュリティグループをターゲットのセキュリティグループのソースとして使用することはできません。VPC Lattice のプレフィックスリストの ID を参照できます。


| ソース | プロトコル | ポート範囲 | コメント | 
| --- | --- | --- | --- | 
| VPC Lattice プレフィックスリストの ID | target | target | VPC Lattice からターゲットへのトラフィックを許可する | 
| VPC Lattice プレフィックスリストの ID | health check | health check | VPC Lattice からターゲットへのヘルスチェックトラフィックを許可する | 

## VPC の関連付けのセキュリティグループを管理する
<a name="service-network-security-group"></a>

を使用して、VPC のセキュリティグループ AWS CLI を表示、追加、または更新して、サービスのネットワークの関連付けを行うことができます。を使用する場合 AWS CLI、コマンドはプロファイル用に AWS リージョン 設定された で実行されることに注意してください。別のリージョンでコマンドを実行する場合は、プロファイルのデフォルトのリージョンを変更するか、コマンドに `--region` パラメータを使用します。

開始する前に、サービスネットワークに追加する VPC と同じ VPC でセキュリティグループを作成していることを確認します。詳細については、*「Amazon VPC ユーザーガイド*」の[「セキュリティグループを使用してリソースへのトラフィックを制御する](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-security-groups.html)」を参照してください。

**コンソールを使用して VPC の関連付け作成時にセキュリティグループを追加する方法**

1. Amazon VPC コンソールの [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) を開いてください。

1. ナビゲーションペインの **[VPC Lattice]** で、**[サービスネットワーク]** を選択します。

1. サービスネットワークの名前を選択して、その詳細ページを開きます。

1. **[VPC の関連付け]** タブで **[VPC の関連付けを作成]**、**[Add VPC association]** の順に選択します。

1. VPC と最大 5 つのセキュリティグループを選択します。

1. **[Save changes]** (変更の保存) をクリックします。

**コンソールを使用して既存の VPC の関連付けのセキュリティグループを追加または更新する方法**

1. Amazon VPC コンソールの [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) を開いてください。

1. ナビゲーションペインの **[VPC Lattice]** で、**[サービスネットワーク]** を選択します。

1. サービスネットワークの名前を選択して、その詳細ページを開きます。

1. **[VPC の関連付け]** タブで関連付けのチェックボックスをオンにして、**[アクション]** 、**[セキュリティグループの編集]** の順に選択します。

1. 必要に応じて、セキュリティグループを追加または削除します。

1. **[Save changes]** (変更の保存) をクリックします。

**を使用して VPC 関連付けを作成するときにセキュリティグループを追加するには AWS CLI**  
[create-service-network-vpc-association](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/create-service-network-vpc-association.html) コマンドを使用して、VPC の関連付けの VPC の ID と追加するセキュリティグループの ID を指定します。

```
aws vpc-lattice create-service-network-vpc-association \
    --service-network-identifier sn-0123456789abcdef0 \
    --vpc-identifier vpc-1a2b3c4d \
    --security-group-ids sg-7c2270198example
```

成功すると、コマンドは以下のような出力を返します。

```
{
  "arn": "arn",
  "createdBy": "464296918874",
  "id": "snva-0123456789abcdef0",
  "status": "CREATE_IN_PROGRESS",
  "securityGroupIds": ["sg-7c2270198example"]
}
```

**を使用して既存の VPC 関連付けのセキュリティグループを追加または更新するには AWS CLI**  
[update-service-network-vpc-association](https://docs.aws.amazon.com/cli/latest/reference/vpc-lattice/update-service-network-vpc-association.html) コマンドを使用して、サービスネットワークの ID とセキュリティグループの ID を指定します。このセキュリティグループは以前に関連付けられたセキュリティグループを上書きします。リストを更新するときに、1 つ以上のセキュリティグループを定義してください。

```
aws vpc-lattice update-service-network-vpc-association 
    --service-network-vpc-association-identifier sn-903004f88example \
    --security-group-ids sg-7c2270198example sg-903004f88example
```

**警告**  
すべてのセキュリティグループを削除することはできません。まず VPC の関連付けを削除し、次にセキュリティグループなしで VPC の関連付けを再度作成する必要があります。VPC の関連付けを削除する際は慎重に行ってください。これはトラフィックがそのサービスネットワーク内のサービスに到達することを防いでいます。

# ネットワーク ACL を使用して VPC Lattice へのトラフィックを制御する
<a name="network-acls"></a>

ネットワークアクセスコントロールリスト (ACL) は、サブネットレベルで特定のインバウンドまたはアウトバウンドのトラフィックを許可または拒否します。デフォルトのネットワーク ACL では、すべてのインバウンドトラフィックとアウトバウンドトラフィックを許可します。サブネットのカスタムネットワーク ACLs を作成して、追加のセキュリティレイヤーを提供できます。詳細については、「Amazon VPC ユーザーガイド」の「[ネットワーク ACL](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-network-acls.html)」を参照してください。

**Topics**
+ [クライアントサブネットACLs](#network-acl-client-subnets)
+ [ターゲットサブネットのネットワーク ACLs](#network-acl-target-subnets)

## クライアントサブネットACLs
<a name="network-acl-client-subnets"></a>

クライアントサブネットACLs は、クライアントと VPC Lattice 間のトラフィックを許可する必要があります。VPC Lattice の[マネージドプレフィックスリストから](security-groups.md#managed-prefix-list)許可する IP アドレス範囲を取得できます。

インバウンドルールの例を次に示します。


| ソース | プロトコル | ポート範囲 | コメント | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | TCP | 1025-65535 | VPC Lattice からクライアントへのトラフィックを許可する | 

以下は、アウトバウンドルールの例です。


| 目的地 | プロトコル | ポート範囲 | コメント | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | listener | listener | クライアントから VPC Lattice へのトラフィックを許可する | 

## ターゲットサブネットのネットワーク ACLs
<a name="network-acl-target-subnets"></a>

ターゲットサブネットACLs は、ターゲットポートとヘルスチェックポートの両方でターゲットと VPC Lattice 間のトラフィックを許可する必要があります。VPC Lattice の[マネージドプレフィックスリストから](security-groups.md#managed-prefix-list)許可する IP アドレス範囲を取得できます。

インバウンドルールの例を次に示します。


| ソース | プロトコル | ポート範囲 | コメント | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | target | target | VPC Lattice からターゲットへのトラフィックを許可する | 
| vpc\$1lattice\$1cidr\$1block | health check | health check | VPC Lattice からターゲットへのヘルスチェックトラフィックを許可する | 

以下は、アウトバウンドルールの例です。


| 目的地 | プロトコル | ポート範囲 | コメント | 
| --- | --- | --- | --- | 
| vpc\$1lattice\$1cidr\$1block | target | 1024-65535 | ターゲットから VPC Lattice へのトラフィックを許可する | 
| vpc\$1lattice\$1cidr\$1block | health check | 1024-65535 | ターゲットから VPC Lattice へのヘルスチェックトラフィックを許可する | 

# Amazon VPC Lattice の SIGv4 認証リクエスト
<a name="sigv4-authenticated-requests"></a>

VPC Lattice は、クライアント認証に Signature Version 4 (SIGv4) または Signature Version 4A (SIGv4A) を使用します。詳細については、「*IAM ユーザーガイド*」の「[API リクエストに対するAWS 署名バージョン 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html)」を参照してください。

**考慮事項**
+ VPC Lattice は、SIGv4 または SIGv4A で署名されたリクエストの認証を試みます。認証なしではリクエストは失敗します。
+ VPC Lattice ではペイロード署名をサポートしていません。`x-amz-content-sha256` ヘッダーの値を `"UNSIGNED-PAYLOAD"` に設定して送信する必要があります。

**Topics**
+ [Python](#sigv4-authenticated-requests-python)
+ [Java](#sigv4-authenticated-requests-java-custom-interceptor)
+ [Node.js](#sigv4-authenticated-requests-nodejs)
+ [Golang](#sigv4-authenticated-requests-golang)
+ [Golang - GRPC](#sigv4-authenticated-requests-golang-grpc)

## Python
<a name="sigv4-authenticated-requests-python"></a>

この例では、署名付きリクエストを安全な接続経由でネットワークに登録されたサービスに送信します。[requests](https://requests.readthedocs.io/en/latest/) を使用する場合、[botocore](https://github.com/boto/botocore) パッケージにより認証プロセスが効率化されますが、必須ではありません。詳細については、Boto3 ドキュメントの[「認証情報](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html)」を参照してください。

`botocore` および `awscrt`パッケージをインストールするには、次のコマンドを使用します。詳細については、[AWS 「CRT Python](https://pypi.org/project/awscrt/)」を参照してください。

```
pip install botocore awscrt
```

Lambda でクライアントアプリケーションを実行する場合は、[Lambda レイヤー](https://docs.aws.amazon.com/lambda/latest/dg/python-layers.html)を使用して必要なモジュールをインストールするか、デプロイパッケージに含めます。

次の例では、プレースホルダー値を独自の値に置き換えます。

------
#### [ SIGv4 ]

```
from botocore import crt
import requests 
from botocore.awsrequest import AWSRequest
import botocore.session

if __name__ == '__main__':
    session = botocore.session.Session()
    signer = crt.auth.CrtSigV4Auth(session.get_credentials(), 'vpc-lattice-svcs', 'us-west-2')
    endpoint = 'https://data-svc-022f67d3a42.1234abc.vpc-lattice-svcs.us-west-2.on.aws'
    data = "some-data-here"
    headers = {'Content-Type': 'application/json', 'x-amz-content-sha256': 'UNSIGNED-PAYLOAD'}
    request = AWSRequest(method='POST', url=endpoint, data=data, headers=headers)
    request.context["payload_signing_enabled"] = False
    signer.add_auth(request)
    
    prepped = request.prepare()
    
    response = requests.post(prepped.url, headers=prepped.headers, data=data)
    print(response.text)
```

------
#### [ SIGv4A ]

```
from botocore import crt
import requests 
from botocore.awsrequest import AWSRequest
import botocore.session

if __name__ == '__main__':
    session = botocore.session.Session()
    signer = crt.auth.CrtSigV4AsymAuth(session.get_credentials(), 'vpc-lattice-svcs', '*')
    endpoint = 'https://data-svc-022f67d3a42.1234abc.vpc-lattice-svcs.us-west-2.on.aws'
    data = "some-data-here"
    headers = {'Content-Type': 'application/json', 'x-amz-content-sha256': 'UNSIGNED-PAYLOAD'}
    request = AWSRequest(method='POST', url=endpoint, data=data, headers=headers)
    request.context["payload_signing_enabled"] = False 
    signer.add_auth(request)
    
    prepped = request.prepare()
    
    response = requests.post(prepped.url, headers=prepped.headers, data=data)
    print(response.text)
```

------

## Java
<a name="sigv4-authenticated-requests-java-custom-interceptor"></a>

この例は、カスタムインターセプターを使用してリクエスト署名を実行する方法を示しています。[AWS SDK for Java 2.x](https://github.com/aws/aws-sdk-java-v2) からのデフォルトの認証情報プロバイダークラスを使用して、正しい認証情報を取得します。特定の認証情報プロバイダーを使用する場合は、[AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials.html) から選択できます。では、HTTPS 経由の署名なしペイロードのみ AWS SDK for Java が許可されます。ただし、署名者を拡張することによって、HTTP 経由の未署名のペイロードをサポートできます。

------
#### [ SIGv4 ]

```
package com.example;

import software.amazon.awssdk.http.auth.aws.signer.AwsV4HttpSigner;
import software.amazon.awssdk.http.auth.spi.signer.SignedRequest;

import software.amazon.awssdk.http.SdkHttpMethod;
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity;
import software.amazon.awssdk.http.SdkHttpRequest;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.http.HttpExecuteRequest;
import software.amazon.awssdk.http.HttpExecuteResponse;
import java.io.IOException;
import java.net.URI;

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;

public class sigv4 {

    public static void main(String[] args) {
        AwsV4HttpSigner signer = AwsV4HttpSigner.create();

        AwsCredentialsIdentity credentials = DefaultCredentialsProvider.create().resolveCredentials();

        if (args.length < 2) {
            System.out.println("Usage: sample <url> <region>");
            System.exit(1);
        }
        // Create the HTTP request to be signed
        var url = args[0];
        SdkHttpRequest httpRequest = SdkHttpRequest.builder()
                .uri(URI.create(url))
                .method(SdkHttpMethod.GET)
                .build();

        SignedRequest signedRequest = signer.sign(r -> r.identity(credentials)
                .request(httpRequest)
                .putProperty(AwsV4HttpSigner.SERVICE_SIGNING_NAME, "vpc-lattice-svcs")
                .putProperty(AwsV4HttpSigner.PAYLOAD_SIGNING_ENABLED, false)
                .putProperty(AwsV4HttpSigner.REGION_NAME, args[1]));

        System.out.println("[*] Raw request headers:");
        signedRequest.request().headers().forEach((key, values) -> {
            values.forEach(value -> System.out.println("  " + key + ": " + value));
        });

        try (SdkHttpClient httpClient = ApacheHttpClient.create()) {
            HttpExecuteRequest httpExecuteRequest = HttpExecuteRequest.builder()
                    .request(signedRequest.request())
                    .contentStreamProvider(signedRequest.payload().orElse(null))
                    .build();

            System.out.println("[*] Sending request to: " + url);

            HttpExecuteResponse httpResponse = httpClient.prepareRequest(httpExecuteRequest).call();

            System.out.println("[*] Request sent");

            System.out.println("[*] Response status code: " + httpResponse.httpResponse().statusCode());
            // Read and print the response body
            httpResponse.responseBody().ifPresent(inputStream -> {
                try {
                    String responseBody = new String(inputStream.readAllBytes());
                    System.out.println("[*] Response body: " + responseBody);
                } catch (IOException e) {
                    System.err.println("[*] Failed to read response body");
                    e.printStackTrace();
                } finally {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        System.err.println("[*] Failed to close input stream");
                        e.printStackTrace();
                    }
                }
            });
        } catch (IOException e) {
            System.err.println("[*] HTTP Request Failed.");
            e.printStackTrace();
        }

    }
}
```

------
#### [ SIGv4A ]

この例では、 への追加の依存関係が必要です`software.amazon.awssdk:http-auth-aws-crt`。

```
package com.example;


import software.amazon.awssdk.http.auth.aws.signer.AwsV4aHttpSigner;
import software.amazon.awssdk.http.auth.aws.signer.RegionSet;
import software.amazon.awssdk.http.auth.spi.signer.SignedRequest;

import software.amazon.awssdk.http.SdkHttpMethod;
import software.amazon.awssdk.http.SdkHttpClient;
import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity;
import software.amazon.awssdk.http.SdkHttpRequest;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.http.HttpExecuteRequest;
import software.amazon.awssdk.http.HttpExecuteResponse;
import java.io.IOException;
import java.net.URI;
import java.util.Arrays;

import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;

public class sigv4a {
    
    public static void main(String[] args) {
        AwsV4aHttpSigner signer = AwsV4aHttpSigner.create();

        AwsCredentialsIdentity credentials = DefaultCredentialsProvider.create().resolveCredentials();

        if (args.length < 2) {
            System.out.println("Usage: sample <url> <regionset>");
            System.exit(1);
        }
        // Create the HTTP request to be signed
        var url = args[0];
        SdkHttpRequest httpRequest = SdkHttpRequest.builder()
                .uri(URI.create(url))
                .method(SdkHttpMethod.GET)
                .build();

        SignedRequest signedRequest = signer.sign(r -> r.identity(credentials)
                .request(httpRequest)
                .putProperty(AwsV4aHttpSigner.SERVICE_SIGNING_NAME, "vpc-lattice-svcs")
                .putProperty(AwsV4aHttpSigner.PAYLOAD_SIGNING_ENABLED, false)
                .putProperty(AwsV4aHttpSigner.REGION_SET, RegionSet.create(String.join(" ",Arrays.copyOfRange(args, 1, args.length)))));

        System.out.println("[*] Raw request headers:");
        signedRequest.request().headers().forEach((key, values) -> {
            values.forEach(value -> System.out.println("  " + key + ": " + value));
        });

        try (SdkHttpClient httpClient = ApacheHttpClient.create()) {
            HttpExecuteRequest httpExecuteRequest = HttpExecuteRequest.builder()
                    .request(signedRequest.request())
                    .contentStreamProvider(signedRequest.payload().orElse(null))
                    .build();

            System.out.println("[*] Sending request to: " + url);

            HttpExecuteResponse httpResponse = httpClient.prepareRequest(httpExecuteRequest).call();

            System.out.println("[*] Request sent");

            System.out.println("[*] Response status code: " + httpResponse.httpResponse().statusCode());
            // Read and print the response body
            httpResponse.responseBody().ifPresent(inputStream -> {
                try {
                    String responseBody = new String(inputStream.readAllBytes());
                    System.out.println("[*] Response body: " + responseBody);
                } catch (IOException e) {
                    System.err.println("[*] Failed to read response body");
                    e.printStackTrace();
                } finally {
                    try {
                        inputStream.close();
                    } catch (IOException e) {
                        System.err.println("[*] Failed to close input stream");
                        e.printStackTrace();
                    }
                }
            });
        } catch (IOException e) {
            System.err.println("[*] HTTP Request Failed.");
            e.printStackTrace();
        }
    }
}
```

------

## Node.js
<a name="sigv4-authenticated-requests-nodejs"></a>

この例では、[aws-crt NodeJS バインディング](https://github.com/awslabs/aws-crt-nodejs)を使用して HTTPS 経由の署名付きリクエストを送信しています。

`aws-crt` パッケージをインストールするには、次のコマンドを使用します。

```
npm -i aws-crt
```

`AWS_REGION` 環境変数が存在する場合、この例では `AWS_REGION` で指定されたリージョンを使用しています。デフォルトのリージョンは `us-east-1` です。

------
#### [ SIGv4 ]

```
const https = require('https')
const crt = require('aws-crt')
const { HttpRequest } = require('aws-crt/dist/native/http')

function sigV4Sign(method, endpoint, service, algorithm) {
    const host = new URL(endpoint).host
    const request = new HttpRequest(method, endpoint)
    request.headers.add('host', host)
    // crt.io.enable_logging(crt.io.LogLevel.INFO)
    const config = {
        service: service,
        region: process.env.AWS_REGION ? process.env.AWS_REGION : 'us-east-1',
        algorithm: algorithm,
        signature_type: crt.auth.AwsSignatureType.HttpRequestViaHeaders,
        signed_body_header: crt.auth.AwsSignedBodyHeaderType.XAmzContentSha256,
        signed_body_value: crt.auth.AwsSignedBodyValue.UnsignedPayload,
        provider: crt.auth.AwsCredentialsProvider.newDefault()
    }

    return crt.auth.aws_sign_request(request, config)
}

if (process.argv.length === 2) {
  console.error(process.argv[1] + ' <url>')
  process.exit(1)
}

const algorithm = crt.auth.AwsSigningAlgorithm.SigV4;

sigV4Sign('GET', process.argv[2], 'vpc-lattice-svcs', algorithm).then(
  httpResponse => {
    var headers = {}

    for (const sigv4header of httpResponse.headers) {
      headers[sigv4header[0]] = sigv4header[1]
    }

    const options = {
      hostname: new URL(process.argv[2]).host,
      path: new URL(process.argv[2]).pathname,
      method: 'GET',
      headers: headers
    }

    req = https.request(options, res => {
      console.log('statusCode:', res.statusCode)
      console.log('headers:', res.headers)
      res.on('data', d => {
        process.stdout.write(d)
      })
    })
    req.on('error', err => {
      console.log('Error: ' + err)
    })
    req.end()
  }
)
```

------
#### [ SIGv4A ]

```
const https = require('https')
const crt = require('aws-crt')
const { HttpRequest } = require('aws-crt/dist/native/http')

function sigV4Sign(method, endpoint, service, algorithm) {
    const host = new URL(endpoint).host
    const request = new HttpRequest(method, endpoint)
    request.headers.add('host', host)
    // crt.io.enable_logging(crt.io.LogLevel.INFO)
    const config = {
        service: service,
        region: process.env.AWS_REGION ? process.env.AWS_REGION : 'us-east-1',
        algorithm: algorithm,
        signature_type: crt.auth.AwsSignatureType.HttpRequestViaHeaders,
        signed_body_header: crt.auth.AwsSignedBodyHeaderType.XAmzContentSha256,
        signed_body_value: crt.auth.AwsSignedBodyValue.UnsignedPayload,
        provider: crt.auth.AwsCredentialsProvider.newDefault()
    }

    return crt.auth.aws_sign_request(request, config)
}

if (process.argv.length === 2) {
  console.error(process.argv[1] + ' <url>')
  process.exit(1)
}

const algorithm = crt.auth.AwsSigningAlgorithm.SigV4Asymmetric;

sigV4Sign('GET', process.argv[2], 'vpc-lattice-svcs', algorithm).then(
  httpResponse => {
    var headers = {}

    for (const sigv4header of httpResponse.headers) {
      headers[sigv4header[0]] = sigv4header[1]
    }

    const options = {
      hostname: new URL(process.argv[2]).host,
      path: new URL(process.argv[2]).pathname,
      method: 'GET',
      headers: headers
    }

    req = https.request(options, res => {
      console.log('statusCode:', res.statusCode)
      console.log('headers:', res.headers)
      res.on('data', d => {
        process.stdout.write(d)
      })
    })
    req.on('error', err => {
      console.log('Error: ' + err)
    })
    req.end()
  }
)
```

------

## Golang
<a name="sigv4-authenticated-requests-golang"></a>

この例では、[Go 用の Smithy コードジェネレーター](https://github.com/aws/smithy-go)と Go [AWS プログラミング言語用の SDK ](https://github.com/aws/aws-sdk-go)を使用して、リクエスト署名リクエストを処理します。この例では、Go バージョン 1.21 以降が必要です。

------
#### [ SIGv4 ]

```
package main
 
import (
        "context"
        "flag"
        "fmt"
        "io"
        "log"
        "net/http"
        "net/http/httputil"
        "os"
        "strings"
 
        "github.com/aws/aws-sdk-go-v2/aws"
        "github.com/aws/aws-sdk-go-v2/config"
        "github.com/aws/smithy-go/aws-http-auth/credentials"
        "github.com/aws/smithy-go/aws-http-auth/sigv4"
        v4 "github.com/aws/smithy-go/aws-http-auth/v4"
)
 
type nopCloser struct {
        io.ReadSeeker
}
 
func (nopCloser) Close() error {
        return nil
}
 
type stringFlag struct {
        set   bool
        value string
}
 
 
        flag.PrintDefaults()
        os.Exit(1)
}
 
func main() {
        flag.Parse()
        if !url.set || !region.set {
                Usage()
        }
 
        cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithClientLogMode(aws.LogSigning))
        if err != nil {
                log.Fatalf("failed to load SDK configuration, %v", err)
        }
 
        if len(os.Args) < 2 {
                log.Fatalf("Usage: go run main.go  <url>")
        }
 
        // Retrieve credentials from an SDK source, such as the instance profile
        sdkCreds, err := cfg.Credentials.Retrieve(context.TODO())
        if err != nil {
                log.Fatalf("Unable to retrieve credentials from SDK, %v", err)
        }
 
        creds := credentials.Credentials{
                AccessKeyID:     sdkCreds.AccessKeyID,
                SecretAccessKey: sdkCreds.SecretAccessKey,
                SessionToken:    sdkCreds.SessionToken,
        }
 
        // Add a payload body, which will not be part of the signature calculation
        body := nopCloser{strings.NewReader(`Example payload body`)}
 
        req, _ := http.NewRequest(http.MethodPost, url.value, body)
 
        // Create a sigv4a signer with specific options
        signer := sigv4.New(func(o *v4.SignerOptions) {
                o.DisableDoublePathEscape = true
                // This will add the UNSIGNED-PAYLOAD sha256 header
                o.AddPayloadHashHeader = true
                o.DisableImplicitPayloadHashing = true
        })
 
        // Perform the signing on req, using the credentials we retrieved from the SDK
        err = signer.SignRequest(&sigv4.SignRequestInput{
                Request:     req,
                Credentials: creds,
                Service:     "vpc-lattice-svcs",
                Region: region.String(),
        })
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        res, err := httputil.DumpRequest(req, true)
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Raw request\n%s\n", string(res))
 
        log.Printf("[*] Sending request to %s\n", url.value)
 
        resp, err := http.DefaultClient.Do(req)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Request sent\n")
 
        log.Printf("[*] Response status code: %d\n", resp.StatusCode)
 
        respBody, err := io.ReadAll(resp.Body)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Response body: \n%s\n", respBody)
}
```

------
#### [ SIGv4A ]

```
package main
 
import (
        "context"
        "flag"
        "fmt"
        "io"
        "log"
        "net/http"
        "net/http/httputil"
        "os"
        "strings"
 
        "github.com/aws/aws-sdk-go-v2/aws"
        "github.com/aws/aws-sdk-go-v2/config"
        "github.com/aws/smithy-go/aws-http-auth/credentials"
        "github.com/aws/smithy-go/aws-http-auth/sigv4a"
        v4 "github.com/aws/smithy-go/aws-http-auth/v4"
)
 
type nopCloser struct {
        io.ReadSeeker
}
 
func (nopCloser) Close() error {
        return nil
}
 
type stringFlag struct {
 
func main() {
        flag.Parse()
        if !url.set || !regionSet.set {
                Usage()
        }
 
        cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithClientLogMode(aws.LogSigning))
        if err != nil {
                log.Fatalf("failed to load SDK configuration, %v", err)
        }
 
        if len(os.Args) < 2 {
                log.Fatalf("Usage: go run main.go <url>")
        }
 
        // Retrieve credentials from an SDK source, such as the instance profile
        sdkCreds, err := cfg.Credentials.Retrieve(context.TODO())
        if err != nil {
                log.Fatalf("Unable to retrieve credentials from SDK, %v", err)
        }
 
        creds := credentials.Credentials{
                AccessKeyID:     sdkCreds.AccessKeyID,
                SecretAccessKey: sdkCreds.SecretAccessKey,
                SessionToken:    sdkCreds.SessionToken,
        }
 
        // Add a payload body, which will not be part of the signature calculation
        body := nopCloser{strings.NewReader(`Example payload body`)}
 
        req, _ := http.NewRequest(http.MethodPost, url.value, body)
 
        // Create a sigv4a signer with specific options
        signer := sigv4a.New(func(o *v4.SignerOptions) {
                o.DisableDoublePathEscape = true
                // This will add the UNSIGNED-PAYLOAD sha256 header
                o.AddPayloadHashHeader = true
                o.DisableImplicitPayloadHashing = true
        })
 
        // Create a slice out of the provided regionset
        rs := strings.Split(regionSet.value, ",")
 
        // Perform the signing on req, using the credentials we retrieved from the SDK
        err = signer.SignRequest(&sigv4a.SignRequestInput{
                Request:     req,
                Credentials: creds,
                Service:     "vpc-lattice-svcs",
                RegionSet: rs,
        })
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        res, err := httputil.DumpRequest(req, true)
 
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Raw request\n%s\n", string(res))
 
        log.Printf("[*] Sending request to %s\n", url.value)
 
        resp, err := http.DefaultClient.Do(req)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Request sent\n")
 
        log.Printf("[*] Response status code: %d\n", resp.StatusCode)
 
        respBody, err := io.ReadAll(resp.Body)
        if err != nil {
                log.Fatalf("%s", err)
        }
 
        log.Printf("[*] Response body: \n%s\n", respBody)
}
```

------

## Golang - GRPC
<a name="sigv4-authenticated-requests-golang-grpc"></a>

この例では、[AWS Go プログラミング言語の SDK](https://github.com/aws/aws-sdk-go-v2/) を使用して GRPC リクエストのリクエスト署名を処理します。これは、GRPC サンプルコードリポジトリの[エコーサーバー](https://github.com/grpc/grpc-go/tree/master/examples/features/proto/echo)で使用できます。

```
package main

import (
    "context"
    "crypto/tls"
    "crypto/x509"

    "flag"
    "fmt"
    "log"
    "net/http"
    "net/url"
    "strings"
    "time"

    "google.golang.org/grpc"
    "google.golang.org/grpc/credentials"

    "github.com/aws/aws-sdk-go-v2/aws"
    v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
    "github.com/aws/aws-sdk-go-v2/config"

    ecpb "google.golang.org/grpc/examples/features/proto/echo"
)

const (
    headerContentSha    = "x-amz-content-sha256"
    headerSecurityToken = "x-amz-security-token"
    headerDate          = "x-amz-date"
    headerAuthorization = "authorization"
    unsignedPayload     = "UNSIGNED-PAYLOAD"
)

type SigV4GrpcSigner struct {
    service      string
    region       string
    credProvider aws.CredentialsProvider
    signer       *v4.Signer
}

func NewSigV4GrpcSigner(service string, region string, credProvider aws.CredentialsProvider) *SigV4GrpcSigner {
    signer := v4.NewSigner()
    return &SigV4GrpcSigner{
        service:      service,
        region:       region,
        credProvider: credProvider,
        signer:       signer,
    }
}

func (s *SigV4GrpcSigner) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {
    ri, _ := credentials.RequestInfoFromContext(ctx)
    creds, err := s.credProvider.Retrieve(ctx)
    if err != nil {
        return nil, fmt.Errorf("failed to load credentials: %w", err)
    }

    // The URI we get here is scheme://authority/service/ - for siging we want to include the RPC name
    // But RequestInfoFromContext only has the combined /service/rpc-name - so read the URI, and
    // replace the Path with what we get from RequestInfo.
    parsed, err := url.Parse(uri[0])
    if err != nil {
        return nil, err
    }
    parsed.Path = ri.Method

    // Build a request for the signer.
    bodyReader := strings.NewReader("")
    req, err := http.NewRequest("POST", uri[0], bodyReader)
    if err != nil {
        return nil, err
    }
    date := time.Now()
    req.Header.Set(headerContentSha, unsignedPayload)
    req.Header.Set(headerDate, date.String())
    if creds.SessionToken != "" {
        req.Header.Set(headerSecurityToken, creds.SessionToken)
    }
    // The signer wants this as //authority/path
    // So get this by triming off the scheme and the colon before the first slash.
    req.URL.Opaque = strings.TrimPrefix(parsed.String(), parsed.Scheme+":")

    err = s.signer.SignHTTP(context.Background(), creds, req, unsignedPayload, s.service, s.region, date)
    if err != nil {
        return nil, fmt.Errorf("failed to sign request: %w", err)
    }

    // Pull the relevant headers out of the signer, and return them to get
    // included in the request we make.
    reqHeaders := map[string]string{
        headerContentSha:    req.Header.Get(headerContentSha),
        headerDate:          req.Header.Get(headerDate),
        headerAuthorization: req.Header.Get(headerAuthorization),
    }
    if req.Header.Get(headerSecurityToken) != "" {
        reqHeaders[headerSecurityToken] = req.Header.Get(headerSecurityToken)
    }

    return reqHeaders, nil
}

func (c *SigV4GrpcSigner) RequireTransportSecurity() bool {
    return true
}

var addr = flag.String("addr", "some-lattice-service:443", "the address to connect to")
var region = flag.String("region", "us-west-2", "region")

func callUnaryEcho(client ecpb.EchoClient, message string) {
    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
    defer cancel()
    resp, err := client.UnaryEcho(ctx, &ecpb.EchoRequest{Message: message})
    if err != nil {
        log.Fatalf("client.UnaryEcho(_) = _, %v: ", err)
    }
    fmt.Println("UnaryEcho: ", resp.Message)
}

func main() {
    flag.Parse()
    cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithClientLogMode(aws.LogSigning))
    if err != nil {
        log.Fatalf("failed to load SDK configuration, %v", err)
    }

    pool, _ := x509.SystemCertPool()
    tlsConfig := &tls.Config{
        RootCAs: pool,
    }

    authority, _, _ := strings.Cut(*addr, ":") // Remove the port from the addr
    opts := []grpc.DialOption{
        grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig)),

        // Lattice needs both the Authority to be set (without a port), and the SigV4 signer
        grpc.WithAuthority(authority),
        grpc.WithPerRPCCredentials(NewSigV4GrpcSigner("vpc-lattice-svcs", *region, cfg.Credentials)),
    }

    conn, err := grpc.Dial(*addr, opts...)

    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    rgc := ecpb.NewEchoClient(conn)

    callUnaryEcho(rgc, "hello world")
}
```

# Amazon VPC Lattice でのデータ保護
<a name="data-protection"></a>

責任 AWS [共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)、Amazon VPC Lattice でのデータ保護に適用されます。このモデルで説明されているように、 AWS はすべての を実行するグローバルインフラストラクチャを保護する責任があります AWS クラウド。お客様は、このインフラストラクチャでホストされているコンテンツに対する管理を維持する責任があります。このコンテンツには、使用される AWS のサービス のセキュリティ設定と管理タスクが含まれます。データプライバシーの詳細については、「[データプライバシーのよくある質問](https://aws.amazon.com/compliance/data-privacy-faq/)」を参照してください。欧州でのデータ保護の詳細については、*AWS セキュリティブログ*に投稿された「[AWS 責任共有モデルおよび GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)」のブログ記事を参照してください。

## 転送中の暗号化
<a name="encryption-transit"></a>

VPC Lattice はコントロールプレーンとデータプレーンからなるフルマネージドサービスです。各プレーンはサービスにおいて異なる目的を担っています。コントロールプレーンには、リソースの作成、読み取り/説明、更新、削除、一覧表示 (CRUDL) に使用される管理 APIs ( `CreateService`や など) が用意されています`UpdateService`。VPC Lattice コントロールプレーンへの通信は、転送中に TLS によって保護されます。データプレーンは、サービス間の相互接続を提供する VPC Lattice Invoke API です。TLS は、HTTPS または TLS を使用するときに VPC Lattice データプレーンへの通信を暗号化します。暗号スイートとプロトコルバージョンでは VPC Lattice が提供するデフォルトが使用され、設定はできません。詳細については、「[VPC Lattice サービスの HTTPS リスナー](https-listeners.md)」を参照してください。

## 保管中の暗号化
<a name="encryption-rest"></a>

デフォルトでは、保管中のデータの暗号化により、機密データの保護に伴う運用上のオーバーヘッドと複雑さの軽減につながります。同時に、安全なアプリケーションを構築して、厳格な暗号化のコンプライアンスと規制要件に対応できます。

**Topics**
+ [Amazon S3 マネージドキーを用いたサーバー側の暗号化 (SSE-S3)](#s3-managed-keys)
+ [AWS KMS (SSE-KMS) に保存されている AWS KMS キーによるサーバー側の暗号化](#kms-managed-keys)

### Amazon S3 マネージドキーを用いたサーバー側の暗号化 (SSE-S3)
<a name="s3-managed-keys"></a>

Amazon S3 マネージドキーによるサーバー側の暗号化 (SSE−S3) を使用すると、各オブジェクトは一意のキーで暗号化されます。追加の保護として、定期的にローテーションするルートキーを使用してキー自体を暗号化します。Amazon S3 のサーバー側の暗号化では、利用できるものの中でも最強のブロック暗号の 1 つである、256 ビットの高度暗号化規格 (AES-256) GCM を使用してデータを暗号化します。AES-GCM より前に暗号化されたオブジェクトについては、これらのオブジェクトを復号するために AES-CBC が引き続きサポートされています。詳細については、「[Amazon S3 マネージド暗号化キーによるサーバー側の暗号化 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)」を参照してください。

VPC Lattice アクセスログの S3-managed暗号化キー (S3-S3) によるサーバー側の暗号化を有効にすると、S3 バケットに保存される前に、各アクセスログファイルが自動的に暗号化されます。詳細については、「Amazon CloudWatch ユーザーガイド」の「[Amazon S3 に送信されたログ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-S3)」を参照してください。

### AWS KMS (SSE-KMS) に保存されている AWS KMS キーによるサーバー側の暗号化
<a name="kms-managed-keys"></a>

 AWS KMS キーによるサーバー側の暗号化 (SSE-KMS) は SSE-S3 に似ていますが、このサービスの使用には追加の利点と料金がかかります。 AWS KMS キーには、Amazon S3 内のオブジェクトへの不正アクセスに対する保護を強化する個別のアクセス許可があります。SSE-KMS には、 AWS KMS キーがいつ誰によって使用されたかを示す監査証跡も用意されています。詳細については、「[AWS Key Management Service によるサーバー側の暗号化 (SSE-KMS) の使用](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)」を参照してください。

**Topics**
+ [証明書のプライベートキーの暗号化と復号化](#private-key)
+ [VPC Lattice の暗号化コンテキスト](#encryption-context)
+ [VPC Lattice の暗号化キーをモニタリングする](#monitoring-encryption-keys)

#### 証明書のプライベートキーの暗号化と復号化
<a name="private-key"></a>

ACM 証明書とプライベートキーは、エイリアス **aws/acm** を持つ AWS マネージド KMS キーを使用して暗号化されます。このエイリアスを持つキー ID は、 AWS KMS **AWS マネージドキー**のコンソールで表示できます。

VPC Lattice は ACM リソースに直接アクセスしません。 AWS TLS Connection Manager を使用して、証明書のプライベートキーを保護してアクセスします。ACM 証明書を使用して VPC Lattice サービスを作成すると、VPC Lattice は証明書を AWS TLS 接続マネージャに関連付けます。これは、プレフィックス **aws/acm** を持つマネージドキー AWS KMS に対して AWS で許可を作成することによって行われます。権限はポリシーツールであり、TLS 接続マネージャに暗号化オペレーションでの KMS キーの使用を許可します。この権限により、被付与者のプリンシパル (TLS 接続マネージャ) は指定された権限オペレーションを KMS キーで呼び出し、証明書のプライベートキーを復号化できます。TLS 接続マネージャは証明書と復号化された (プレーンテキストの) プライベートキーを使用して、VPC Lattice サービスのクライアントとの安全な接続 (SSL/TLS セッション) を確立します。証明書と VPC Lattice サービスとの関連付けが解除されると、この許可は廃止されます。

KMS キーへのアクセスを削除する場合は、 または の `update-service` コマンドを使用して、サービスから証明書を置き換え AWS マネジメントコンソール または削除することをお勧めします AWS CLI。

#### VPC Lattice の暗号化コンテキスト
<a name="encryption-context"></a>

[暗号化コンテキスト](https://docs.aws.amazon.com/kms/latest/developerguide/encrypt_context.html)は、プライベートキーの使用目的に関するコンテキスト情報を含むキーと値のペアのオプションセットです。 は、暗号化コンテキストを暗号化されたデータに AWS KMS バインドし、認証された暗号化をサポートする追加の認証済みデータとして使用します。

TLS キーを VPC Lattice と TLS 接続マネージャで使用すると、VPC Lattice サービスの名前が保管中のキーの暗号化に使用される暗号化コンテキストに含まれます。証明書とプライベートキーが使用されている VPC Lattice サービスを確認するには、次のセクションに示すように CloudTrail ログで暗号化コンテキストを表示するか、ACM コンソールの**関連リソース**タブを確認します。

データを復号化するには、そのリクエストに同じ暗号化コンテキストを含めます。VPC Lattice は、すべての AWS KMS 暗号化オペレーションで同じ暗号化コンテキストを使用します。キーは `aws:vpc-lattice:arn`で、値は VPC Lattice サービスの Amazon リソースネーム (ARN) です。

次の例では、`CreateGrant` のようなオペレーションの出力における暗号化コンテキストを示しています。

```
"encryptionContextEquals": {
    "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
}
```

#### VPC Lattice の暗号化キーをモニタリングする
<a name="monitoring-encryption-keys"></a>

VPC Lattice サービスで AWS マネージドキーを使用する場合、 [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)を使用して VPC Lattice が送信するリクエストを追跡できます AWS KMS。

**CreateGrant**  
ACM 証明書を VPC Lattice サービスに追加すると、TLS 接続マネージャが ACM 証明書に関連付けられたプライベートキーを復号できるようにする `CreateGrant` リクエストが自動で送信されます。

`CreateGrant` オペレーションは、**CloudTrail**、イベント**履歴**、**CreateGrant** でイベントとして表示できます。

以下は、 `CreateGrant`オペレーションの CloudTrail イベント履歴のイベントレコードの例です。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "EX_PRINCIPAL_ID",
        "arn": "arn:aws:iam::111122223333:user/Alice",
        "accountId": "111122223333",
        "accessKeyId": "EXAMPLE_KEY_ID",
        "sessionContext": {
            "sessionIssuer": {
                "type": "IAMUser",
                "principalId": "EX_PRINCIPAL_ID",
                "arn": "arn:aws:iam::111122223333:user/Alice",
                "accountId": "111122223333",
                "userName": "Alice"
            },
            "webIdFederationData": {},
            "attributes": {
                "creationDate": "2023-02-06T23:30:50Z",
                "mfaAuthenticated": "false"
            }
        },
        "invokedBy": "acm.amazonaws.com"
    },
    "eventTime": "2023-02-07T00:07:18Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "acm.amazonaws.com",
    "userAgent": "acm.amazonaws.com",
    "requestParameters": {
        "granteePrincipal": "tlsconnectionmanager.amazonaws.com",
        "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "operations": [
            "Decrypt"
        ],
        "constraints": {
            "encryptionContextEquals": {
                "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
                "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
            }
        },
        "retiringPrincipal": "acm.us-west-2.amazonaws.com"
    },
    "responseElements": {
        "grantId": "f020fe75197b93991dc8491d6f19dd3cebb24ee62277a05914386724f3d48758",
        "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    "requestID": "ba178361-8ab6-4bdd-9aa2-0d1a44b2974a",
    "eventID": "8d449963-1120-4d0c-9479-f76de11ce609",
    "readOnly": false,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "eventCategory": "Management"
}
```

上記の`CreateGrant`例では、被付与者プリンシパルは TLS Connection Manager であり、暗号化コンテキストには VPC Lattice サービス ARN があります。

**ListGrants**  
KMS キー ID とアカウント ID を使用して `ListGrants` API を呼び出せます。呼び出すと、指定した KMS キーに対するすべての権限のリストが表示されます。詳細については、「[ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html)」を参照してください。

で次の`ListGrants`コマンドを使用して AWS CLI 、すべての許可の詳細を表示します。

```
aws kms list-grants —key-id your-kms-key-id
```

以下は出力の例です。

```
{
    "Grants": [
        {
            "Operations": [
                "Decrypt"
            ], 
            "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", 
            "Name": "IssuedThroughACM", 
            "RetiringPrincipal": "acm.us-west-2.amazonaws.com", 
            "GranteePrincipal": "tlsconnectionmanager.amazonaws.com", 
            "GrantId": "f020fe75197b93991dc8491d6f19dd3cebb24ee62277a05914386724f3d48758", 
            "IssuingAccount": "arn:aws:iam::111122223333:root", 
            "CreationDate": "2023-02-06T23:30:50Z", 
            "Constraints": {
                "encryptionContextEquals": {
                  "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
                  "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
                }
            }
        }
    ]
}
```

上記の`ListGrants`例では、被付与者プリンシパルは TLS Connection Manager であり、暗号化コンテキストには VPC Lattice サービス ARN があります。

**Decrypt**  
VPC Lattice は TLS 接続マネージャを使用してプライベートキーを復号化する `Decrypt` オペレーションを呼び出し、VPC Lattice サービスで TLS 接続を提供します。`Decrypt` オペレーションは、**CloudTrail** イベント**履歴 Decrypt でイベント**として表示できます。 ****

以下は、 `Decrypt`オペレーションの CloudTrail イベント履歴のイベントレコードの例です。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "type": "AWSService",
        "invokedBy": "tlsconnectionmanager.amazonaws.com"
    },
    "eventTime": "2023-02-07T00:07:23Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "tlsconnectionmanager.amazonaws.com",
    "userAgent": "tlsconnectionmanager.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "aws:acm:arn": "arn:aws:acm:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "aws:vpc-lattice:arn": "arn:aws:vpc-lattice:us-west-2:111122223333:service/svc-0b23c1234567890ab"
        },
        "encryptionAlgorithm": "SYMMETRIC_DEFAULT"
    },
    "responseElements": null,
    "requestID": "12345126-30d5-4b28-98b9-9153da559963",
    "eventID": "abcde202-ba1a-467c-b4ba-f729d45ae521",
    "readOnly": true,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsApiCall",
    "managementEvent": true,
    "recipientAccountId": "111122223333",
    "sharedEventID": "abcde202-ba1a-467c-b4ba-f729d45ae521",
    "eventCategory": "Management"
}
```

# Amazon VPC Lattice のアイデンティティとアクセス管理
<a name="security-iam"></a>

以下のセクションでは、VPC Lattice API アクションを実行できるユーザーを制御することで、 AWS Identity and Access Management (IAM) を使用して VPC Lattice リソースを保護する方法について説明します。

**Topics**
+ [Amazon VPC Lattice で IAM が機能する仕組み](security_iam_service-with-iam.md)
+ [Amazon VPC Lattice API アクセス許可](additional-api-permissions.md)
+ [Amazon VPC Lattice のアイデンティティベースのポリシー](security_iam_id-based-policies.md)
+ [Amazon VPC Lattice のサービスにリンクされたロールの使用](using-service-linked-roles.md)
+ [AWS Amazon VPC Lattice の マネージドポリシー](managed-policies.md)

# Amazon VPC Lattice で IAM が機能する仕組み
<a name="security_iam_service-with-iam"></a>

IAM を使用して VPC Lattice へのアクセスを管理する前に、VPC Lattice で利用できる IAM の機能について説明します。




| IAM 機能 | VPC Lattice のサポート | 
| --- | --- | 
|  [アイデンティティベースのポリシー](#security_iam_service-with-iam-id-based-policies)  |   あり  | 
|  [リソースベースのポリシー](#security_iam_service-with-iam-resource-based-policies)  |   はい  | 
|  [ポリシーアクション](#security_iam_service-with-iam-id-based-policies-actions)  |   あり  | 
|  [ポリシーリソース](#security_iam_service-with-iam-id-based-policies-resources)  |   あり  | 
|  [ポリシー条件キー](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   あり  | 
|  [ACL](#security_iam_service-with-iam-acls)  |   なし   | 
|  [ABAC (ポリシー内のタグ)](#security_iam_service-with-iam-tags)  |   あり  | 
|  [一時的な認証情報](#security_iam_service-with-iam-roles-tempcreds)  |   はい  | 
|  [サービスロール](#security_iam_service-with-iam-roles-service)  |   いいえ   | 
|  [サービスリンクロール](#security_iam_service-with-iam-roles-service-linked)  |   はい  | 

VPC Lattice およびその他の AWS のサービスがほとんどの IAM 機能と連携する方法の概要については、IAM *ユーザーガイド*の[AWS 「IAM と連携する のサービス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照してください。

## VPC Lattice のアイデンティティベースのポリシー
<a name="security_iam_service-with-iam-id-based-policies"></a>

**アイデンティティベースのポリシーのサポート:** あり

アイデンティティベースポリシーは、IAM ユーザー、ユーザーグループ、ロールなど、アイデンティティにアタッチできる JSON 許可ポリシードキュメントです。これらのポリシーは、ユーザーとロールが実行できるアクション、リソース、および条件をコントロールします。アイデンティティベースポリシーの作成方法については、「*IAM ユーザーガイド*」の「[カスタマー管理ポリシーでカスタム IAM アクセス許可を定義する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。

IAM アイデンティティベースのポリシーでは、許可または拒否するアクションとリソース、およびアクションを許可または拒否する条件を指定できます。JSON ポリシーで使用できるすべての要素について学ぶには、「*IAM ユーザーガイド*」の「[IAM JSON ポリシーの要素のリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)」を参照してください。

## VPC Lattice 内のリソースベースのポリシー
<a name="security_iam_service-with-iam-resource-based-policies"></a>

**リソースベースのポリシーのサポート:** あり

リソースベースのポリシーは、 のリソースにアタッチする JSON ポリシードキュメントです AWS。リソースベースのポリシーをサポートする AWS サービスでは、サービス管理者はそれらを使用して、その AWS サービスの特定のリソースへのアクセスを制御できます。ポリシーがアタッチされているリソースの場合、指定されたプリンシパルがそのリソースに対して実行できるアクションと条件は、ポリシーによって定義されます。リソースベースのポリシーで、プリンシパルを指定する必要があります。

VPC Lattice は認証ポリシーをサポートしています。これはサービスネットワーク内のサービスへのアクセスを制御できるリソースベースのポリシーです。詳細については、「[認証ポリシーを使用して VPC Lattice サービスへのアクセスを制御する](auth-policies.md)」を参照してください。

また、VPC Lattice は AWS Resource Access Managerとの統合で使用するリソースベースのアクセス許可ポリシーもサポートしています。これらのリソースベースのポリシーを使用して、サービス、リソース設定、サービスネットワークの他の AWS アカウントまたは組織への接続を管理するアクセス許可を付与できます。詳細については、「[VPC Lattice のエンティティを共有する](sharing.md)」を参照してください。

## VPC Lattice のポリシーアクション
<a name="security_iam_service-with-iam-id-based-policies-actions"></a>

**ポリシーアクションのサポート:** あり

IAM ポリシーステートメントで、IAM をサポートするすべてのサービスからの任意の API アクションを指定できます。VPC Lattice の場合、API アクションの名前に `vpc-lattice:` のプレフィックスを使用します。例えば、`vpc-lattice:CreateService`、`vpc-lattice:CreateTargetGroup`、および `vpc-lattice:PutAuthPolicy` のようになります。

単一のステートメントで複数のアクションを指定するには、次のようにカンマで区切ります。

```
"Action": [ "vpc-lattice:action1", "vpc-lattice:action2" ]
```

ワイルドカードを使用して複数のアクションを指定することもできます。例えば、`Get` という単語で始まるアクション名すべてを次のように指定できます。

```
"Action": "vpc-lattice:Get*"
```

VPC Lattice API アクションの全リストを確認するには、「サービス認可リファレンス」の「[Amazon VPC Lattice で定義されたアクション](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclattice.html#amazonvpclattice-actions-as-permissions)」を参照してください。

## VPC Lattice のポリシーリソース
<a name="security_iam_service-with-iam-id-based-policies-resources"></a>

**ポリシーリソースのサポート:** あり

IAM ポリシーステートメントで、`Resource` 要素は、ステートメントがカバーするオブジェクトを指定します。VPC Lattice では、各 IAM ポリシーステートメントは ARN を使用して指定したリソースに適用されます。

それぞれの Amazon リソースネーム (ARN) 形式はリソースによって異なります。ARN を指定するには、*イタリック体*のテキストを、リソース固有の情報に置き換えます。
+ **アクセスログサブスクリプション:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:accesslogsubscription/access-log-subscription-id"
  ```
+ **リスナー:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:service/service-id/listener/listener-id"
  ```
+ **リソースゲートウェイ**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:resourcegateway/resource-gateway-id"
  ```
+ **リソース設定**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:resourceconfiguration/resource-configuration-id"
  ```
+ **ルール:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:service/service-id/listener/listener-id/rule/rule-id"
  ```
+ **サービス:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:service/service-id"
  ```
+ **サービスネットワーク:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetwork/service-network-id"
  ```
+ **サービスネットワークのサービスの関連付け:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetworkserviceassociation/service-network-service-association-id"
  ```
+ **サービスネットワークリソース設定の関連付け**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetworkresourceassociation/service-network-resource-association-id"
  ```
+ **サービスネットワークの VPC の関連付け:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:servicenetworkvpcassociation/service-network-vpc-association-id"
  ```
+ **ターゲットグループ:**

  ```
  "Resource": "arn:aws:vpc-lattice:region:account-id:targetgroup/target-group-id"
  ```

## VPC Lattice のポリシー条件キー
<a name="security_iam_service-with-iam-id-based-policies-conditionkeys"></a>

**サービス固有のポリシー条件キーのサポート:** あり

管理者は JSON AWS ポリシーを使用して、誰が何にアクセスできるかを指定できます。つまり、どの**プリンシパル**がどの**リソース**に対してどのような**条件下で****アクション**を実行できるかということです。

`Condition` 要素は、定義された基準に基づいてステートメントが実行される時期を指定します。イコールや未満などの[条件演算子](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)を使用して条件式を作成して、ポリシーの条件とリクエスト内の値を一致させることができます。すべての AWS グローバル条件キーを確認するには、*「IAM ユーザーガイド*」の[AWS 「グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。

VPC Lattice 条件キーのリストを確認するには、*「サービス認可リファレンス*」の[「Amazon VPC Lattice の条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclattice.html#amazonvpclattice-policy-keys)」を参照してください。

AWS は、グローバル条件キーとサービス固有の条件キーをサポートしています。 AWS グローバル条件キーの詳細については、*「IAM ユーザーガイド*」の[AWS 「グローバル条件コンテキストキー](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html)」を参照してください。

## VPC Lattice のアクセスコントロールリスト (ACL)
<a name="security_iam_service-with-iam-acls"></a>

**ACL のサポート:** なし 

アクセスコントロールリスト (ACL) は、どのプリンシパル (アカウントメンバー、ユーザー、またはロール) がリソースにアクセスするためのアクセス許可を持つかを制御します。ACL はリソースベースのポリシーに似ていますが、JSON ポリシードキュメント形式は使用しません。

## VPC Lattice での属性ベースのアクセス制御 (ABAC)
<a name="security_iam_service-with-iam-tags"></a>

**ABAC (ポリシー内のタグ) のサポート:** あり

属性ベースのアクセス制御 (ABAC) は、タグと呼ばれる属性に基づいてアクセス許可を定義する認可戦略です。IAM エンティティと AWS リソースにタグをアタッチし、プリンシパルのタグがリソースのタグと一致するときにオペレーションを許可するように ABAC ポリシーを設計できます。

タグに基づいてアクセスを管理するには、`aws:ResourceTag/key-name`、`aws:RequestTag/key-name`、または `aws:TagKeys` の条件キーを使用して、ポリシーの[条件要素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)でタグ情報を提供します。

サービスがすべてのリソースタイプに対して 3 つの条件キーすべてをサポートする場合、そのサービスの値は**あり**です。サービスが一部のリソースタイプに対してのみ 3 つの条件キーのすべてをサポートする場合、値は「**部分的**」になります。

ABAC の詳細については、「*IAM ユーザーガイド*」の「[ABAC 認可でアクセス許可を定義する](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)」を参照してください。ABAC をセットアップする手順を説明するチュートリアルについては、「*IAM ユーザーガイド*」の「[属性ベースのアクセスコントロール (ABAC) を使用する](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)」を参照してください。

## VPC Lattice で一時的な認証情報を使用する
<a name="security_iam_service-with-iam-roles-tempcreds"></a>

**一時的な認証情報のサポート:** あり

一時的な認証情報は、 AWS リソースへの短期的なアクセスを提供し、フェデレーションまたは切り替えロールを使用する場合に自動的に作成されます。 AWS では、長期的なアクセスキーを使用する代わりに、一時的な認証情報を動的に生成することをお勧めします。詳細については、「*IAM ユーザーガイド*」の「[IAM の一時的な認証情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)」および「[AWS のサービス と IAM との連携](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)」を参照してください。

## VPC Lattice のサービスロール
<a name="security_iam_service-with-iam-roles-service"></a>

**サービスロールのサポート:** なし 

 サービスロールとは、サービスがユーザーに代わってアクションを実行するために引き受ける [IAM ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)です。IAM 管理者は、IAM 内からサービスロールを作成、変更、削除できます。詳細については、IAM ユーザーガイド**の [AWS のサービスに許可を委任するロールを作成する](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)を参照してください。

**警告**  
サービスロールの許可を変更すると、VPC Lattice の機能が破損する可能性があります。VPC Lattice が指示する場合以外は、サービスロールを編集しないでください。

## VPC Lattice のサービスにリンクされたロール
<a name="security_iam_service-with-iam-roles-service-linked"></a>

**サービスリンクロールのサポート:** あり

 サービスにリンクされたロールは、 にリンクされたサービスロールの一種です AWS のサービス。サービスは、ユーザーに代わってアクションを実行するロールを引き受けることができます。サービスにリンクされたロールは に表示され AWS アカウント 、サービスによって所有されます。IAM 管理者は、サービスリンクロールのアクセス許可を表示できますが、編集することはできません。

VPC Lattice のサービスにリンクされたロールの作成または管理の詳細については、「[Amazon VPC Lattice のサービスにリンクされたロールの使用](using-service-linked-roles.md)」を参照してください。

# Amazon VPC Lattice API アクセス許可
<a name="additional-api-permissions"></a>

必要な VPC Lattice API アクションを呼び出すアクセス許可を IAM アイデンティティ (ユーザーやロールなど) に付与する必要があります。詳細については、「[VPC Lattice のポリシーアクション](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-actions)」を参照してください。さらに、VPC Lattice アクションによっては、他の AWS APIs から特定のアクションを呼び出すアクセス許可を IAM ID に付与する必要があります。

## API に必要なアクセス許可
<a name="required-API-permissions"></a>

API から次のアクションを呼び出す場合は、指定されたアクションを呼び出すアクセス許可を IAM ユーザーに付与する必要があります。

`CreateResourceConfiguration`  
+ `vpc-lattice:CreateResourceConfiguration`
+ `ec2:DescribeSubnets`
+ `rds:DescribeDBInstances`
+ `rds:DescribeDBClusters`

`CreateResourceGateway`  
+ `vpc-lattice:CreateResourceGateway`
+ `ec2:AssignPrivateIpAddresses`
+ `ec2:AssignIpv6Addresses`
+ `ec2:CreateNetworkInterface`
+ `ec2:CreateNetworkInterfacePermission`
+ `ec2:DeleteNetworkInterface`
+ `ec2:DescribeNetworkInterfaces`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeSubnets`

`DeleteResourceGateway`  
+ `vpc-lattice:DeleteResourceGateway`
+ `ec2:DeleteNetworkInterface`

`UpdateResourceGateway`  
+ `vpc-lattice:UpdateResourceGateway`
+ `ec2:AssignPrivateIpAddresses`
+ `ec2:AssignIpv6Addresses`
+ `ec2:UnassignPrivateIpAddresses`
+ `ec2:CreateNetworkInterface`
+ `ec2:CreateNetworkInterfacePermission`
+ `ec2:DeleteNetworkInterface`
+ `ec2:DescribeNetworkInterfaces`
+ `ec2:DescribeSecurityGroups`
+ `ec2:DescribeSubnets`
+ `ec2:ModifyNetworkInterfaceAttribute`

`CreateServiceNetworkResourceAssociation`  
+ `vpc-lattice:CreateServiceNetworkResourceAssociation`
+ `ec2:AssignIpv6Addresses`
+ `ec2:CreateNetworkInterface`
+ `ec2:CreateNetworkInterfacePermission`
+ `ec2:DescribeNetworkInterfaces`

`CreateServiceNetworkVpcAssociation`  
+ `vpc-lattice:CreateServiceNetworkVpcAssociation`
+ `ec2:DescribeVpcs`
+ `ec2:DescribeSecurityGroups` (セキュリティグループが指定されている場合にのみ必要)

`UpdateServiceNetworkVpcAssociation`  
+ `vpc-lattice:UpdateServiceNetworkVpcAssociation`
+ `ec2:DescribeSecurityGroups` (セキュリティグループが指定されている場合にのみ必要)

`CreateTargetGroup`  
+ `vpc-lattice:CreateTargetGroup`
+ `ec2:DescribeVpcs`

`RegisterTargets`  
+ `vpc-lattice:RegisterTargets`
+ `ec2:DescribeInstances` (ターゲットグループタイプが `INSTANCE` の場合のみ必要)
+ `ec2:DescribeVpcs` (ターゲットグループタイプが `INSTANCE` または `IP` の場合のみ必要)
+ `ec2:DescribeSubnets` (ターゲットグループタイプが `INSTANCE` または `IP` の場合のみ必要)
+ `lambda:GetFunction` (ターゲットグループタイプが `LAMBDA` の場合のみ必要)
+ `lambda:AddPermission` (ターゲットグループが指定された Lambda 関数を呼び出す権限をまだ持っていない場合にのみ必要)

`DeregisterTargets`  
+ `vpc-lattice:DeregisterTargets`

`CreateAccessLogSubscription`  
+ `vpc-lattice:CreateAccessLogSubscription`
+ `logs:GetLogDelivery`
+ `logs:CreateLogDelivery`

`DeleteAccessLogSubscription`  
+ `vpc-lattice:DeleteAccessLogSubscription`
+ `logs:DeleteLogDelivery`

`UpdateAccessLogSubscription`  
+ `vpc-lattice:UpdateAccessLogSubscription`
+ `logs:UpdateLogDelivery`

# Amazon VPC Lattice のアイデンティティベースのポリシー
<a name="security_iam_id-based-policies"></a>

デフォルトでは、ユーザーおよびロールには VPC Lattice リソースを作成または変更するアクセス許可はありません。IAM 管理者は、リソースで必要なアクションを実行するための権限をユーザーに付与する IAM ポリシーを作成できます。

これらのサンプルの JSON ポリシードキュメントを使用して IAM アイデンティティベースのポリシーを作成する方法については、「*IAM ユーザーガイド*」の「[IAM ポリシーを作成する (コンソール)](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html)」を参照してください。

VPC Lattice が定義するアクションとリソースタイプ (リソースタイプごとの ARN の形式を含む) の詳細については、「サービス認可リファレンス」の「[Amazon VPC Lattice のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonvpclattice.html)」を参照してください。

**Topics**
+ [ポリシーに関するベストプラクティス](#security_iam_service-with-iam-policy-best-practices)
+ [フルアクセスに必要な追加のアクセス許可](#security_iam_id-based-policy-additional-permissions)
+ [VPC Lattice のアイデンティティベースのポリシーの例](#security_iam_id-based-policy-examples)

## ポリシーに関するベストプラクティス
<a name="security_iam_service-with-iam-policy-best-practices"></a>

アイデンティティベースのポリシーは、ユーザーのアカウントで誰かが VPC Lattice リソースの作成、アクセス、削除ができるどうかを決定します。これらのアクションでは、 AWS アカウントに費用が発生する場合があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください:
+ ** AWS 管理ポリシーを開始し、最小特権のアクセス許可に移行** – ユーザーとワークロードにアクセス許可の付与を開始するには、多くの一般的なユースケースにアクセス許可を付与する*AWS 管理ポリシー*を使用します。これらは で使用できます AWS アカウント。ユースケースに固有の AWS カスタマー管理ポリシーを定義することで、アクセス許可をさらに減らすことをお勧めします。詳細については、*IAM ユーザーガイド* の [AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies) または [ジョブ機能のAWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html) を参照してください。
+ **最小特権を適用する** – IAM ポリシーでアクセス許可を設定する場合は、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、最小特権アクセス許可とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、*IAM ユーザーガイド* の [IAM でのポリシーとアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) を参照してください。
+ **IAM ポリシーで条件を使用してアクセスをさらに制限する** - ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。たとえば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定できます。条件を使用して、サービスアクションが などの特定の を通じて使用されている場合に AWS のサービス、サービスアクションへのアクセスを許可することもできます CloudFormation。詳細については、*IAM ユーザーガイド* の [IAM JSON ポリシー要素:条件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html) を参照してください。
+ **IAM アクセスアナライザー を使用して IAM ポリシーを検証し、安全で機能的な権限を確保する** - IAM アクセスアナライザー は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM アクセスアナライザーは 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成をサポートします。詳細については、*IAM ユーザーガイド* の [IAM Access Analyzer でポリシーを検証する](https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-policy-validation.html) を参照してください。
+ **多要素認証 (MFA) を要求する** – で IAM ユーザーまたはルートユーザーを必要とするシナリオがある場合は AWS アカウント、MFA をオンにしてセキュリティを強化します。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、*IAM ユーザーガイド* の [MFA を使用した安全な API アクセス](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html) を参照してください。

IAM でのベストプラクティスの詳細については、*IAM ユーザーガイド* の [IAM でのセキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) を参照してください。

## フルアクセスに必要な追加のアクセス許可
<a name="security_iam_id-based-policy-additional-permissions"></a>

VPC Lattice が統合されている他の AWS サービスおよび VPC Lattice 機能のスイート全体を使用するには、特定の追加のアクセス許可が必要です。このような権限は `VPCLatticeFullAccess` マネージドポリシーには含まれていません。それは[混乱した代理](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html)権限昇格リスクがあるためです。

次のポリシーをロールにアタッチし、`VPCLatticeFullAccess` マネージドポリシーと合わせて使用する必要があります。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "firehose:TagDeliveryStream",
                "lambda:AddPermission",
                "s3:PutBucketPolicy"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:PutResourcePolicy"
            ],
            "Resource": "*",
            "Condition": {
                "ForAnyValue:StringEquals": {
                    "aws:CalledVia": [
                        "vpc-lattice.amazonaws.com"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/vpc-lattice.amazonaws.com/AWSServiceRoleForVpcLattice"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/delivery.logs.amazonaws.com/AWSServiceRoleForLogDelivery*"
        }
    ]
}
```

------

このポリシーにより、次の追加のアクセス許可が付与されます。
+ `iam:AttachRolePolicy`: 指定した IAM ロールに指定のマネージドポリシーをアタッチできます。
+ `iam:PutRolePolicy`: 指定した IAM ロールに埋め込まれたインラインポリシードキュメントを追加または更新できます。
+ `s3:PutBucketPolicy`: Amazon S3 バケットにバケットポリシーを適用できます。
+ `firehose:TagDeliveryStream`: Firehose 配信ストリームのタグを追加または更新できます。

## VPC Lattice のアイデンティティベースのポリシーの例
<a name="security_iam_id-based-policy-examples"></a>

**Topics**
+ [ポリシーの例: サービスネットワークへの VPC 関連付けを管理する](#security_iam_id-based-policy-examples-vpc-to-service-network-association)
+ [ポリシーの例: サービスネットワークへのサービス関連付けを作成する](#security_iam_id-based-policy-examples-service-to-service-network-association)
+ [ポリシーの例: リソースにタグを追加する](#security_iam_id-based-policy-examples-tag-resources)
+ [ポリシーの例: サービスにリンクされたロールを作成する](#security_iam_id-based-policy-examples-service-linked-role)

### ポリシーの例: サービスネットワークへの VPC 関連付けを管理する
<a name="security_iam_id-based-policy-examples-vpc-to-service-network-association"></a>

次の例は、このポリシーを持つユーザーにサービスネットワークとの VPC の関連付けを作成、更新、削除する権限を付与するポリシーを示しています。ただし、条件で指定された VPC とサービスネットワークのみに限ります。条件の指定に関する詳細については、[VPC Lattice のポリシー条件キー](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys) を参照してください。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "vpc-lattice:CreateServiceNetworkVpcAssociation",
            "vpc-lattice:UpdateServiceNetworkVpcAssociation",
            "vpc-lattice:DeleteServiceNetworkVpcAssociation"
         ],
         "Resource": [
            "*"
         ],
         "Condition": {
            "StringEquals": { 
               "vpc-lattice:ServiceNetworkArn": "arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/sn-903004f88example",
               "vpc-lattice:VpcId": "vpc-1a2b3c4d"
            }
         }
      }
   ]
}
```

------

### ポリシーの例: サービスネットワークへのサービス関連付けを作成する
<a name="security_iam_id-based-policy-examples-service-to-service-network-association"></a>

VPC Lattice リソースへのアクセスを制御するために条件キーを使用していない場合は、代わりに `Resource` 要素内のリソースの ARN を指定してアクセスを制御できます。

次の例は、`CreateServiceNetworkServiceAssociation` API アクションで使用できるサービスとサービスネットワークの ARN を指定して、このポリシーを持つユーザーが作成できるサービスネットワークにのみサービスの関連付けを制限するポリシーを示しています。ARN 値の指定については、「[VPC Lattice のポリシーリソース](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-resources)」を参照してください。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "vpc-lattice:CreateServiceNetworkServiceAssociation"
         ],
         "Resource": [
            "arn:aws:vpc-lattice:us-west-2:123456789012:servicenetworkserviceassociation/*",
            "arn:aws:vpc-lattice:us-west-2:123456789012:service/svc-04d5cc9b88example",
            "arn:aws:vpc-lattice:us-west-2:123456789012:servicenetwork/sn-903004f88example"
         ]
      }
   ]
}
```

------

### ポリシーの例: リソースにタグを追加する
<a name="security_iam_id-based-policy-examples-tag-resources"></a>

次の例は、このポリシーを持つユーザーに対して、VPC Lattice リソースにタグを作成するアクセス許可を付与するポリシーを示しています。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": [
            "vpc-lattice:TagResource"
         ],
         "Resource": "arn:aws:vpc-lattice:us-west-2:123456789012:*/*"
      }
   ]
}
```

------

### ポリシーの例: サービスにリンクされたロールを作成する
<a name="security_iam_id-based-policy-examples-service-linked-role"></a>

VPC Lattice では、 のユーザーが VPC Lattice リソースを初めて作成するときに、サービスにリンクされたロール AWS アカウント を作成するためのアクセス許可が必要です。サービスにリンクされたロールがまだ存在しない場合は、VPC Lattice によってアカウント内に作成されます。サービスにリンクされたロールは、VPC Lattice がユーザーに代わって他の を呼び出すことができるように、VPC Lattice AWS のサービス にアクセス許可を付与します。詳細については、「[Amazon VPC Lattice のサービスにリンクされたロールの使用](using-service-linked-roles.md)」を参照してください。

この自動ロール作成を成功させるには、ユーザーには `iam:CreateServiceLinkedRole` アクションへのアクセス許可が必要です。

```
"Action": "iam:CreateServiceLinkedRole"
```

次の例は、このポリシーを持つユーザーに対して、VPC Lattice のサービスにリンクされたロールを作成するアクセス許可を付与するポリシーを示しています。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Effect": "Allow",
         "Action": "iam:CreateServiceLinkedRole",
         "Resource": "arn:aws:iam::*:role/aws-service-role/vpc-lattice.amazonaws.com/AWSServiceRoleForVpcLattice",
         "Condition": {
            "StringLike": {
               "iam:AWSServiceName":"vpc-lattice.amazonaws.com"
            }
         }
      }
   ]
}
```

------

詳細については*IAM ユーザーガイド* の「[サービスにリンクされた役割のアクセス許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)」を参照してください。

# Amazon VPC Lattice のサービスにリンクされたロールの使用
<a name="using-service-linked-roles"></a>

Amazon VPC Lattice は、 AWS のサービス ユーザーに代わって他の を呼び出すために必要なアクセス許可に、サービスにリンクされたロールを使用します。詳細については、「IAM ユーザーガイド」の「[Service-linked roles](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create-service-linked-role.html)」を参照してください。

VPC Lattice は、 という名前のサービスにリンクされたロールを使用しますAWSServiceRoleForVpcLattice。

## VPC Lattice のサービスにリンクされたロールによるアクセス許可
<a name="slr-permissions"></a>

サービスにリンクされたロール **AWSServiceRoleForVpcLattice** は、次のサービスを信頼してロールを引き受けます。
+ `vpc-lattice.amazonaws.com`

AWSVpcLatticeServiceRolePolicy という名前のロールアクセス許可ポリシーにより、VPC Lattice は `AWS/VpcLattice` 名前空間に CloudWatch メトリクスを公開できます。詳細については、*AWS 「 マネージドポリシーリファレンス*[https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSVpcLatticeServiceRolePolicy.html](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSVpcLatticeServiceRolePolicy.html)」の「」を参照してください。

サービスリンクロールの作成、編集、削除を IAM エンティティ (ユーザー、グループ、ロールなど) に許可するにはアクセス許可を設定する必要があります。詳細については、「[ポリシーの例: サービスにリンクされたロールを作成する](security_iam_id-based-policies.md#security_iam_id-based-policy-examples-service-linked-role)」を参照してください。

## VPC Lattice のサービスにリンクされたロールを作成する
<a name="create-slr"></a>

サービスリンクロールを手動で作成する必要はありません。 AWS マネジメントコンソール、、 AWS CLIまたは AWS API で VPC Lattice リソースを作成すると、VPC Lattice によってサービスにリンクされたロールが作成されます。

このサービスリンクロールを削除した後で再度作成する必要が生じた場合は同じ方法でアカウントにロールを再作成できます。VPC Lattice リソースを作成すると、VPC Lattice によって再度サービスにリンクされたロールが作成されます。

## VPC Lattice のサービスにリンクされたロールを編集する
<a name="edit-slr"></a>

IAM を使用して、**AWSServiceRoleForVpcLattice** の説明を編集できます。詳細については、「IAM ユーザーガイド」の「[サービスにリンクされたロールの編集](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-service-linked-role.html#edit-service-linked-role-iam-console)」を参照してください。

## VPC Lattice のサービスにリンクされたロールを削除する
<a name="delete-slr"></a>

Amazon VPC Lattice を使用する必要がなくなった場合は、**AWSServiceRoleForVpcLattice** を削除することをお勧めします。

このサービスにリンクされたロールを削除するには、 AWS アカウント内のすべての VPC Lattice リソースを削除する必要があります。

IAM コンソール、 AWS CLI、または AWS API を使用して、**AWSServiceRoleForVpcLattice** サービスにリンクされたロールを削除します。詳細については、「IAM ユーザーガイド」の「[サービスにリンクされたロールの削除](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_delete.html#id_roles_manage_delete_slr)」を参照してください

サービスにリンクされたロールを削除した後、 AWS アカウントに VPC Lattice リソースを作成すると、VPC Lattice がそのロールを再度作成します。

## VPC Lattice のサービスにリンクされたロールをサポートするリージョン
<a name="slr-regions"></a>

VPC Lattice では、このサービスが利用可能なすべてのリージョンで、サービスにリンクされたロールの使用がサポートされています。

# AWS Amazon VPC Lattice の マネージドポリシー
<a name="managed-policies"></a>

 AWS 管理ポリシーは、 によって作成および管理されるスタンドアロンポリシーです AWS。 AWS 管理ポリシーは、多くの一般的なユースケースにアクセス許可を付与するように設計されているため、ユーザー、グループ、ロールにアクセス許可の割り当てを開始できます。

 AWS 管理ポリシーは、すべての AWS お客様が使用できるため、特定のユースケースに対して最小特権のアクセス許可を付与しない場合があることに注意してください。ユースケースに固有の[カスタマー管理ポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)を定義して、アクセス許可を絞り込むことをお勧めします。

 AWS 管理ポリシーで定義されているアクセス許可は変更できません。が AWS マネージドポリシーで定義されたアクセス許可 AWS を更新すると、ポリシーがアタッチされているすべてのプリンシパル ID (ユーザー、グループ、ロール) に影響します。 AWS は、新しい が起動されるか、新しい API オペレーション AWS のサービス が既存のサービスで使用できるようになったときに、 AWS マネージドポリシーを更新する可能性が高くなります。

詳細については、「**IAM ユーザーガイド」の「[AWS マネージドポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)」を参照してください。

## AWS マネージドポリシー: VPCLatticeFullAccess
<a name="vpc-lattice-fullaccess-policy"></a>

このポリシーは Amazon VPC Lattice へのフルアクセスを提供し、他の依存サービスへのアクセスは制限します。これには次のことを実行する許可が含まれています。
+ ACM — カスタムドメイン名の SSL/TLS 証明書 ARN を取得します。
+ CloudWatch — アクセスログとモニタリングデータを表示します。
+ CloudWatch Logs — アクセスログを設定し、CloudWatch Logs に送信します。
+ Amazon EC2 – ネットワークインターフェイスを設定し、EC2 インスタンスと VPCsに関する情報を取得します。これは、リソース設定、リソースゲートウェイ、ターゲットグループの作成、VPC Lattice エンティティの関連付けの設定、ターゲットの登録に使用されます。
+ Elastic Load Balancing — Application Load Balancer に関する情報を取得して、ターゲットとして登録します。
+ Firehose – アクセスログの保存に使用される配信ストリームに関する情報を取得します。
+ Lambda — Lambda 関数に関する情報を取得して、ターゲットとして登録します。
+ Amazon RDS – RDS クラスターとインスタンスに関する情報を取得します。
+ Amazon S3 — アクセスログを保存するために使用される S3 バケットに関する情報を取得します。

このポリシーのアクセス許可を確認するには、「AWS マネージドポリシーリファレンス」の「[VPCLatticeFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/VPCLatticeFullAccess.html)」を参照してください。

VPC Lattice が統合されている他の AWS サービスおよび VPC Lattice 機能のスイート全体を使用するには、特定の追加のアクセス許可が必要です。このような権限は `VPCLatticeFullAccess` マネージドポリシーには含まれていません。それは[混乱した代理](https://docs.aws.amazon.com//IAM/latest/UserGuide/confused-deputy.html)権限昇格リスクがあるためです。詳細については、「[フルアクセスに必要な追加のアクセス許可](security_iam_id-based-policies.md#security_iam_id-based-policy-additional-permissions)」を参照してください。

## AWS マネージドポリシー: VPCLatticeReadOnlyAccess
<a name="vpc-lattice-read-onlyaccess-policy"></a>

このポリシーは Amazon VPC Lattice への読み取り専用アクセスを提供し、他の依存サービスへのアクセスは制限します。これには次のことを実行する許可が含まれています。
+ ACM — カスタムドメイン名の SSL/TLS 証明書 ARN を取得します。
+ CloudWatch — アクセスログとモニタリングデータを表示します。
+ CloudWatch Logs — アクセスログサブスクリプションのログ配信情報を表示します。
+ Amazon EC2 — EC2 インスタンスと VPC に関する情報を取得して、ターゲットグループを作成しターゲットを登録します。
+ Elastic Load Balancing — Application Load Balancer に関する情報を取得します。
+ Firehose – アクセスログ配信の配信ストリームに関する情報を取得します。
+ Lambda — Lambda 関数に関する情報を表示します。
+ Amazon RDS – RDS クラスターとインスタンスに関する情報を取得します。
+ Amazon S3 — アクセスログ配信のための S3 バケットに関する情報を取得します。

このポリシーのアクセス許可を確認するには、「AWS マネージドポリシーリファレンス」の「[VPCLatticeReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/VPCLatticeReadOnlyAccess.html)」を参照してください。

## AWS マネージドポリシー: VPCLatticeServicesInvokeAccess
<a name="vpc-lattice-services-invoke-access-policy"></a>

このポリシーは Amazon VPC Lattice サービスを呼び出すためのアクセス許可を付与します。

このポリシーのアクセス許可を確認するには、「AWS マネージドポリシーリファレンス」の「[VPCLatticeServicesInvokeAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/VPCLatticeServicesInvokeAccess.html)」を参照してください。

## AWS マネージドポリシー: AWSVpcLatticeServiceRolePolicy
<a name="service-linked-role-policy"></a>

このポリシーは **AWSServiceRoleForVpcLattice** という名前のサービスにリンクされたロールにアタッチされ、VPC Lattice がユーザーに代わってアクションを実行できるようにします。このポリシーを IAM エンティティにアタッチすることはできません。詳細については、「[Amazon VPC Lattice のサービスにリンクされたロールの使用](using-service-linked-roles.md)」を参照してください。

このポリシーに対する許可を確認するには、「AWS マネージドポリシーリファレンス」の「[AWSVpcLatticeServiceRolePolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSVpcLatticeServiceRolePolicy.html)」を参照してください。

## AWS 管理ポリシーに対する VPC Lattice の更新
<a name="policy-updates"></a>

このサービスがこれらの変更の追跡を開始してからの VPC Lattice の AWS マネージドポリシーの更新に関する詳細を表示します。このページの変更に関する自動通知を受け取るには、VPC Lattice ユーザーガイドの RSS フィードにサブスクライブしてください。


| 変更 | 説明 | 日付 | 
| --- | --- | --- | 
| [VPCLatticeFullAccess](#vpc-lattice-fullaccess-policy) | VPC Lattice は、Amazon RDS クラスターとインスタンスを記述するための読み取り専用アクセス許可を追加します。 | 2024 年 12 月 1 日 | 
| [VPCLatticeReadOnlyAccess](#vpc-lattice-read-onlyaccess-policy) | VPC Lattice は、Amazon RDS クラスターとインスタンスを記述するための読み取り専用アクセス許可を追加します。 | 2024 年 12 月 1 日 | 
| [AWSVpcLatticeServiceRolePolicy](#service-linked-role-policy) | VPC Lattice は、VPC Lattice がリクエスタマネージドネットワークインターフェイスを作成できるようにするアクセス許可を追加します。 | 2024 年 12 月 1 日 | 
| [VPCLatticeFullAccess](#vpc-lattice-fullaccess-policy) | VPC Lattice に Amazon VPC Lattice へのフルアクセスと他の依存サービスへの制限付きアクセスを付与する新しいポリシーが追加されました。 | 2023 年 3 月 31 日 | 
| [VPCLatticeReadOnlyAccess](#vpc-lattice-read-onlyaccess-policy) | VPC Lattice に Amazon VPC Lattice への読み取り専用アクセス権限と他の依存サービスへの制限付きアクセス権限を付与する新しいポリシーが追加されました。 | 2023 年 3 月 31 日 | 
| [VPCLatticeServicesInvokeAccess](#vpc-lattice-services-invoke-access-policy) | VPC Lattice に Amazon VPC Lattice サービスを呼び出すためのアクセス許可を付与する新しいポリシーが追加されました。 | 2023 年 3 月 31 日 | 
| [AWSVpcLatticeServiceRolePolicy](#service-linked-role-policy) | VPC Lattice にサービスにリンクされたロールへのアクセス許可が追加され、VPC Lattice が AWS/VpcLattice 名前空間で CloudWatch メトリクスを公開できるようになりました。AWSVpcLatticeServiceRolePolicy ポリシーに CloudWatch [PutMetricData](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_PutMetricData.html) API アクションを呼び出すためのアクセス許可が含まれるようになりました。詳細については、「[Amazon VPC Lattice のサービスにリンクされたロールの使用](using-service-linked-roles.md)」を参照してください。 | 2022 年 12 月 5 日 | 
|  VPC Lattice による変更の追跡に開始  |  VPC Lattice は AWS 、管理ポリシーの変更の追跡を開始しました。  | 2022 年 12 月 5 日 | 

# Amazon VPC Lattice のコンプライアンス検証
<a name="compliance-validation"></a>

サードパーティーの監査者は、複数のコンプライアンスプログラムの一環として Amazon VPC Lattice のセキュリティと AWS コンプライアンスを評価します。

 AWS のサービス が特定のコンプライアンスプログラムの範囲内にあるかどうかを確認するには、[AWS のサービス 「コンプライアンスプログラムによる対象範囲内](https://aws.amazon.com/compliance/services-in-scope/)」の」を参照し、関心のあるコンプライアンスプログラムを選択します。一般的な情報については、[AWS 「コンプライアンスプログラム](https://aws.amazon.com/compliance/programs/)」を参照してください。

を使用して、サードパーティーの監査レポートをダウンロードできます AWS Artifact。詳細については、[「Downloading Reports in AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)」を参照してください。

を使用する際のお客様のコンプライアンス責任 AWS のサービス は、お客様のデータの機密性、貴社のコンプライアンス目的、適用される法律および規制によって決まります。を使用する際のコンプライアンス責任の詳細については AWS のサービス、[AWS 「 セキュリティドキュメント](https://docs.aws.amazon.com/security/)」を参照してください。

# インターフェイスエンドポイント (AWS PrivateLink) を使用して Amazon VPC Lattice にアクセスする
<a name="vpc-interface-endpoints"></a>

VPC と Amazon VPC Lattice とのプライベート接続を確立するには、インターフェイス VPC エンドポイントを作成します。インターフェイスエンドポイントは、インターネットゲートウェイ[AWS PrivateLink](https://aws.amazon.com/privatelink/)、NAT デバイス、VPN 接続、または Direct Connect 接続なしで VPC Lattice APIs にプライベートにアクセスできるテクノロジーである を利用しています。VPC のインスタンスはパブリック IP アドレスがなくても VPC Lattice API と通信できます。

各インターフェイスエンドポイントはサブネット内の 1 つ以上の[ネットワークインターフェイス](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html)によって表されます。

## インターフェイス VPC エンドポイントに関する考慮事項
<a name="vpc-endpoint-considerations"></a>

VPC Lattice のインターフェイス VPC エンドポイントを設定する前に、「 *AWS PrivateLink ガイド*」の[「Access AWS のサービス through AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html)」を確認してください。

VPC Lattice では VPC からのすべての API アクションの呼び出しをサポートしています。

## VPC Lattice 用のインターフェイス VPC エンドポイントを作成する
<a name="vpc-endpoint-create"></a>

VPC Lattice サービスの VPC エンドポイントは、Amazon VPC コンソールまたは AWS Command Line Interface () を使用して作成できますAWS CLI。詳細については、「 *AWS PrivateLink ガイド*」の[「インターフェイス VPC エンドポイントを作成する](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)」を参照してください。

次のサービス名を使用して、VPC Lattice の VPC エンドポイントを作成します。

`com.amazonaws.region.vpc-lattice`

エンドポイントのプライベート DNS を有効にすると、`vpc-lattice.us-east-1.amazonaws.com` などのリージョンのデフォルト DNS 名を使用して、VPC Lattice への API リクエストを実行できます。

# Amazon VPC Lattice の耐障害性
<a name="disaster-recovery-resiliency"></a>

 AWS グローバルインフラストラクチャは、 AWS リージョン およびアベイラビリティーゾーンを中心に構築されています。

AWS リージョン は、複数の物理的に分離および分離されたアベイラビリティーゾーンを提供します。これらは、低レイテンシー、高スループット、および高度に冗長なネットワークで接続されます。

アベイラビリティーゾーンでは、ゾーン間で中断することなく自動的にフェールオーバーするアプリケーションとデータベースを設計および運用することができます。アベイラビリティーゾーンは、従来の単一または複数のデータセンターインフラストラクチャよりも可用性、フォールトトレランス、および拡張性が優れています。

 AWS リージョン およびアベイラビリティーゾーンの詳細については、[AWS 「 グローバルインフラストラクチャ](https://aws.amazon.com/about-aws/global-infrastructure/)」を参照してください。

# Amazon VPC Lattice のインフラストラクチャセキュリティ
<a name="infrastructure-security"></a>

マネージドサービスである Amazon VPC Lattice は、 AWS グローバルネットワークセキュリティで保護されています。 AWS セキュリティサービスと がインフラストラクチャ AWS を保護する方法については、[AWS 「 クラウドセキュリティ](https://aws.amazon.com/security/)」を参照してください。インフラストラクチャセキュリティのベストプラクティスを使用して環境を AWS 設計するには、*「Security Pillar AWS Well‐Architected Framework*」の[「Infrastructure Protection](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)」を参照してください。

 AWS 公開された API コールを使用して、ネットワーク経由で VPC Lattice にアクセスします。クライアントは次をサポートする必要があります。
+ Transport Layer Security (TLS)。TLS 1.2 が必須で、TLS 1.3 をお勧めします。
+ DHE (楕円ディフィー・ヘルマン鍵共有) や ECDHE (楕円曲線ディフィー・ヘルマン鍵共有) などの完全前方秘匿性 (PFS) による暗号スイート。これらのモードは、Java 7 以降など、最近のほとんどのシステムでサポートされています。