

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

# で使用する AMIs を構築するためのベストプラクティス AWS Marketplace
<a name="best-practices-for-building-your-amis"></a>

このトピックでは、 で使用する Amazon マシンイメージ (AMIsの構築に役立つベストプラクティスとリファレンスについて説明します AWS Marketplace。に構築および送信される AMIs AWS Marketplace は、すべての AWS Marketplace 製品ポリシーに従う必要があります。詳細については、次のセクションを参照してください。

**Topics**
+ [再販権の確保](#rights)
+ [AMI の構築](#building-an-ami)
+ [用の AMI の準備と保護 AWS Marketplace](#securing-an-ami)
+ [公開要件を確認するための AMI のスキャン](#self-service-scanning)
+ [ソフトウェアが AMI AWS Marketplace で実行されていることを確認する](#verifying-ami-runtime)

## 再販権の確保
<a name="rights"></a>

無料以外の Linux ディストリビューションについては、 AWS提供された Amazon Linux、RHEL、SUSE を除き、再販権を保護する責任があります。Windows AMI については、再販売権を取得する必要はありません。

## AMI の構築
<a name="building-an-ami"></a>

AMI の構築に関する以下のガイドラインを使用してください。
+ AMI がすべての[AWS Marketplace ポリシー](https://docs.aws.amazon.com/marketplace/latest/userguide/product-and-ami-policies.html)を満たしていることを確認します。
+ 米国東部 (バージニア北部) リージョンで AMI を作成します。
+  AWS Marketplaceなどの信頼できる評判の高いソースから入手した、明確に定義されたライフサイクルを持つ、Amazon Elastic Block Store (Amazon EBS) にサポートされた、よく管理された既存の AMI から製品を作成します。
+ 最新のオペレーティングシステム、パッケージ、およびソフトウェアを使用して AMI を構築します。
+  お使いの AMI が、ハードウェア仮想マシン (HVM) 仮想化および 64 ビットアーキテクチャを使用するパブリック Amazon EC2 AMI に基づいていることを確認してください。
+ AMI の構築、更新、再公開のための繰り返し可能なプロセスを開発します。
+ すべてのバージョンと製品で一貫したオペレーティングシステム (OS) ユーザー名を使用します。推奨されるデフォルトのユーザー名は、Linux およびその他の Unix に類似のシステムの場合は `ec2-user`、Windows の場合は `Administrator` です。
+ 公開する最終的な AMI AWS Marketplace を送信する前に、AMI からインスタンスを起動してテストし、意図したエンドユーザーエクスペリエンスを検証します。このインスタンスですべてのインストール方法、機能、パフォーマンスをテストします。
+ 以下のようにポート設定を確認してください。
  + オープンファイアウォール、リバースプロキシ、SSRF の脆弱性に対する[ベストプラクティスのセキュリティ設定](https://aws.amazon.com/blogs/security/defense-in-depth-open-firewalls-reverse-proxies-ssrf-vulnerabilities-ec2-instance-metadata-service/)として、**[IMDS サポート]** オプションは **[IMDSv2]** のみに設定する必要があります。次の CLI は、最終ビルドフェーズで新しい AMI を登録するときに使用できます。
    + `aws ec2 register-image --name my-image --root-device-name /dev/xvda --block-device-mappings DeviceName=/dev/xvda,Ebs={SnapshotId=snap-0123456789example} --architecture x86_64 --imds-support v2.0`

AMI の作成の詳細については、以下の関連リソースを参照してください。
+  「*Amazon EC2 ユーザーガイド*」の「[Amazon EBS-backed AMI を作成する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-an-ami-ebs.html)」
+  「*Amazon EC2 ユーザーガイド*」の「[Windows Sysprep を使用して Amazon EC2 AMI を作成する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ami-create-win-sysprep.html)」 
+  [EBS-backed インスタンスから Amazon マシンイメージ (AMI) を作成する方法。](https://aws.amazon.com/premiumsupport/knowledge-center/create-ami-ebs-backed/)
+  [Amazon Linux AMI](https://aws.amazon.com/amazon-linux-ami/) 
+  [Amazon EC2 インスタンスタイプ](https://aws.amazon.com/ec2/instance-types/)および[インスタンスタイプ](http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/instance-types.html?r=2153) 
+  [IMDS V2 用にデフォルトで AMI を設定する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-IMDS-new-instances.html#configure-IMDS-new-instances-ami-configuration) 

## 用の AMI の準備と保護 AWS Marketplace
<a name="securing-an-ami"></a>

セキュアな AMI を作成するために、次のガイドラインをお勧めします。
+ 「*Amazon EC2 ユーザーガイド*」の「[共有 Linux AMI のガイドライン](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/building-shared-amis.html)」を使用する
+ 攻撃の危険性を減らすため、最低限のインストールとしてデプロイするように AMI を設計します。不要なサービスやプログラムを無効にするか、削除します。
+ 可能な限り、ネットワークトラフィックにエンドツーエンドの暗号化を使用します。例えば、Secure Sockets Layer (SSL) を使用して、購入者との間の HTTP セッションを保護します。サービスが有効なかつ最新の証明書のみを使用するようにしてください。
+ AMI 製品を文書化するときは、購入者がインスタンスへの受信トラフィックアクセスを制御できるよう、セキュリティグループの推奨設定を記載してください。レコメンデーションでは、以下を指定する必要があります。
  + サービスが機能するために必要なポートの最小セット。
  + 管理アクセスに推奨されるポートと送信元 IP アドレスの範囲。

  これらのセキュリティグループの推奨事項は、購入者が適切なアクセスコントロールを実装するのに役立ちます。AMI 製品に新しいバージョンを追加する方法の詳細については、「[新しいバージョンを追加する](single-ami-versions.md#single-ami-adding-version)」を参照してください。
+  AWS コンピューティング環境に対して定期的にペネトレーションテストを実施することを検討してください。または、ユーザーに代わってそのようなテストを実行するためにサードパーティーを採用することを検討してください。ペネトレーションテストリクエストフォームなど詳細は、「[AWS ペネトレーションテスト](https://aws.amazon.com/security/penetration-testing/)」を参照してください。
+ ウェブアプリケーションのトップ 10 の脆弱性に気づき、必要に応じてアプリケーションを構築してください。詳細については、「[Open Web Application Security Project (OWASP) - Top 10 Web Application Security Risks](https://owasp.org/www-project-top-ten/)」を参照してください。新しいインターネットの脆弱性が発見された場合は、AMI に同梱されているウェブアプリケーションをすみやかに更新してください。この情報を含むリソースの例として、「[SecurityFocus](http://www.securityfocus.com/vulnerabilities)」および「[NIST 全国脆弱性データベース](http://nvd.nist.gov/)」があります。

セキュリティの詳細については、以下の関連リソースを参照してください。
+  [AWS クラウドセキュリティ](https://aws.amazon.com/security/) 
+  [インターネットセキュリティセンター (CIS): セキュリティベンチマーク](http://benchmarks.cisecurity.org/downloads/benchmarks/) 
+  [オープンなウェブアプリケーションセキュリティプロジェクト (OWASP): セキュアなコーディングプラクティスクイックリファレンスガイド](https://owasp.org/www-project-secure-coding-practices-quick-reference-guide/) 
+  [OWASP トップ 10 ウェブアプリケーションのセキュリティリスク](https://owasp.org/www-project-top-ten/) 
+  [SANS (SysAdmin、監査、ネットワーク、およびセキュリティ) 共通短所列挙 (CWE) トップ 25 最も危険なソフトウェアエラ](http://www.sans.org/top25-software-errors/) 
+  [セキュリティフォーカス](http://www.securityfocus.com/vulnerabilities) 
+  [NIST 全国脆弱性データベース](http://nvd.nist.gov/) 

## 公開要件を確認するための AMI のスキャン
<a name="self-service-scanning"></a>

AMI を AWS Marketplace カタログに公開するには、AMI スキャンを完了する必要があります。AMI スキャンでは、パッチが適用されていない一般的な脆弱性と露出 (CVE) をチェックし、AMI がセキュリティのベストプラクティスに従っていることを確認します。詳細については、「 [の AMI の準備と保護 AWS Marketplace](https://docs.aws.amazon.com/marketplace/latest/userguide/best-practices-for-building-your-amis.html#securing-an-ami)」を参照してください。

 AMI スキャンを実行するには、次のいずれかのオプションを選択します。

**オプション 1: アセットメニュー**

この方法では、製品作成フローの外部で AMI をスキャンできます。AMI 製品を作成せずにアセットをスキャンする必要がある SaaS クイック起動を利用する SaaS 販売者にとっても有用です。

1. [AWS Marketplace 管理ポータル](https://aws.amazon.com/marketplace/management/homepage) の、**[アセット]** メニューから **[Amazon マシンイメージ]** を選択します。

1. スキャンプロセスを開始するには、**[AMI を追加]** を選択します。

1. AMI のスキャンステータスは、このページに戻ると確認できます。

**オプション 2: 変更メニューをリクエストする**

このオプションは、AMI 製品を既に作成している販売者が使用できます。詳細については、「[AMI ベースの製品の作成](ami-single-ami-products.md)」を参照してください。

1. [AWS Marketplace 管理ポータル](https://aws.amazon.com/marketplace/management/homepage) の **[製品]** メニューに移動し、**[サーバー]** を選択します。

1. **[サーバー製品]** から製品を選択します。これは AMI ベースの製品である必要があります。製品はどの状態でもかまいません。次のステップでは、**公開**状態である必要はありません。

1. **[変更をリクエスト]** メニューに移動し、**[バージョンを更新]** を選択します。

1. **[テストバージョンを追加]** を選択します。プロンプトに従って、AMI の詳細を含むリクエストを送信します。リクエストが成功すると、AMI がスキャンに合格したことを示します。**[新しいバージョンを追加]** オプションとは異なり、スキャンが成功した場合に、**[テストバージョンを追加]** で AMI ベースの製品に新しいバージョンが追加されることはありません。

**注記**  
AMI AWS Marketplace へのアクセスを許可する方法については、「」を参照してください[AMI AWS Marketplace へのアクセスの許可](single-ami-marketplace-ami-access.md)。

## ソフトウェアが AMI AWS Marketplace で実行されていることを確認する
<a name="verifying-ami-runtime"></a>

ソフトウェアが、AMI 製品から作成された Amazon EC2 インスタンスで実行されていることを、実行時に検証するようを強く推奨します。

Amazon EC2 インスタンスが AMI 製品から作成されていることを確認するには、Amazon EC2 に組み込まれているインスタンスメタデータサービスを使用します。以下のステップでは、この検証を順を追って説明します。メタデータサービスの使用の詳細については、「*Amazon Elastic Compute Cloud ユーザーガイド*」の「[インスタンスメタデータとユーザーデータ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html)」を参照してください。

1. *インスタンスアイデンティティドキュメントの取得*

   実行中の各インスタンスには、インスタンスからアクセス可能な、インスタンス自体に関するデータを提供するアイデンティティドキュメントが用意されています。次の例は、インスタンスから curl を使用してインスタンスのアイデンティティドキュメントを取得する方法を示しています。

   IMDSv2: (推奨)

   ```
   TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
   && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/dynamic/instance-identity/document
    {
      "accountId" : "0123456789",
      "architecture" : "x86_64",
      "availabilityZone" : "us-east-1e",
      "billingProducts" : null,
      "devpayProductCodes" : null,
      "marketplaceProductCodes" : [ "0vg0000000000000000000000" ],
      "imageId" : "ami-0123456789abcdef1",
      "instanceId" : "i-0123456789abcdef0",
      "instanceType" : "t2.medium",
      "kernelId" : null,
      "pendingTime" : "2020-02-25T20:23:14Z",
      "privateIp" : "10.0.0.2",
      "ramdiskId" : null,
      "region" : "us-east-1",
      "version" : "2017-09-30"
   }
   ```

   IMDSv1:

   ```
   curl http://169.254.169.254/latest/dynamic/instance-identity/document{
      "accountId" : "0123456789",
      "architecture" : "x86_64",
      "availabilityZone" : "us-east-1e",
      "billingProducts" : null,
      "devpayProductCodes" : null,
      "marketplaceProductCodes" : [ "0vg0000000000000000000000" ],
      "imageId" : "ami-0123456789abcdef1",
      "instanceId" : "i-0123456789abcdef0",
      "instanceType" : "t2.medium",
      "kernelId" : null,
      "pendingTime" : "2020-02-25T20:23:14Z",
      "privateIp" : "10.0.0.2",
      "ramdiskId" : null,
      "region" : "us-east-1",
      "version" : "2017-09-30"
   }
   ```

1. *インスタンスアイデンティティドキュメントの検証*

   署名を使用して、インスタンスアイデンティティが正しいことを確認できます。このプロセスの詳細については、「*Amazon Elastic Compute Cloud ユーザーガイド*」の「[インスタンスアイデンティティドキュメント](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html)」を参照してください。

1. *製品コードの検証*

   AMI 製品を最初に公開用に提出すると、製品には AWS Marketplaceによって[製品コード](https://docs.aws.amazon.com/marketplace/latest/userguide/ami-getting-started.html#ami-product-codes)が割り当てられます。製品コードは、インスタンスアイデンティティドキュメントの `marketplaceProductCodes` フィールドを確認すると検証できます。または、メタデータサービスから直接取得することもできます。

   IMDSv2:

   ```
   TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
    && curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/product-codes
   ```

   製品コードが AMI 製品のコードと一致する場合、インスタンスは製品から作成されたものです。