

# Amazon EC2 での共有 AMI の使用方法について
<a name="sharing-amis"></a>

*共有 AMI* は、デベロッパーが作成し、他のデベロッパーが利用できるようにした AMI です。Amazon EC2 を始める最も簡単な方法は、必要なコンポーネントが含まれている共有 AMI を使用して、カスタムコンテンツを追加することです。独自の AMI を作成し、他のユーザーと共有することもできます。

共有 AMI は、ご自分の判断で使用してください。Amazon は、他の Amazon EC2 ユーザーとの間で共有される AMI の統合性や安全性を保証できません。そのため、共有 AMI を取り扱う際は、ご自分のデータセンターに外部のコードをデプロイすることを検討する場合と同じように、充分な注意を払う必要があります。検証済みのプロバイダーなど、信頼できるソースから AMI を取得することをお勧めします。

## 検証済みプロバイダー
<a name="verified-ami-provider"></a>

Amazon EC2 コンソールでは、Amazon または検証済み Amazon パートナーが所有するパブリック AMI には **[検証済みプロバイダー]** のマークが付されます。

また、[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) AWS CLI コマンドを使用して、検証済みプロバイダーからのパブリック AMI を識別することもできます。Amazon または検証済みパートナーが所有するパブリックイメージには、`amazon`、`aws-backup-vault`、`aws-marketplace` のいずれかのエイリアス付き所有者が存在します。CLI 出力では、これらの値が `ImageOwnerAlias` について表示されます。他のユーザーは、AMI にエイリアスを設定できません。これを利用すれば、Amazon または検証済みパートナーから AMI を簡単に見つけられます。

検証済みプロバイダーになるには、AWS Marketplace で販売者として登録する必要があります。登録が完了すると、AMI を AWS Marketplace で一覧表示できます。詳細については、「*AWS Marketplace 販売者ガイド*」の「[販売者としての開始方法](https://docs.aws.amazon.com/marketplace/latest/userguide/user-guide-for-sellers.html)」および「[AMI ベースの製品](https://docs.aws.amazon.com/marketplace/latest/userguide/ami-products.html)」を参照してください。

**Topics**
+ [検証済みプロバイダー](#verified-ami-provider)
+ [Amazon EC2 インスタンスで使用する共有 AMI を検索する](usingsharedamis-finding.md)
+ [Linux 用の共有 AMI を使用する準備をする](usingsharedamis-confirm.md)
+ [許可された AMI を使用して Amazon EC2 で AMI の検出と使用を制御する](ec2-allowed-amis.md)
+ [Amazon EC2 で使用するために AMI を公開する](sharingamis-intro.md)
+ [AMI のパブリックアクセスのブロックについて](block-public-access-to-amis.md)
+ [組織および組織単位での共有 AMI の使用](share-amis-with-organizations-and-OUs.md)
+ [特定の AWS アカウントとの AMI の共有](sharingamis-explicit.md)
+ [お客様の AWS アカウント と AMI の共有をキャンセルする](cancel-sharing-an-AMI.md)
+ [共有 Linux AMI の作成に関する推奨事項](building-shared-amis.md)

**他のトピックに関する情報をお探しの場合は**
+ AMI の作成については、「[Amazon S3-backed AMI を作成する](creating-an-ami-instance-store.md)」または「[Amazon EBS-backed AMI を作成する](creating-an-ami-ebs.md)」を参照してください。
+ AWS Marketplace でのアプリケーションの構築、配信、保守の詳細については、[AWS Marketplace ドキュメント](https://docs.aws.amazon.com/marketplace/)をご参照ください。

# Amazon EC2 インスタンスで使用する共有 AMI を検索する
<a name="usingsharedamis-finding"></a>

Amazon EC2 コンソールまたはコマンドラインを使用すると、Amazon EC2 インスタンスで使用するパブリックまたはプライベートの共有 AMI を検索できます。

AMI はリージョンのリソースです。共有 AMI (パブリックまたはプライベート) を検索するときには、それの共有元のリージョンから実行する必要があります。AMI を他のリージョンで利用できるようにするには、AMI をそのリージョンにコピーし、共有します。詳細については「[Amazon EC2 AMI のコピー](CopyingAMIs.md)」を参照してください。

------
#### [ Console ]

コンソールには AMI フィルターフィールドが用意されています。**[検索]** フィールドで指定されたフィルターを使用して、検索範囲を指定することもできます。

**共有または AMI を見つけるには**

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

1. ナビゲーションペインで **[AMI]** を選択してください。

1. 最初のフィルターで、次のいずれかのオプションを選択します。
   + **プライベートイメージ** – 共有されているすべての AMI を一覧表示します。
   + **パブリックイメージ** – すべてのパブリック AMI を一覧表示します。

1. (オプション) Amazon の公開イメージのみを表示するには、**[検索]** フィールドを選択し、メニューオプションから **[所有者エイリアス]** 、**[=]**、**[Amazon]** の順に選択します。

1. (オプション) フィルターを追加して、要件を満たす AMI に検索範囲を設定します。

**「[検証済みプロバイダー](sharing-amis.md#verified-ami-provider)」で共有パブリック AMI を見つける方法**

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

1. ナビゲーションペインで **[AMI カタログ]** を選択してください。

1. [**コミュニティ AMI**] を選択してください。

1. **[結果を絞り込む]** ペインで、**[検証済みプロバイダー]** を選択します。**[検証済みプロバイダー]** のラベルは、AMI が Amazon または検証済みパートナーからのものであることを示します。

------
#### [ AWS CLI ]

AMI を一覧表示するには、- [describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) マンド () を使用します。次の例のように、興味のある種類の AMI に絞って一覧表示できます。

**すべてのパブリック AMI を一覧表示する方法**  
次のコマンドは、所有しているパブリック AMI を含むすべてのパブリック AMI を一覧表示します。

```
aws ec2 describe-images --executable-users all
```

**明示的な起動許可を持つ AMI を一覧表示する方法**  
次のコマンドを使用すると、お客様が明示的な起動許可を持つ AMI が一覧表示されます。このリストには、お客様が所有する AMI は含まれていません。

```
aws ec2 describe-images --executable-users self
```

**検証済みプロバイダーが所有する AMI を一覧表示する方法**  
次のコマンドにより、「[検証済みプロバイダー](sharing-amis.md#verified-ami-provider)」が所有する AMI が一覧表示されます。検証済みプロバイダー (Amazon または検証済みパートナーのいずれか) が所有するパブリック AMI には、アカウントフィールドで `amazon`、`aws-backup-vault`、`aws-marketplace` として表示されるエイリアス付き所有者が存在します。これは、検証済みプロバイダーからの AMI を簡単に見つけるのに役立ちます。他のユーザーは、AMI にエイリアスを設定できません。

```
aws ec2 describe-images \
    --owners amazon aws-marketplace \
    --query 'Images[*].[ImageId]' \
    --output text
```

**アカウントが所有する AMI を一覧表示する方法**  
次のコマンドを実行すると、指定した AWS アカウント が所有する AMI が一覧表示されます。

```
aws ec2 describe-images --owners 123456789012
```

**フィルタを使用して AMI をスコープする方法**  
表示される AMI の数を減らすには、フィルタを使用して、興味のある種類の AMI に限定して表示します。例えば、次のフィルタを使用すると、EBS-backed AMI のみが表示されます。

```
--filters "Name=root-device-type,Values=ebs"
```

------
#### [ PowerShell ]

AMI を一覧表示するには、[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレット (Tools for Windows PowerShell) を使用します。次の例のように、興味のある種類の AMI に絞って一覧表示できます。

**すべてのパブリック AMI を一覧表示する方法**  
次のコマンドは、所有しているパブリック AMI を含むすべてのパブリック AMI を一覧表示します。

```
Get-EC2Image -ExecutableUser all
```

**明示的な起動許可を持つ AMI を一覧表示する方法**  
次のコマンドを使用すると、お客様が明示的な起動許可を持つ AMI が一覧表示されます。このリストには、お客様が所有する AMI は含まれていません。

```
Get-EC2Image -ExecutableUser self
```

**検証済みプロバイダーが所有する AMI を一覧表示する方法**  
次のコマンドにより、「[検証済みプロバイダー](sharing-amis.md#verified-ami-provider)」が所有する AMI が一覧表示されます。検証済みプロバイダー (Amazon または検証済みパートナーのいずれか) が所有するパブリック AMI には、アカウントフィールドで `amazon`、`aws-backup-vault`、`aws-marketplace` として表示されるエイリアス付き所有者が存在します。これは、検証済みプロバイダーからの AMI を簡単に見つけるのに役立ちます。他のユーザーは、AMI にエイリアスを設定できません。

```
Get-EC2Image -Owner amazon aws-marketplace
```

**アカウントが所有する AMI を一覧表示する方法**  
次のコマンドを実行すると、指定した AWS アカウント が所有する AMI が一覧表示されます。

```
Get-EC2Image -Owner 123456789012
```

**フィルタを使用して AMI をスコープする方法**  
表示される AMI の数を減らすには、フィルタを使用して、興味のある種類の AMI に限定して表示します。例えば、次のフィルタを使用すると、EBS-backed AMI のみが表示されます。

```
-Filter @{Name="root-device-type"; Values="ebs"}
```

------

# Linux 用の共有 AMI を使用する準備をする
<a name="usingsharedamis-confirm"></a>

Linux で共有 AMI を使用する前に、次の手順を実行して、インスタンスへの好ましくないアクセスを許可する認証情報が第三者により事前にインストールされていないことと、機密データを第三者に送信する可能性があるリモートロギングが事前設定されていないことを確認します。システムセキュリティ改善についての詳細は、AMI で使用される Linux ディストリビューションの文書を確認してください。

インスタンスへのアクセスを誤って失わないように、SSH セッションを 2 つ開始して、見覚えのない認証情報を削除し、その後も SSH を使用してインスタンスにログインできることが確認されるまで、2 つ目のセッションを開いておくことをお勧めします。

1. 未許可のパブリック SSH キーを特定し、無効にします。ファイル内の唯一のキーは、AMI の起動に使用したキーである必要があります。次のコマンドを使用すると、`authorized_keys` ファイルが見つかります。

   ```
   [ec2-user ~]$ sudo find / -name "authorized_keys" -print -exec cat {} \;
   ```

1. ルートユーザーにはパスワードベースの認証を無効にします。`sshd_config` ファイルを開き、次のように `PermitRootLogin` 行を編集します。

   ```
   PermitRootLogin without-password
   ```

   または、ルートユーザーとしてインスタンスにログインする機能を無効にできます。

   ```
   PermitRootLogin No
   ```

   sshd サービスを再起動します。

1. インスタンスにログインできるユーザーが他にないか確認します。スーパーユーザー権限を持つユーザーが特に危険です。不明のアカウントがあれば、そのパスワードを削除するか、ロックします。

1. 開いていても使用していないポートと、着信接続をリスニングしている実行中のネットワークサービスをチェックします。

1. 事前設定されているリモートロギングを防ぐには、既存の設定ファイルを削除し、`rsyslog` サービスを再起動してください。例:

   ```
   [ec2-user ~]$ sudo rm /etc/rsyslog.conf
   [ec2-user ~]$ sudo service rsyslog restart
   ```

1. すべての cron ジョブが正当であることを確認します。

セキュリティ上のリスクとして考えられるパブリック AMI を発見した際には、AWS セキュリティチームにご連絡ください。詳細については、「[AWS セキュリティセンター](https://aws.amazon.com/security/)」を参照してください。

# 許可された AMI を使用して Amazon EC2 で AMI の検出と使用を制御する
<a name="ec2-allowed-amis"></a>

AWS アカウント での Amazon マシンイメージ (AMI) の検出と使用を制御するには、*許可された AMI* の機能を使用できます。アカウント内で AMI を表示して使用するために満たす必要がある基準を指定します。条件を有効にすると、インスタンスを起動するユーザーは、指定された条件に準拠する AMI のみを表示し、アクセスできます。例えば、信頼された AMI プロバイダーのリストを条件として指定できます。これらのプロバイダーからの AMI のみが表示され、使用できます。

許可された AMI 設定を有効にする前に、*監査モード*を有効にして、どの AMI を表示および使用不可にするかをプレビューできます。これにより、必要に応じて条件を絞り込み、目的の AMI のみがアカウント内のユーザーに表示されるようにすることができます。さらに、[describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) コマンドを実行し、指定した条件を満たしていない AMI で起動されたインスタンスを特定します。この情報は、準拠した AMI を使用するように起動設定を更新する (起動テンプレートで別の AMI を指定するなど) か、これらの AMI を許可するように条件を調整するかどうかを決定するのに役立ちます。

許可された AMI 設定は、アカウントレベルで直接指定するか、宣言ポリシーを使用して指定します。これらの設定は、AMI の使用を制御する各 AWS リージョンで設定する必要があります。宣言型ポリシーを使用すると、複数の リージョンと複数の アカウントで同時に設定を適用できます。宣言ポリシーが使用されている場合、アカウント内で直接設定を変更することはできません。このトピックでは、アカウント内で設定を直接設定する方法について説明します。宣言ポリシーの使用の詳細については、「*AWS Organizations ユーザーガイド*」の「[宣言ポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)」を参照してください。

**注記**  
許可された AMI 機能は、アカウントと共有されている AMI とパブリック AMI の検出と使用のみを制御します。アカウントが所有する AMI は制限されません。設定した条件にかかわらず、特定のアカウントで作成した AMI は、常にそのアカウントのユーザーが検出、使用することができます。

**許可された AMI の主な利点**
+ **コンプライアンスとセキュリティ**: ユーザーは、指定された基準を満たす AMI のみを検出して使用できるため、準拠されていない AMI を使用するリスクが軽減されます。
+ **効率的な管理**: 許可される AMI の数を減らすことで、残りの AMI の管理が簡単になり、効率が向上します。
+ **アカウントレベルの一元化された実装**: アカウント内で直接、または宣言ポリシーを使用して、アカウントレベルで許可された AMI 設定を構成します。これにより、アカウント全体で AMI の使用を一元的かつ効率的に制御できます。

**Topics**
+ [許可された AMI の仕組み](#how-allowed-amis-works)
+ [許可された AMI を実装するためのベストプラクティス](#best-practice-for-implementing-allowed-amis)
+ [必要な IAM 許可](#iam-permissions-for-allowed-amis)
+ [許可された AMI の設定を管理する](manage-settings-allowed-amis.md)

## 許可された AMI の仕組み
<a name="how-allowed-amis-works"></a>

お使いのアカウントで、どの AMI を検出して使用できるかを制御するには、AMI を評価するための一連の基準を定義します。次の図に示すように、基準は 1 つまたは複数の `ImageCriterion` で構成されます。説明は図の後に続きます。

![\[許可された AMI の ImageCriteria 設定階層。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami_allowed-amis-imagecriteria.png)


設定には 3 つのレベルがあります。
+ **1** – パラメータ値
  + 複数値パラメータ:
    + `ImageProviders`
    + `ImageNames`
    + `MarketplaceProductCodes`

      AMI は、パラメータ内の*任意の*値と一致した場合に許可されます。

      例: `ImageProviders` = `amazon` **または**アカウント `111122223333` **または** アカウント `444455556666` (パラメータ値の評価ロジックは図に示されていません。)
  + 単一値パラメータ:
    + `CreationDateCondition`
    + `DeprecationTimeCondition`
+ **2** – `ImageCriterion`
  + 複数のパラメータを **AND** ロジックでグループ化します。
  + AMI が許可されるには、`ImageCriterion` 内の*すべての*パラメータと一致する必要があります。
  + 例: `ImageProviders` = `amazon` **AND** `CreationDateCondition` = 300 日以下
+ **3** – `ImageCriteria`
  + 複数の `ImageCriterion` を **OR** ロジックでグループ化します。
  + AMI は、*任意の* `ImageCriterion` と一致した場合に許可されます。
  + AMI を評価するための完全な設定を形成します。

**Topics**
+ [許可された AMI のパラメータ](#allowed-amis-criteria)
+ [許可された AMI の設定](#allowed-amis-json-configuration)
+ [基準の評価方法](#how-allowed-amis-criteria-are-evaluated)
+ [制限](#allowed-amis-json-configuration-limits)
+ [許可されている操作](#allowed-amis-operations)

### 許可された AMI のパラメータ
<a name="allowed-amis-criteria"></a>

次のパラメータを設定すると `ImageCriterion` を作成できます。

`ImageProviders`  
AMI が許可されている AMI プロバイダーです。  
有効な値は、次のように AWS、および AWS アカウント ID で定義されたエイリアスであり、次のようなものがあります。  
+ `amazon` – Amazon または検証済みのプロバイダーによって作成された AMI を識別するエイリアス
+ `aws-marketplace` – AWS Marketplace で検証済みプロバイダーによって作成された AMI を識別するエイリアス 
+ `aws-backup-vault` – 論理エアギャップバックアップボールトアカウントに存在する AWS バックアップ AMI を識別するエイリアス。AWS バックアップの論理エアギャップボールト機能を使用する場合は、このエイリアスが AMI プロバイダーとして含まれていることを確認してください。
+ AWS アカウント ID – 1 つ以上の 12 桁の AWS アカウント ID
+ `none` – アカウントによって作成された AMI のみを検出して使用できることを示します。パブリックまたは共有 AMI を検出して使用することはできません。これを指定すると、他の条件は指定できなくなります。

`ImageNames`  
完全一致またはワイルドカード (`?` または `*`) を使用した、許可された AMI の名前。

`MarketplaceProductCodes`  
許可された AMI の AWS Marketplace 製品コード。

`CreationDateCondition`  
許可された AMI の最大有効期間。

`DeprecationTimeCondition`  
許可された AMI が非推奨になってからの最大経過期間。

各条件の有効な値と制約については、「*Amazon EC2 API リファレンス*」の「[ImageCriterionRequest](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ImageCriterionRequest.html)」を参照してください。

### 許可された AMI の設定
<a name="allowed-amis-json-configuration"></a>

許可された AMI のコア設定は、許可された AMI の基準を定義する `ImageCriteria` 設定です。次の JSON 構造は、指定できるパラメータを示しています。

```
{
    "State": "enabled" | "disabled" | "audit-mode",  
    "ImageCriteria" : [
        {
            "ImageProviders": ["string",...],
            "MarketplaceProductCodes": ["string",...],           
            "ImageNames":["string",...],
            "CreationDateCondition" : {
                "MaximumDaysSinceCreated": integer
            },
            "DeprecationTimeCondition" : {
                "MaximumDaysSinceDeprecated": integer
            }
         },
         ...
}
```

#### ImageCriteria の例
<a name="allowed-amis-json-configuration-example"></a>

以下の `ImageCriteria` の例では 4 つの `ImageCriterion` を設定します。AMI は、これらの `ImageCriterion` のいずれかと一致する場合に許可されます。条件の評価方法に関する詳細は、「[基準の評価方法](#how-allowed-amis-criteria-are-evaluated)」を参照してください。

```
{
    "ImageCriteria": [
        // ImageCriterion 1: Allow AWS Marketplace AMIs with product code "abcdefg1234567890"
        {
            "MarketplaceProductCodes": [
                "abcdefg1234567890"
            ]
        },
        // ImageCriterion 2: Allow AMIs from providers whose accounts are
        // "123456789012" OR "123456789013" AND AMI age is less than 300 days
        {
            "ImageProviders": [
                "123456789012",
                "123456789013"
            ],
            "CreationDateCondition": {
                "MaximumDaysSinceCreated": 300
            }
        },
        // ImageCriterion 3: Allow AMIs from provider whose account is "123456789014" 
        // AND with names following the pattern "golden-ami-*"
        {
            "ImageProviders": [
                "123456789014"
            ],
            "ImageNames": [
                "golden-ami-*"
            ]
        },
        // ImageCriterion 4: Allow AMIs from Amazon or verified providers 
        // AND which aren't deprecated
        {
            "ImageProviders": [
                "amazon"
            ],
            "DeprecationTimeCondition": {
                "MaximumDaysSinceDeprecated": 0
            }
        }
    ]
}
```

### 基準の評価方法
<a name="how-allowed-amis-criteria-are-evaluated"></a>

以下の表は、AMI が許可されるかどうかを判断する評価ルールを説明し、各レベルで `AND` 演算子または `OR` 演算子がどのように適用されるかを示しています。


| 評価レベル | オペレーター | 許可された AMI になるための要件 | 
| --- | --- | --- | 
| ImageProviders、ImageNames、および MarketplaceProductCodes のパラメータ値 | OR | AMI は、各パラメータリストの少なくとも 1 つの値と一致する必要があります。 | 
| ImageCriterion | AND | AMI は、各 ImageCriterion のすべてのパラメータと一致する必要があります。 | 
| ImageCriteria | OR | AMI は、ImageCriterion のいずれかと一致する必要があります。 | 

上記の評価ルールを使用して、それらを [ImageCriteria の例](#allowed-amis-json-configuration-example) に適用する方法を見てみましょう。
+ `ImageCriterion` 1: AWS Marketplace 製品コード `abcdefg1234567890` を持つ AMI を許可する

  `OR`
+ `ImageCriterion` 2: 次の両方の基準を満たす AMI を許可する
  + `123456789012` `OR` `123456789013` のいずれかのアカウントが所有している
    + `AND`
  + 過去 300 日以内に作成された

  `OR`
+ `ImageCriterion` 3: 次の両方の条件を満たす AMI を許可する:
  + `123456789014` アカウントが所有している
    + `AND`
  + `golden-ami-*` パターンで命名されている

  `OR`
+ `ImageCriterion` 4: 次の両方の条件を満たす AMI を許可する:
  + Amazon か検証済みのプロバイダーが公開している (`amazon` エイリアスで指定)
    + `AND`
  + 非推奨 (非推奨になってからの最大日数が `0`)

### 制限
<a name="allowed-amis-json-configuration-limits"></a>

`ImageCriteria` には以下までを含めることができます:
+ 10 `ImageCriterion`

各 `ImageCriterion` には以下までを含めることができます:
+ `ImageProviders` の 200 個の値
+ `ImageNames` の 50 個の値 
+ `MarketplaceProductCodes` の 50 個の値 

**制限の例**

前述の [ImageCriteria の例](#allowed-amis-json-configuration-example) の使用:
+ 4 つの `ImageCriterion` があります。上限の 10 に達するまで、最大 6 個を追加できます。
+ 最初の `ImageCriterion` には、`MarketplaceProductCodes` に 1 つの値があります。この `ImageCriterion` には、上限の 50 に達するまで、最大 49 個を追加できます。
+ 2 番目の `ImageCriterion` には、`ImageProviders` に 2 つの値があります。この `ImageCriterion` には、上限の 200 に達するまで、最大 198 個を追加できます。
+ 3 番目の `ImageCriterion` には、`ImageNames` に 1 つの値があります。この `ImageCriterion` には、上限の 50 に達するまで、最大 49 個を追加できます。

### 許可されている操作
<a name="allowed-amis-operations"></a>

許可された AMI 機能には、イメージ条件を管理するための 3 つのオペレーション状態 (**有効**、**無効**、**監査モード**) があります。これにより、イメージ条件を有効または無効にしたり、必要に応じて確認したりできます。

**有効**

許可された AMI が有効になっている場合: 
+ `ImageCriteria` が適用されます。
+ 許可された AMI のみが EC2 コンソールとイメージを使用する API (イメージを使用する他のアクションを記述、コピー、保存、実行するなど) で検出できます。
+ インスタンスは、許可された AMI を使用してのみ起動できます。

**Disabled**

許可された AMI が無効になっている場合: 
+ `ImageCriteria` は適用されません。
+ AMI の検出可能性や使用に制限はありません。

**オーディオモード**

 監査モードの場合:
+ `ImageCriteria` は適用されますが、AMI の検出可能性や使用に制限はありません。
+ EC2 コンソールでは、AMI ごとに、**許可されたイメージ**フィールドには、許可された AMI が有効になっているときに、AMI を検出してアカウント内のユーザーが利用可能であるかを示す **[はい]** または **[いいえ]** が表示されます。
+ コマンドラインでは、`describe-image` オペレーションのレスポンスに `"ImageAllowed": true` または `"ImageAllowed": false` が含まれ、許可された AMI が有効になっている場合に、AMI が検出可能になり、アカウント内のユーザーが利用可能であるかを示します。
+ EC2 コンソールでは、許可された AMI が有効になっている場合に、アカウント内のユーザーが検出または使用できない AMI の横には **[許可されていません]** と表示されます。

## 許可された AMI を実装するためのベストプラクティス
<a name="best-practice-for-implementing-allowed-amis"></a>

許可された AMI、スムーズな移行を確保し、AWS 環境への潜在的な中断を最小限に抑えるために、これらのベストプラクティスを検討してください。

1. **監査モードを有効にする**

   まず、監査モードで許可された AMI を有効にします。この状態では、実際にアクセスを制限することなく、どの AMI が基準の影響を受けるかを確認し、リスクのない評価期間を提供できます。

1. **許可された AMI 基準を設定する**

   組織のセキュリティポリシー、コンプライアンス要件、運用ニーズに合った AMI プロバイダーを慎重に確立します。
**注記**  
Amazon ECS、Amazon EKS、AWS Lambda マネージドインスタンスなどの AWS マネージドサービスを使用する場合は、AWS が作成した AMI を許可するために `amazon` エイリアスを指定することが推奨されます。これらのサービスは、Amazon が公開した AMI に依存してインスタンスを起動します。  
AMI `CreationDateCondition` に制限を設定するときは注意が必要です。過度に制限された日付条件 (AMI は作成から 5 日未満でなければならないなど) を設定すると、AMI が、AWS か他のプロバイダーのいずれのものかにかかわらず、指定された期間内に更新されなかった場合にインスタンスの起動が失敗する可能性があります。  
コントロールと特異度を向上させるために、`ImageNames` と `ImageProviders` を組み合わせることが推奨されます。`ImageNames` のみを使用すると、AMI を一意に識別できない可能性があります。

1. **期待されるビジネスプロセスへの影響を確認する**

   コンソールまたは CLI を使用して、指定した基準を満たさない AMI で起動されたインスタンスを特定できます。この情報は、準拠した AMI を使用するように起動設定を更新する (起動テンプレートで別の AMI を指定するなど) か、これらの AMI を許可するように条件を調整するかどうかを決定するのに役立ちます。

   コンソール: [ec2-instance-launched-with-allowed-ami](https://docs.aws.amazon.com/config/latest/developerguide/ec2-instance-launched-with-allowed-ami.html) AWS Config ルールを使用し、実行中または停止中のインスタンスが、許可された AMI 基準を満たす AMI で起動されたかどうかを確認します。ルールは、許可された AMI 基準を AMI が満たしていない場合は **[NON\$1COMPLIANT]**、満たしている場合は **[COMPLIANT]** です。ルールは、許可された AMI 設定が **有効** または **監査モード** に設定されている場合にのみ機能します。

   CLI: [describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) コマンドを実行し、レスポンスをフィルタリングして、指定した条件を満たさない AMI で起動されたインスタンスを特定します。

   コンソールと CLI での手順については、「[許可されていない AMI から起動したインスタンスを見つける](manage-settings-allowed-amis.md#identify-instances-with-allowed-AMIs)」を参照してください。

1. **許可された AMI を有効にする**

   基準が期待されるビジネスプロセスに悪影響を及ぼさないことを確認したら、許可された AMI を有効にします。

1. **インスタンスの起動をモニタリングする**

   Amazon EMR、Amazon ECR、Amazon EKS、AWS Elastic Beanstalk など、アプリケーションおよび使用する AWS マネージドサービス全体で AMI からのインスタンス起動を引き続きモニタリングします。予期しない問題がないか確認し、許可された AMI 基準に必要な調整を行います。

1. **新しい AMI のパイロット**

   現在の許可されている AMI 設定に準拠していないサードパーティ AMI をテストするために、AWS は次のアプローチを推奨します。
   + 別の AWS アカウント を使用する: ビジネスクリティカルなリソースにアクセスできないアカウントを作成します。このアカウントで許可された AMI 設定が有効になっていない、またはテストする AMI が明示的に許可されていることを確認し、テストできるようにします。
   + 別の AWS リージョン でテストする: サードパーティー AMI は使用できるが、許可された AMI 設定をまだ有効にしていないリージョンを使用します。

   こうすることで、新しいAMIのテスト中でも、ビジネスクリティカルなリソースの安全性を確保することができます。

## 必要な IAM 許可
<a name="iam-permissions-for-allowed-amis"></a>

許可された AMI 機能を使用するには、次の IAM アクセス許可が必要です:
+ `GetAllowedImagesSettings`
+ `EnableAllowedImagesSettings`
+ `DisableAllowedImagesSettings`
+ `ReplaceImageCriteriaInAllowedImagesSettings`

# 許可された AMI の設定を管理する
<a name="manage-settings-allowed-amis"></a>

許可された AMI の設定を管理できます。これらの設定は、アカウントごとに、リージョン別で行われます。

**Topics**
+ [許可されたAMIを有効にする](#enable-allowed-amis-criteria)
+ [許可された AMI 基準を設定する](#update-allowed-amis-criteria)
+ [許可されたAMIを無効にする](#disable-allowed-amis-criteria)
+ [許可された AMI 基準を取得する](#identify-allowed-amis-state-and-criteria)
+ [許可されている AMI を見つける](#identify-amis-that-meet-allowed-amis-criteria)
+ [許可されていない AMI から起動したインスタンスを見つける](#identify-instances-with-allowed-AMIs)

## 許可されたAMIを有効にする
<a name="enable-allowed-amis-criteria"></a>

許可された AMI を有効にし、その基準を指定することができます。監査モードから開始することをお勧めします。監査モードでは、その基準の影響を受ける AMI を、アクセスを実際に制限することなく確認できます。

------
#### [ Console ]

**許可されたAMIを有効にするには**

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

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[許可されている AMI]** を選択します。

1. **[許可された AMI]** タブで、**[管理]** を選択します。

1. **[許可された AMI 設定]** で、**[監査モード]** または **[有効]** を選択します。監査モードで開始し、基準をテストした後に、このステップに戻って許可された AMI を有効にするのがお勧めです。

1. (オプション) **[AMI 基準]** には、JSON 形式の基準を入力します。

1. **[Update]** (更新) を選択してください。

------
#### [ AWS CLI ]

**許可されたAMIを有効にするには**  
[enable-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-allowed-images-settings.html) コマンドを使用します。

```
aws ec2 enable-allowed-images-settings --allowed-images-settings-state enabled
```

代わりに監査モードを有効にする場合は、`enabled` ではなく `audit-mode` を指定します。

```
aws ec2 enable-allowed-images-settings --allowed-images-settings-state audit-mode
```

------
#### [ PowerShell ]

**許可されたAMIを有効にするには**  
[Enable-EC2AllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2AllowedImagesSetting.html) コマンドレットを使用します。

```
Enable-EC2AllowedImagesSetting -AllowedImagesSettingsState enabled
```

代わりに監査モードを有効にする場合は、`enabled` ではなく `audit-mode` を指定します。

```
Enable-EC2AllowedImagesSetting -AllowedImagesSettingsState audit-mode
```

------

## 許可された AMI 基準を設定する
<a name="update-allowed-amis-criteria"></a>

許可された AMI を有効にすると、許可された AMI 基準の設定または置き換えが可能になります。

正しい設定と有効な値については、「[許可された AMI の設定](ec2-allowed-amis.md#allowed-amis-json-configuration)」と「[許可された AMI のパラメータ](ec2-allowed-amis.md#allowed-amis-criteria)」を参照してください。

------
#### [ Console ]

**許可された AMI 基準を設定するには**

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

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[許可されている AMI]** を選択します。

1. **[許可された AMI]** タブで、**[管理]** を選択します。

1. **[AMI 基準]** に、基準を JSON 形式で入力します。

1. **[Update]** (更新) を選択してください。

------
#### [ AWS CLI ]

**許可された AMI 基準を設定するには**  
[replace-image-criteria-in-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/replace-image-criteria-in-allowed-images-settings.html) コマンドを使用して、許可された AMI の条件を含む JSON ファイルを指定します。

```
aws ec2 replace-image-criteria-in-allowed-images-settings --cli-input-json file://file_name.json
```

------
#### [ PowerShell ]

**許可された AMI 基準を設定するには**  
[Set-EC2ImageCriteriaInAllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Set-EC2ImageCriteriaInAllowedImagesSetting.html) コマンドレットを使用して、許可された AMI の条件を含む JSON ファイルを指定します。

```
$imageCriteria = Get-Content -Path .\file_name.json | ConvertFrom-Json
Set-EC2ImageCriteriaInAllowedImagesSetting -ImageCriterion $imageCriteria
```

------

## 許可されたAMIを無効にする
<a name="disable-allowed-amis-criteria"></a>

許可された AMI は、次の手順で無効にすることができます。

------
#### [ Console ]

**許可されたAMIを無効にするには**

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

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[許可されている AMI]** を選択します。

1. **[許可された AMI]** タブで、**[管理]** を選択します。

1. **許可された AMI設定で**、**無効**を選択してください。

1. **[Update]** (更新) を選択してください。

------
#### [ AWS CLI ]

**許可されたAMIを無効にするには**  
[disable-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-allowed-images-settings.html) コマンドを使用します。

```
aws ec2 disable-allowed-images-settings
```

------
#### [ PowerShell ]

**許可されたAMIを無効にするには**  
[Disable-EC2AllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2AllowedImagesSetting.html) コマンドレットを使用します。

```
Disable-EC2AllowedImagesSetting
```

------

## 許可された AMI 基準を取得する
<a name="identify-allowed-amis-state-and-criteria"></a>

許可された AMI 設定と、許可された AMI 基準の現在の状態を取得できます。

------
#### [ Console ]

**許可された AMI の状態と基準を取得するには**

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

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[許可されている AMI]** を選択します。

1. **[許可された AMI]** タブでは、**[許可された AMI 設定]** が **[有効]**、**[無効]**、**[監査モード]** のいずれかに設定されています。

1. 許可された AMI の状態が **[有効]** または **[監査モード]** である場合、**[AMI 基準]** に、AMI 基準が JSON 形式で表示されます。

------
#### [ AWS CLI ]

**許可された AMI の状態と基準を取得するには**  
[get-allowed-images-settings](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-allowed-images-settings.html) コマンドを使用します。

```
aws ec2 get-allowed-images-settings
```

次の出力例では、状態は `audit-mode` で、イメージの条件がアカウントで設定されています。

```
{
    "State": "audit-mode",
    "ImageCriteria": [
        {
            "MarketplaceProductCodes": [
                "abcdefg1234567890"
            ]
        },
        {
            "ImageProviders": [
                "123456789012",
                "123456789013"
            ],
            "CreationDateCondition": {
                "MaximumDaysSinceCreated": 300
            }
        },
        {
            "ImageProviders": [
                "123456789014"
            ],
            "ImageNames": [
                "golden-ami-*"
            ]
        },
        {
            "ImageProviders": [
                "amazon"
            ],
            "DeprecationTimeCondition": {
                "MaximumDaysSinceDeprecated": 0
            }
        }
    ],
    "ManagedBy": "account"
}
```

------
#### [ PowerShell ]

**許可された AMI の状態と基準を取得するには**  
[Get-EC2AllowedImagesSetting](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2AllowedImagesSetting.html) コマンドレットを使用します。

```
Get-EC2AllowedImagesSetting | Select-Object `
    State, `
    ManagedBy, `
    @{Name='ImageProviders'; Expression={($_.ImageCriteria.ImageProviders)}}, `
    @{Name='MarketplaceProductCodes'; Expression={($_.ImageCriteria.MarketplaceProductCodes)}}, `
    @{Name='ImageNames'; Expression={($_.ImageCriteria.ImageNames)}}, `
    @{Name='MaximumDaysSinceCreated'; Expression={($_.ImageCriteria.CreationDateCondition.MaximumDaysSinceCreated)}}, `
    @{Name='MaximumDaysSinceDeprecated'; Expression={($_.ImageCriteria.DeprecationTimeCondition.MaximumDaysSinceDeprecated)}}
```

次の出力例では、状態は `audit-mode` で、イメージの条件がアカウントで設定されています。

```
State      : audit-mode
ManagedBy  : account
ImageProviders            : {123456789012, 123456789013, 123456789014, amazon}
MarketplaceProductCodes   : {abcdefg1234567890}
ImageNames                : {golden-ami-*}
MaximumDaysSinceCreated  : 300
MaximumDaysSinceDeprecated: 0
```

------

## 許可されている AMI を見つける
<a name="identify-amis-that-meet-allowed-amis-criteria"></a>

現在の許可された AMI 基準で許可されている、または許可されていない AMI を見つけることができます。

**注記**  
許可された AMI は監査モードになっている必要があります。

------
#### [ Console ]

**AMI が許可された AMI 基準を満たしているかどうかを確認するには**

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

1. ナビゲーションペインで **[AMI]** を選択してください。

1. AMI を選択します。

1. **詳細**タブ (チェックボックスを選択した場合) または概要エリア (AMI ID を選択した場合) で**、許可されたイメージ**フィールドを見つけます。
   + **[はい]** – AMI は許可された AMI 基準を満たしています。この AMI は、ユーザーが許可された AMI を有効にした後に、そのユーザーのアカウントに含まれるユーザーが使用できます。
   + **[いいえ]** – AMI は許可された AMI 基準を満たしていません。

1. ナビゲーションペインで **[AMI カタログ]** を選択してください。

   未 **許可** とマークされた AMI は、許可された AMI の基準を満たしていない AMI を示します。許可された AMI が有効になっている場合、この AMI はアカウント内のユーザーには表示または使用できなくなります。

------
#### [ AWS CLI ]

**AMI が許可された AMI 基準を満たしているかどうかを確認するには**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --image-id ami-0abcdef1234567890 \
    --query Images[].ImageAllowed \
    --output text
```

出力例を次に示します。

```
True
```

**許可された AMI 基準を満たす AMI を見つけるには**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --filters "Name=image-allowed,Values=true" \
    --max-items 10 \
    --query Images[].ImageId
```

出力例を次に示します。

```
ami-000eaaa8be2fd162a
ami-000f82db25e50de8e
ami-000fc21eb34c7a9a6
ami-0010b876f1287d7be
ami-0010b929226fe8eba
ami-0010957836340aead
ami-00112c992a47ba871
ami-00111759e194abcc1
ami-001112565ffcafa5e
ami-0011e45aaee9fba88
```

------
#### [ PowerShell ]

**AMI が許可された AMI 基準を満たしているかどうかを確認するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
(Get-EC2Image -ImageId ami-0abcdef1234567890).ImageAllowed
```

出力例を次に示します。

```
True
```

**許可された AMI 基準を満たす AMI を見つけるには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
Get-EC2Image `
    -Filter @{Name="image-allows";Values="true"} `
    -MaxResult 10 | `
    Select ImageId
```

出力例を次に示します。

```
ami-000eaaa8be2fd162a
ami-000f82db25e50de8e
ami-000fc21eb34c7a9a6
ami-0010b876f1287d7be
ami-0010b929226fe8eba
ami-0010957836340aead
ami-00112c992a47ba871
ami-00111759e194abcc1
ami-001112565ffcafa5e
ami-0011e45aaee9fba88
```

------

## 許可されていない AMI から起動したインスタンスを見つける
<a name="identify-instances-with-allowed-AMIs"></a>

許可された AMI 基準を満たしていない AMI を使って起動したインスタンスを、特定することができます。

------
#### [ Console ]

**インスタンスが、許可されていない AMI を使って起動したかどうかを確認するには**

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

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. インスタンスを選択します。

1. **[詳細]** タブの **[インスタンスの詳細]** で、**[許可されたイメージ]** 見つけます。
   + **はい** – AMI は許可された AMI 基準を満たしています。
   + **いいえ** – AMI は許可された AMI 基準を満たしていません。

------
#### [ AWS CLI ]

**許可されていない AMI を使って起動したインスタンスを見つけるには**  
[describe-instance-image-metadata](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-image-metadata.html) コマンドを `image-allowed` フィルターと共に使用します。

```
aws ec2 describe-instance-image-metadata \
    --filters "Name=image-allowed,Values=false" \
    --query "InstanceImageMetadata[*].[InstanceId,ImageMetadata.ImageId]" \
    --output table
```

出力例を次に示します。

```
--------------------------------------------------
|          DescribeInstanceImageMetadata         |
+----------------------+-------------------------+
|  i-08fd74f3f1595fdbd |  ami-09245d5773578a1d6  |
|  i-0b1bf24fd4f297ab9 |  ami-07cccf2bd80ed467f  |
|  i-026a2eb590b4f7234 |  ami-0c0ec0a3a3a4c34c0  |
|  i-006a6a4e8870c828f |  ami-0a70b9d193ae8a799  |
|  i-0781e91cfeca3179d |  ami-00c257e12d6828491  |
|  i-02b631e2a6ae7c2d9 |  ami-0bfddf4206f1fa7b9  |
+----------------------+-------------------------+
```

------
#### [ PowerShell ]

**許可されていない AMI を使って起動したインスタンスを見つけるには**  
[Get-EC2InstanceImageMetadata](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2InstanceImageMetadata.html) コマンドレットを使用します。

```
Get-EC2InstanceImageMetadata `
    -Filter @{Name="image-allowed";Values="false"} | `
    Select InstanceId, @{Name='ImageId'; Expression={($_.ImageMetadata.ImageId)}}
```

出力例を次に示します。

```
InstanceId          ImageId
----------          -------
i-08fd74f3f1595fdbd ami-09245d5773578a1d6
i-0b1bf24fd4f297ab9 ami-07cccf2bd80ed467f
i-026a2eb590b4f7234 ami-0c0ec0a3a3a4c34c0
i-006a6a4e8870c828f ami-0a70b9d193ae8a799
i-0781e91cfeca3179d ami-00c257e12d6828491
i-02b631e2a6ae7c2d9 ami-0bfddf4206f1fa7b9
```

------
#### [ AWS Config ]

**ec2-instance-launched-with-allowed-ami** AWS Config ルールを追加し、それを要件に合わせて設定してから、それを使用してインスタンスを評価します。

詳細については、「*AWS Config デベロッパーガイド*」の「[Adding AWS Config Rules](https://docs.aws.amazon.com/config/latest/developerguide/evaluate-config_add-rules.html)」および「[ec2-instance-launched-with-allowed-ami](https://docs.aws.amazon.com/config/latest/developerguide/ec2-instance-launched-with-allowed-ami.html)」を参照してください。

------

# Amazon EC2 で使用するために AMI を公開する
<a name="sharingamis-intro"></a>

AMI をすべての AWS アカウント と共有することで公開できます。

AMI がパブリックに共有されないようにしたい場合は、*AMI のパブリックアクセスをブロックできます*。これにより、AMI を公開しようとするあらゆる試みがブロックされ、不正アクセスや AMI データの悪用を防ぐのに役立ちます。パブリックアクセスのブロックを有効にしても、既に公開されている AMI には影響しないことに注意してください。AMI は引き続き公開されています。詳細については「[AMI のパブリックアクセスのブロックについて](block-public-access-to-amis.md)」を参照してください。

特定のアカウントのみが AMI を使用してインスタンスを起動可能にする方法については、「[特定の AWS アカウントとの AMI の共有](sharingamis-explicit.md)」を参照してください。

**Topics**
+ [考慮事項](#considerations-for-sharing-public-AMIs)
+ [すべての AWS アカウントで AMI を共有 (パブリックに共有)](#share-an-ami-publicly)

## 考慮事項
<a name="considerations-for-sharing-public-AMIs"></a>

AMI を公開する前に、以下の点を検討してください。
+ **所有権** — AMI を公開するには、お客様の AWS アカウント がその AMI を所有している必要があります。
+ **リージョン** – AMI はリージョンのリソースです。共有した AMI は、共有したリージョンでのみ使用できます。AMI を他のリージョンで利用できるようにするには、AMI をそのリージョンにコピーし、共有します。詳細については「[Amazon EC2 AMI のコピー](CopyingAMIs.md)」を参照してください。
+ **パブリックアクセスをブロック** – AMI をパブリックに共有するには、AMI をパブリックに共有する各リージョンで [AMI のパブリックアクセスのブロック](block-public-access-to-amis.md)を無効にする必要があります。AMI をパブリックに共有した後で、AMI のパブリックアクセスのブロックを再度有効にして、AMI がそれ以上パブリックに共有されないようにできます。
+ **公開できない AMI** - 次のコンポーネントが含まれる AMI は公開できません (ただし、[AMI を特定の AWS アカウント と共有する](sharingamis-explicit.md)ことはできます)。
  + 暗号化されたボリューム
  + 暗号化されたボリュームのスナップショット
  + 製品コード
+ **機密データが公開されないようにする** - AMI を共有するときに機密データが公開されないようにするには、「[共有 Linux AMI の作成に関する推奨事項](building-shared-amis.md)」のセキュリティ考慮事項を読み、推奨アクションに従います。
+ **使用** — AMI を共有する場合、ユーザーは AMI からのインスタンスのみを起動できます。AMI はそれを削除、共有、または変更することはできません。ただし、AMI を使用してインスタンスを起動した後は、起動したインスタンスから AMI を作成できます。
+ **自動非推奨** – すべてのパブリック AMI を非推奨にする日はデフォルトで AMI 作成日の 2 年後になっています。非推奨にする日は 2 年より前の日付に設定できます。非推奨にする日を取り消す場合や、非推奨にする日をもっと先の日付に変える場合は、AMI を[特定の AWS アカウント とのみ共有する](sharingamis-explicit.md)ようにして、AMI を非公開にする必要があります。
+ **旧型の AMI の削除** — パブリック AMI の廃止日が過ぎ、その AMI で新しいインスタンスが 6 か月以上起動されなかった場合、AWS はそのパブリック共有プロパティを削除し、古くなった AMI がパブリック AMI リストに表示されないようにします。
+ **請求** — 他の AWS アカウント がお客様の AMI を使用してインスタンスを起動しても、お客様には請求されません。AMI を使用してインスタンスを起動するアカウントには、起動するインスタンスに対して請求されます。

## すべての AWS アカウントで AMI を共有 (パブリックに共有)
<a name="share-an-ami-publicly"></a>

AMI を公開すると、コンソールの **[コミュニティ AMI]** で使用できるようになります。これには、EC2 コンソールの左側のナビゲーターにある **[AMI カタログ]** から、またはコンソールを使用してインスタンスを起動するときにアクセスできます。AMI は、公開してから [**Community AMI**] に表示されるまでに、しばらく時間がかかることもあります。

------
#### [ Console ]

**[To make an AMI public]**

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

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストから AMI を選択し、**[アクション]** から **[AMI 権限の編集]** を選択してください。

1. **[AMI の可用性]** で、**[パブリック]** を選択してください。

1. [**変更の保存**] をクリックしてください。

------
#### [ AWS CLI ]

各 AMI には、所有者以外でその AMI を使用してインスタンスを起動できる AWS アカウント を制御する `launchPermission` プロパティがあります。AMI の `launchPermission` プロパティを変更することで、AMI を公開したり (この場合、すべての AWS アカウント に起動許可が与えられます) 、指定した AWS アカウント とのみ AMI を共有したりすることができます。

AMI の起動許可を持っているアカウントの一覧に対してアカウント ID の追加または削除ができます。AMI を公開するには、`all` グループを指定します。パブリック起動許可と明示的起動許可の両方を指定できます。

**[To make an AMI public]**

1. 次のように、[https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) コマンドを使用して、指定した AMI の `launchPermission` リストに `all` グループを追加します。

   ```
   aws ec2 modify-image-attribute \
       --image-id ami-0abcdef1234567890 \
       --launch-permission "Add=[{Group=all}]"
   ```

1. AMI の起動許可を確認するには、[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) コマンドを使用します。

   ```
   aws ec2 describe-image-attribute \
       --image-id ami-0abcdef1234567890 \
       --attribute launchPermission
   ```

1. (オプション) AMI をプライベートに戻すには、その起動許可から `all` グループを削除します。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

   ```
   aws ec2 modify-image-attribute \
       --image-id ami-0abcdef1234567890 \
       --launch-permission "Remove=[{Group=all}]"
   ```

------
#### [ PowerShell ]

各 AMI には、所有者以外でその AMI を使用してインスタンスを起動できる AWS アカウント を制御する `launchPermission` プロパティがあります。AMI の `launchPermission` プロパティを変更することで、AMI を公開したり (この場合、すべての AWS アカウント に起動許可が与えられます) 、指定した AWS アカウント とのみ AMI を共有したりすることができます。

AMI の起動許可を持っているアカウントの一覧に対してアカウント ID の追加または削除ができます。AMI を公開するには、`all` グループを指定します。パブリック起動許可と明示的起動許可の両方を指定できます。

**[To make an AMI public]**

1. 次のように、[https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) コマンドを使用して、指定した AMI の `launchPermission` リストに `all` グループを追加します。

   ```
   Edit-EC2ImageAttribute `
       -ImageId ami-0abcdef1234567890 `
       -Attribute launchPermission `
       -OperationType add `
       -UserGroup all
   ```

1. AMI の起動許可を確認するには、次の [https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) コマンドを使用します。

   ```
   Get-EC2ImageAttribute `
       -ImageId ami-0abcdef1234567890 `
       -Attribute launchPermission
   ```

1. (オプション) AMI をプライベートに戻すには、その起動許可から `all` グループを削除します。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

   ```
   Edit-EC2ImageAttribute `
       -ImageId ami-0abcdef1234567890 `
       -Attribute launchPermission `
       -OperationType remove `
       -UserGroup all
   ```

------

# AMI のパブリックアクセスのブロックについて
<a name="block-public-access-to-amis"></a>

AMI がパブリックに共有されないようにするには、AMI *のパブリックアクセスのブロ* ックを有効にします。

パブリックアクセスのブロックを有効にすると、AMI を公開しようとする試みは自動的にブロックされます。ただし、既にパブリック AMI がある場合は、公開されたままになります。

AMI をパブリックに共有するには、パブリックアクセスのブロックを無効にする必要があります。共有が完了したら、AMI が意図せずパブリックに共有されないように、パブリックアクセスのブロックを再度有効にするのがベストプラクティスです。

**注記**  
この設定は、アカウントレベルで直接、または宣言ポリシーを使用して設定されます。AMI のパブリック共有を防止する各 AWS リージョンで設定する必要があります。宣言型ポリシーを使用すると、複数のリージョンと複数のアカウントで同時に設定を適用できます。宣言ポリシーが使用されている場合、アカウント内で直接設定を変更することはできません。このトピックでは、アカウント内で設定を直接設定する方法について説明します。宣言ポリシーの使用の詳細については、「*AWS Organizations ユーザーガイド*」‭の‬「[宣言ポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)」‬を参照してください。

管理者ユーザーのみが AMI のパブリックアクセスのブロックを有効または無効にできるように、IAM アクセス許可を管理者ユーザーに制限できます。

**Topics**
+ [デフォルト設定](#block-public-access-to-amis-default-settings)
+ [AMI のパブリックアクセスのブロック設定を管理する](manage-block-public-access-for-amis.md)

## デフォルト設定
<a name="block-public-access-to-amis-default-settings"></a>

**[AMI のパブリックアクセスをブロック]** 設定は、アカウントが新規か既存か、およびパブリック AMI の有無に応じて、デフォルトで有効または無効になります。次のテーブルは、デフォルト設定の一覧です。


| AWS アカウント | AMI のデフォルト設定ではパブリックアクセスをブロックします。 | 
| --- | --- | 
| 新しいアカウント | 有効 | 
|  パブリック AMI のない既存のアカウント ¹  | 有効 | 
|  1 つ以上のパブリック AMI がある既存のアカウント  | Disabled | 

¹ 2023 年 7 月 15 日以降のアカウントに 1 つ以上のパブリック AMI があった場合、その後すべての AMI を非公開にしたとしても、**[AMI のパブリックアクセスをブロック]** はデフォルトで無効になっています。

# AMI のパブリックアクセスのブロック設定を管理する
<a name="manage-block-public-access-for-amis"></a>

AMI を公開して共有できるかどうかを制御する AMI 用のパブリックアクセスのブロック設定を管理できます。Amazon EC2 コンソールまたは AWS CLI を使用して、AMI の現在のパブリックアクセスのブロック状態を有効化、無効化、または表示できます。

## AMI のパブリックアクセスのブロック状態を表示する
<a name="get-block-public-access-state-for-amis"></a>

AMI のパブリックアクセスのブロック状態を表示すると、AMI のパブリック共有がアカウントでブロックされているかどうかを確認できます。AMI のパブリック共有がブロックされているかどうかを確認するには、それぞれの AWS リージョン で状態を確認する必要があります。

**必要なアクセス許可**  
AMI の現在のパブリックアクセスのブロック設定を取得するには、`GetImageBlockPublicAccessState` IAM アクセス許可が必要です。

------
#### [ Console ]

**指定したリージョンで AMI のパブリックアクセスのブロック状態を表示するには**

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

1. 画面上部のナビゲーションバーで、AMI のパブリックアクセスのブロック状態を表示するリージョンを選択してください。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[データ保護とセキュリティ]** を選択します。

1. **[AMI のパブリックアクセスをブロック]** で **[パブリックアクセス]** フィールドを確認します。値は **[新しいパブリック共有をブロック中]** または **[新しいパブリック共有が可能]** です。

------
#### [ AWS CLI ]

**AMI のパブリックアクセスのブロック状態を取得するには**  
[get-image-block-public-access-state](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-image-block-public-access-state.html) コマンドを使用します。この値は `block-new-sharing` または `unblocked` のどちらかです。

**例: 特定のリージョンの場合**

```
aws ec2 get-image-block-public-access-state --region us-east-1
```

`ManagedBy` フィールドは、設定を構成したエンティティを示します。この例では、`account` は設定がアカウントで直接設定されたことを示します。`declarative-policy` という値は、その設定が宣言的ポリシーによって構成されたことを意味します。詳細については「*AWS OrganizationsIAM ユーザーガイド*」の「[ マネージドポリシー](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_declarative.html)」を参照してください。

```
{
    "ImageBlockPublicAccessState": "block-new-sharing",
    "ManagedBy": "account"
}
```

**例: アカウントの全リージョンの場合**

```
echo -e "Region   \t Public Access State" ; \
echo -e "-------------- \t ----------------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 get-image-block-public-access-state \
            --region $region \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

出力例を次に示します。

```
Region           Public Access State
--------------   ----------------------
ap-south-1       block-new-sharing
eu-north-1       unblocked
eu-west-3        block-new-sharing
...
```

------
#### [ PowerShell ]

**AMI のパブリックアクセスのブロック状態を取得するには**  
[Get-EC2ImageBlockPublicAccessState](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageBlockPublicAccessState.html) コマンドレットを使用します。この値は `block-new-sharing` または `unblocked` のどちらかです。

**例: 特定のリージョンの場合**

```
Get-EC2ImageBlockPublicAccessState -Region us-east-1
```

出力例を次に示します。

```
block-new-sharing
```

**例: アカウントの全リージョンの場合**

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
        [PSCustomObject]@{
            Region   = $_
            PublicAccessState = (Get-EC2ImageBlockPublicAccessState -Region $_)
        }
} | `
Format-Table -AutoSize
```

出力例を次に示します。

```
Region         PublicAccessState
------         -----------------
ap-south-1     block-new-sharing
eu-north-1     block-new-sharing
eu-west-3      block-new-sharing
...
```

------

## AMI のパブリックアクセスのブロックを有効にする
<a name="enable-block-public-access-for-amis"></a>

AMI がパブリックに共有されないようにするには、AMI のパブリックアクセスのブロックを有効にします。AMI がパブリックに共有されないようにする AWS リージョン ごとに、AMI のパブリックアクセスのブロックを有効にする必要があります。既にパブリック AMI がある場合は、引き続き公開されます。

**必要なアクセス許可**  
AMI のパブリックアクセスのブロック設定を有効にするには、`EnableImageBlockPublicAccess` IAM アクセス許可が必要です。

**考慮事項**
+ この設定を行うには、最大 10 分かかる場合があります。この間、パブリックアクセス状態を記述すると、レスポンスは `unblocked` になります。設定が完了すると、レスポンスは `block-new-sharing` になります。

------
#### [ Console ]

**指定したリージョンで AMI のパブリックアクセスのブロックを有効にするには**

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

1. 画面上部のナビゲーションバーで、AMI のパブリックアクセスをブロックするリージョンを選択してください。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[データ保護とセキュリティ]** を選択します。

1. **[AMI のパブリックアクセスをブロック]** で **[管理]** を選択してください。

1. **[新しいパブリック共有をブロック]** のチェックボックスをオンにしたら、**[更新]** を選択してください。

------
#### [ AWS CLI ]

**AMI のパブリックアクセスのブロックを有効にするには**  
[enable-image-block-public-access](https://docs.aws.amazon.com/cli/latest/reference/ec2/enable-image-block-public-access.html) コマンドを使用します。

**例: 特定のリージョンの場合**

```
aws ec2 enable-image-block-public-access \
--region us-east-1 \
--image-block-public-access-state block-new-sharing
```

出力例を次に示します。

```
{ 
    "ImageBlockPublicAccessState": "block-new-sharing"
}
```

**例: アカウントの全リージョンの場合**

```
echo -e "Region   \t Public Access State" ; \
echo -e "-------------- \t ----------------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 enable-image-block-public-access \
            --region $region \
            --image-block-public-access-state block-new-sharing \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

出力例を次に示します。

```
Region           Public Access State
--------------   ----------------------
ap-south-1       block-new-sharing
eu-north-1       block-new-sharing
eu-west-3        block-new-sharing
...
```

------
#### [ PowerShell ]

**AMI のパブリックアクセスのブロックを有効にするには**  
[Enable-EC2ImageBlockPublicAccess](https://docs.aws.amazon.com/powershell/latest/reference/items/Enable-EC2ImageBlockPublicAccess.html) コマンドを使用します。

**例: 特定のリージョンの場合**

```
Enable-EC2ImageBlockPublicAccess `
    -Region us-east-1 `
    -ImageBlockPublicAccessState block-new-sharing
```

出力例を次に示します。

```
Value
-----
block-new-sharing
```

**例: アカウントの全リージョンの場合**

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region            = $_
        PublicAccessState = (
        Enable-EC2ImageBlockPublicAccess `
         -Region $_ `
         -ImageBlockPublicAccessState block-new-sharing)
    }
} | `
Format-Table -AutoSize
```

出力例を次に示します。

```
Region         PublicAccessState
------         -----------------
ap-south-1     block-new-sharing
eu-north-1     block-new-sharing
eu-west-3      block-new-sharing
...
```

------

## AMI のパブリックアクセスのブロックを無効にする
<a name="disable-block-public-access-for-amis"></a>

アカウント内のユーザーが AMI をパブリックに共有できるようにするには、アカウントレベルでパブリックアクセスのブロックを無効にします。AMI がパブリックに共有できるようにする AWS リージョン ごとに、AMI のパブリックアクセスのブロックを無効にする必要があります。

**必要なアクセス許可**  
AMI のパブリックアクセスのブロック設定を無効にするには、`DisableImageBlockPublicAccess` IAM アクセス許可が必要です。

**考慮事項**
+ この設定を行うには、最大 10 分かかる場合があります。この間、パブリックアクセス状態を記述すると、レスポンスは `block-new-sharing` になります。設定が完了すると、レスポンスは `unblocked` になります。

------
#### [ Console ]

**指定したリージョンで AMI のパブリックアクセスのブロックを無効にするには**

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

1. 画面上部のナビゲーションバーで、AMI のパブリックアクセスのブロックを無効にするリージョンを選択してください。

1. ナビゲーションペインで、**ダッシュボード**を選択してください。

1. **[アカウント属性]** カードの **[設定]** で、**[データ保護とセキュリティ]** を選択します。

1. **[AMI のパブリックアクセスをブロック]** で **[管理]** を選択してください。

1. **[新しいパブリック共有のブロック]** のチェックボックスをオフにしたら、**[更新]** を選択してください。

1. 確認を求められたら、「**confirm**」と入力してから、**[パブリック共有の許可]** を選択してください。

------
#### [ AWS CLI ]

**AMI のパブリックアクセスのブロックを無効にするには**  
[disable-image-block-public-access](https://docs.aws.amazon.com/cli/latest/reference/ec2/disable-image-block-public-access.html) コマンドを使用します。

**例: 特定のリージョンの場合**

```
aws ec2 disable-image-block-public-access --region us-east-1
```

出力例を次に示します。

```
{
   "ImageBlockPublicAccessState": "unblocked"
}
```

**例: アカウントの全リージョンの場合**

```
echo -e "Region   \t Public Access State" ; \
echo -e "-------------- \t ----------------------" ; \
for region in $(
    aws ec2 describe-regions \
        --region us-east-1 \
        --query "Regions[*].[RegionName]" \
        --output text
    ); 
    do (output=$(
        aws ec2 disable-image-block-public-access \
            --region $region \
            --output text)
        echo -e "$region \t $output" 
    );
done
```

出力例を次に示します。

```
Region           Public Access State
--------------   ----------------------
ap-south-1       unblocked
eu-north-1       unblocked
eu-west-3        unblocked
...
```

------
#### [ PowerShell ]

**AMI のパブリックアクセスのブロックを無効にするには**  
[Disable-EC2ImageBlockPublicAccess](https://docs.aws.amazon.com/powershell/latest/reference/items/Disable-EC2ImageBlockPublicAccess.html) コマンドレットを使用します。

**例: 特定のリージョンの場合**

```
Disable-EC2ImageBlockPublicAccess -Region us-east-1
```

出力例を次に示します。

```
Value
-----
unblocked
```

**例: アカウントの全リージョンの場合**

```
(Get-EC2Region).RegionName | `
    ForEach-Object {
    [PSCustomObject]@{
        Region            = $_
        PublicAccessState = (Disable-EC2ImageBlockPublicAccess -Region $_)
    }
} | `
Format-Table -AutoSize
```

出力例を次に示します。

```
Region         PublicAccessState
------         -----------------
ap-south-1     unblocked
eu-north-1     unblocked
eu-west-3      unblocked
...
```

------

# 組織および組織単位での共有 AMI の使用
<a name="share-amis-with-organizations-and-OUs"></a>

 [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services_list.html) は、作成し一元管理する組織に、複数の AWS アカウント を統合するためのアカウント管理サービスです。AMI は、[特定のアカウントと共有する](sharingamis-explicit.md)だけでなく、組織または組織単位 (OU) と共有することもできます。

組織とは、AWS アカウント を統合して一元管理するために作成するエンティティのことです。アカウントを階層ツリーのような構造に編成して、[ルート](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#root)を最上部に置いて[組織単位](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html#organizationalunit)をその組織ルート下にネストすることができます。各アカウントは、ルートに直接追加するか、階層内の OU のいずれかに配置することができます。詳細については、「AWS Organizations ユーザーガイド**」の[「AWS 組織の用語およびコンセプト](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)」を参照してください。

AMI を組織または OU と共有すると、すべての子アカウントが AMI にアクセスできます。例えば、次の図では、AMI は最上位レベルの OU と共有されています (**1** の数字の矢印で示されます)。その最上位レベルの OU の下にネストされているすべての OU やアカウント (**2** の数字の点線で示したもの) も AMI にアクセスできます。点線の外側にある組織や OU (数字の** 3 **で示されている) のアカウントは、AMI が共有されている OU の子供ではないため、AMI へのアクセス権はありません。

![\[AMI は OU と共有され、すべての子 OU とアカウントが AMI にアクセスできます。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/ami-share-with-orgs-and-ous.png)


**Topics**
+ [考慮事項](#considerations-org-ou)
+ [組織または組織単位の ARN を取得する](get-org-ou-ARN.md)
+ [組織と OU に KMS キーの使用を許可する](allow-org-ou-to-use-key.md)
+ [組織または OU の AMI 共有を管理する](share-amis-org-ou-manage.md)

## 考慮事項
<a name="considerations-org-ou"></a>

特定の組織または組織単位で AMI を共有する場合は、以下について検討してください。
+ **所有権** — AMI を共有するには、お客様の AWS アカウント がその AMI を所有している必要があります。
+ **共有制限** — AMI の所有者は、メンバーではない組織や OU を含め、任意の組織または OU と AMI を共有できます。

  リージョン内で AMI を共有できるエンティティの最大数については、「[Amazon EC2 Service Quotas](https://docs.aws.amazon.com//general/latest/gr/ec2-service.html#limits_ec2)」をご覧ください。
+ **タグ** - ユーザー定義タグ (AMI にアタッチするタグ) は共有できません。AMI を共有する場合、ユーザー定義タグは AMI が共有されている組織または OU のどの AWS アカウント にも使用できません。
+ **ARN 形式** — コマンドで組織または OU を指定する場合は、正しい ARN 形式を必ず使用してください。ID のみを指定するとエラーになります。例えば、`o-123example` や `ou-1234-5example` を指定するとエラーになります。

  正しい ARN 形式:
  + 組織の ARN: `arn:aws:organizations::111122223333:organization/organization-id`
  + OU ARN: `arn:aws:organizations::111122223333:ou/organization-id/ou-id`

  コードの説明は以下のとおりです。
  + *`111122223333`* は、管理アカウントの 12 桁アカウント ID の例です。管理アカウント番号がわからない場合は、管理アカウント番号を含む ARN を取得するための組織または組織単位を記述できます。詳細については、[組織または組織単位の ARN を取得する](get-org-ou-ARN.md) を参照してください。
  + *`organization-id`* は組織 ID であり、例えば、`o-123example` となります。
  + *`ou-id`* は組織単位 ID であり、例えば、`ou-1234-5example` となります。

  ARN の形式の詳細については、「*IAM ユーザーガイド*」の「[Amazon リソースネーム (ARN)](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html)」を参照してください。
+ **暗号化とキー** — 暗号化されていないスナップショットと暗号化されたスナップショットによってバックアップされた AMI を共有できます。
  + 暗号化されたスナップショットは、カスタマー管理された型キーを使用して暗号化する必要があります。デフォルトの AWS 管理キーで暗号化されたスナップショットでバックアップされた AMI を共有することはできません。
  + 暗号化されたスナップショットによってバックアップされた AMI を共有する場合、スナップショットの暗号化に使用されたカスタマー管理されたキーの使用を組織または OU に許可する必要があります。詳細については、[組織と OU に KMS キーの使用を許可する](allow-org-ou-to-use-key.md) を参照してください。
+ **リージョン** – AMI はリージョンのリソースです。共有した AMI は、共有したリージョンでのみ使用できます。AMI を他のリージョンで利用できるようにするには、AMI をそのリージョンにコピーし、共有します。詳細については、[Amazon EC2 AMI のコピー](CopyingAMIs.md) を参照してください。
+ **使用** — AMI を共有する場合、ユーザーは AMI からのインスタンスのみを起動できます。AMI はそれを削除、共有、または変更することはできません。ただし、AMI を使用してインスタンスを起動した後は、起動したインスタンスから AMI を作成できます。
+ **請求** — 他の AWS アカウント がお客様の AMI を使用してインスタンスを起動しても、お客様には請求されません。AMI を使用してインスタンスを起動するアカウントには、起動するインスタンスに対して請求されます。

# 組織または組織単位の ARN を取得する
<a name="get-org-ou-ARN"></a>

組織と組織単位 ARN には、12 桁の管理アカウント番号が含まれています。管理アカウント番号がわからない場合は、組織と組織単位を記述して、それぞれの ARN を取得できます。以下の例では、`123456789012` が管理アカウントのアカウント ID です。

**必要なアクセス許可**  
ARN を取得する前に、組織と組織単位を記述する権限が必要です。次のポリシーで、これらの権限が付与されます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "organizations:Describe*"
            ],
            "Resource": "*"
        }
    ]
}
```

------

------
#### [ AWS CLI ]

**組織の ARN を取得するには**  
[https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organization.html](https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organization.html) コマンドを使用します。組織 ARN のみを返す `--query` オプションを追加します。

```
aws organizations describe-organization --query 'Organization.Arn'
```

出力例を次に示します。

```
"arn:aws:organizations::123456789012:organization/o-1234567abc"
```

**組織単位の ARN を取得するには**  
[https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organizational-unit.html](https://docs.aws.amazon.com/cli/latest/reference/organizations/describe-organizational-unit.html) コマンドを使用します。`--query` パラメータを使用して、組織単位の ARN のみを返します。

```
aws organizations describe-organizational-unit \
    --organizational-unit-id ou-a123-b4567890 \
    --query 'OrganizationalUnit.Arn'
```

出力例を次に示します。

```
"arn:aws:organizations::123456789012:ou/o-1234567abc/ou-a123-b4567890"
```

------
#### [ PowerShell ]

**組織の ARN を取得するには**  
[Get-ORGOrganization](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-ORGOrganization.html) コマンドレットを使用します。

```
(Get-ORGOrganization).Arn
```

出力例を次に示します。

```
arn:aws:organizations::123456789012:organization/o-1234567abc
```

**組織単位の ARN を取得するには**  
[Get-ORGOrganizationalUnit](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-ORGOrganizationalUnit.html) コマンドレットを使用します。

```
(Get-ORGOrganizationalUnit -OrganizationalUnitId "ou-a123-b4567890").Arn
```

出力例を次に示します。

```
arn:aws:organizations::123456789012:ou/o-1234567abc/ou-a123-b4567890
```

------

# 組織と OU に KMS キーの使用を許可する
<a name="allow-org-ou-to-use-key"></a>

暗号化されたスナップショットによってバックアップされた AMI を共有する場合、組織または OU がスナップショットの暗号化に使用されの使用を許可する必要もあります。

**注記**  
暗号化されたスナップショットは、カスタマー *管理された型キーを使用して暗号化す* る必要があります。デフォルトの AWS 管理キーで暗号化されたスナップショットでバックアップされた AMI を共有することはできません。

KMS キーへのアクセスを制御するには、[キーポリシー](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)で [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid) および [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths) 条件キーを使用して、指定したアクションに対する許可を特定のプリンシパルにのみ許可します。そのプリンシパルは、ユーザー、IAM ロール、フェデレーションユーザー、または AWS アカウント ルートユーザーです。

条件キーは次のように使用されます。
+ `aws:PrincipalOrgID` – 指定された ID で表される組織に属するプリンシパルを許可します。
+ `aws:PrincipalOrgPaths` – 指定されたパスで表される OU に属するプリンシパルを許可します。

組織または OU に KMS キーを使用するアクセス権限を付与するには、次のステートメントをキーポリシーに追加します。

```
{
    "Sid": "Allow access for organization root",
    "Effect": "Allow",
    "Principal": "*",
    "Action": [
        "kms:Describe*",
        "kms:List*",
        "kms:Get*",
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:CreateGrant"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:PrincipalOrgID": "o-123example"
        }
    }
}
```

特定の OU (およびその OU に属するアカウント) に KMS キーを使用するアクセス許可を付与するには、次の例のようなポリシーを使用できます。

```
{
        "Sid": "Allow access for specific OUs and their descendants",
        "Effect": "Allow",
        "Principal": "*",
        "Action": [
            "kms:Describe*",
            "kms:List*",
            "kms:Get*",
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:CreateGrant"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "aws:PrincipalOrgID": "o-123example"
            },
            "ForAnyValue:StringLike": {
                "aws:PrincipalOrgPaths": [
                    "o-123example/r-ab12/ou-ab12-33333333/*",
                    "o-123example/r-ab12/ou-ab12-22222222/*"
                ]
            }
        }
}
```

その他の条件ステートメントの例については、「*IAM ユーザーガイド*」の「[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid)」と「[https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgpaths)」を参照してください。

クロスアカウントアクセス権限の付与の詳細については、「*AWS Key Management Service Developer Guide*」の「[Allowing users in other accounts to use a KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)」を参照してください。

# 組織または OU の AMI 共有を管理する
<a name="share-amis-org-ou-manage"></a>

組織および組織単位 (OU) との AMI の共有を管理することで、組織および OU が Amazon EC2 インスタンスを起動できるかどうかを制御できます。

## AMI が共有されている組織と OU を表示する
<a name="decribe-ami-launch-permissions"></a>

AMI を共有した組織と OU を見つけることができます。

------
#### [ Console ]

**を使用して AMI を共有した組織およびOUを確認するには**

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

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストで AMI を選択し、**[アクセス許可]** タブをクリックし、**[共有組織/OU]** までスクロールします。

   共有されている AMI を見つけるには､「[Amazon EC2 インスタンスで使用する共有 AMI を検索する](usingsharedamis-finding.md)」を参照してください。

------
#### [ AWS CLI ]

**を使用して AMI を共有した組織およびOUを確認するには**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-image-attribute.html) コマンドを `launchPermission` 属性と共に使用します。

```
aws ec2 describe-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute launchPermission
```

以下に、応答の例を示します。

```
{
    "ImageId": "ami-0abcdef1234567890",
    "LaunchPermissions": [
        {
            "OrganizationalUnitArn": "arn:aws:organizations::111122223333:ou/o-123example/ou-1234-5example"
        }
    ]
}
```

------
#### [ PowerShell ]

**を使用して AMI を共有した組織およびOUを確認するには**  
[Get-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2ImageAttribute.html) コマンドレットを使用します。

```
Get-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission
```

------

## 組織または OU で AMI を共有する
<a name="share-amis-org-ou"></a>

組織または OU で AMI を共有できます。

**注記**  
AMI を共有するために、AMI の参照先の Amazon EBS スナップショットを共有する必要はありません。共有する必要があるのは AMI 自体だけです。起動の際に、参照先の EBS スナップショットへのインスタンスアクセスが自動的に提供されます。ただし、AMI が参照するスナップショットを暗号化するために使用した KMS キーは共有する必要があります。詳細については、[組織と OU に KMS キーの使用を許可する](allow-org-ou-to-use-key.md) を参照してください。

------
#### [ Console ]

**AMI を組織または OU と共有するには**

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

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストで AMI を選択し、**[アクション]** から **[AMI 権限の編集]** を選択してください。

1. **[AMI の利用状況]** で、**[プライベート]** を選択してください。

1. **[共有組織/OU]** の隣で、**[組織/OU ARN 追加]** を選択してください。

1. **[組織/OU ARN]** で、AMI を共有する組織 ARN または OU ARN を入力し、**[AMI の共有]** を選択してください。ID だけでなく、完全な ARN を指定する必要があることに注意してください。

   この AMI を複数の組織または OU と共有するには、この手順を繰り返して、必要なすべての組織または OU を追加します。

1. 完了したら、**[変更保存]** を選択してください。

1. (オプション) AMI を共有した組織または OU を表示するには、リストから AMI を選択し、**[アクセス許可]** タブをクリックし、**[共有組織/OU]** までスクロールします。共有されている AMI を見つけるには､「[Amazon EC2 インスタンスで使用する共有 AMI を検索する](usingsharedamis-finding.md)」を参照してください。

------
#### [ AWS CLI ]

**AMI を組織または OU と共有するには**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) コマンドを使用すると、指定した組織に対し、指定した AMI の起動許可が与えられます。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Add=[{OrganizationArn=arn:aws:organizations::123456789012:organization/o-123example}]"
```

**を使用して AMI を OUと共有するには**  
[[modify-image-attribute]](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) コマンドを使用すると、指定した OU に対し、指定した AMI の起動許可が与えられます。ID だけでなく、完全な ARN を指定する必要があることに注意してください。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Add=[{OrganizationalUnitArn=arn:aws:organizations::123456789012:ou/o-123example/ou-1234-5example}]"
```

------
#### [ PowerShell ]

AMI を共有するには、次の例のように [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) コマンド (Windows PowerShell用ツール) を使用します。

**AMI を組織または OU と共有するには**  
次のコマンドを使用すると、指定した組織に対し、指定した AMI の起動許可が与えられます。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission `
    -OperationType add `
    -OrganizationArn "arn:aws:organizations::123456789012:organization/o-123example"
```

**組織または OU と AMI の共有を停止するには**  
次のコマンドを使用すると、指定した組織から指定した AMI の起動許可が削除されます。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission `
    -OperationType remove `
    -OrganizationArn "arn:aws:organizations::123456789012:organization/o-123example"
```

**すべての組織、OU、および AWS アカウント と AMI の共有を停止するには**  
次のコマンドを使用すると、指定した AMI からパブリック起動許可と明示的起動許可がすべて削除されます。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

```
Reset-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission
```

------

## 組織または OU での AMI 共有を停止する
<a name="stop-sharing-amis-org-ou"></a>

組織または OU での AMI 共有を停止できます。

**注記**  
AMI が共有されている組織または OU 内にある場合、特定のアカウントと AMI の共有を停止することはできません。アカウントの起動権限を削除して AMI の共有を停止しようとすると、Amazon EC2 は成功メッセージを返します。ただし、AMI は引き続きアカウントと共有されます。

------
#### [ Console ]

**組織または OU と AMI の共有を停止するには**

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

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストで AMI を選択し、**[アクション]** から **[AMI 権限の編集]** を選択してください。

1. **[共有組織/OU]** で、AMI の共有を停止する組織または OU を選択し、**[選択を削除]** を選択してください。

1. 完了したら、**[変更保存]** を選択してください。

1. (オプション) AMI の組織または OU との共有の停止を確認するには、リストから AMI を選択し、**[アクセス許可]** タブをクリックし、**[共有組織/OU]** までスクロールします。

------
#### [ AWS CLI ]

**組織または OU と AMI の共有を停止するには**  
[modify-image-attribute](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) コマンドを使用します。この例では、指定した組織から指定した AMI の起動許可が削除されます。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Remove=[{OrganizationArn=arn:aws:organizations::123456789012:organization/o-123example}]"
```

**すべての組織、OU、および AWS アカウント と AMI の共有を停止するには**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/reset-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/reset-image-attribute.html) コマンドを使用します。この例では、指定した AMI からパブリック起動許可と明示的起動許可がすべて削除されます。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

```
aws ec2 reset-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute launchPermission
```

------
#### [ PowerShell ]

**組織または OU と AMI の共有を停止するには**  
[Edit-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) コマンドレットを使用します。この例では、指定した組織から指定した AMI の起動許可が削除されます。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission `
    -OperationType remove `
    -OrganizationArn "arn:aws:organizations::123456789012:organization/o-123example"
```

**すべての組織、OU、および AWS アカウント と AMI の共有を停止するには**  
[Reset-EC2ImageAttribute](https://docs.aws.amazon.com/powershell/latest/reference/items/Reset-EC2ImageAttribute.html) コマンドレットを使用します。この例では、指定した AMI からパブリック起動許可と明示的起動許可がすべて削除されます。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

```
Reset-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute LaunchPermission
```

------

# 特定の AWS アカウントとの AMI の共有
<a name="sharingamis-explicit"></a>

AMI を公開せず、特定の AWS アカウント とだけ共有することもできます。これに必要なものは AWS アカウント ID のみです。

AWS アカウント ID は、AWS アカウント を一意に識別する 12 桁の数値です (`012345678901` など)。詳細については、「*AWS アカウント管理 リファレンスガイド*」の「[AWS アカウント 識別子の表示](https://docs.aws.amazon.com/accounts/latest/reference/manage-acct-identifiers.html)」を参照してください。



## 考慮事項
<a name="considerations-for-sharing-AMI-with-accounts"></a>

特定の AWS アカウント で AMI を共有する場合は、以下について検討してください。
+ **所有権** — AMI を共有するには、お客様の AWS アカウント がその AMI を所有している必要があります。
+ **共有制限** – リージョン内で AMI を共有できるエンティティの最大数については、「[Amazon EC2 Service Quotas](https://docs.aws.amazon.com//general/latest/gr/ec2-service.html#limits_ec2)」をご覧ください。
+ **タグ** - ユーザー定義タグ (AMI にアタッチするタグ) は共有できません。AMI を共有する場合、ユーザー定義タグは AMI が共有されている AWS アカウント では使用できません。
+ **スナップショット** –AMI を共有するために、AMI の参照先の Amazon EBS スナップショットを共有する必要はありません。共有できるのは AMI 自体のみです。システムは起動時に参照される EBS スナップショットへのインスタンス アクセスを提供します。ただし、AMI が参照するスナップショットを暗号化するために使用した KMS キー は共有する必要があります。詳細については、「*Amazon EBS ユーザーガイド*」の「[Amazon EBS スナップショットの共有](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modifying-snapshot-permissions.html)」を参照してください。
+ **暗号化とキー** — 暗号化されていないスナップショットと暗号化されたスナップショットによってバックアップされた AMI を共有できます。
  + 暗号化されたスナップショットは、KMS キーを使用して暗号化する必要があります。デフォルトの AWS 管理キーで暗号化されたスナップショットでバックアップされた AMI を共有することはできません。
  + 暗号化されたスナップショットによってバックアップされた AMI を共有する場合、スナップショットの暗号化に使用された KMS キーの使用を AWS アカウント に許可する必要があります。詳細については、[組織と OU に KMS キーの使用を許可する](allow-org-ou-to-use-key.md) を参照してください。暗号化にカスタマー管理されたキーを使用する際に、Auto Scaling インスタンスの起動に必要となるキーポリシーを設定するには、「*Amazon EC2 Auto Scaling ユーザーガイド*」の「[暗号化ボリュームで使用するために必要な AWS KMS key ポリシー](https://docs.aws.amazon.com/autoscaling/ec2/userguide/key-policy-requirements-EBS-encryption.html)」を参照してください。
+ **リージョン** – AMI はリージョンのリソースです。共有した AMI は、そのリージョンでのみ使用できます。AMI を他のリージョンで利用できるようにするには、AMI をそのリージョンにコピーし、共有します。詳細については、[Amazon EC2 AMI のコピー](CopyingAMIs.md) を参照してください。
+ **使用** — AMI を共有する場合、ユーザーは AMI からのインスタンスのみを起動できます。AMI はそれを削除、共有、または変更することはできません。ただし、AMI を使用してインスタンスを起動した後は、インスタンスから AMI を作成できます。
+ **共有 AMI のコピー** — 別のアカウントのユーザーが共有 AMI をコピーする場合は、AMI をバックアップするストレージに対する読み取り権限をそのユーザーに付与する必要があります。詳細については、[アカウント間のコピー](how-ami-copy-works.md#copy-ami-across-accounts) を参照してください。
+ **請求** — 他の AWS アカウント がお客様の AMI を使用してインスタンスを起動しても、お客様には請求されません。AMI を使用してインスタンスを起動するアカウントには、起動するインスタンスに対して請求されます。

------
#### [ Console ]

**明示的な起動許可を与えるには**

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

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストで AMI を選択し、**[アクション]** から **[AMI 権限の編集]** を選択してください。

1. **[プライベート]** を選択してください。

1. **[共有アカウント]** で、**[アカウント ID の追加]** () を選択してください。

1. **AWS アカウント ID** には、AMI を共有したい AWS アカウント ID を入力し、**[AMI の共有]** を選択してください。

   この AMI を複数のアカウントで共有するには、必要なアカウント ID がすべて追加されるまでステップ 5 と 6 を繰り返します。

1. 完了したら、**変更を保存** を選択してください。

1. (オプション) AMI を共有した AWS アカウント ID を表示するには、リストから AMI を選択し、**[アクセス許可]** タブを開いてください。共有されている AMI を見つけるには､「[Amazon EC2 インスタンスで使用する共有 AMI を検索する](usingsharedamis-finding.md)」を参照してください。

------
#### [ AWS CLI ]

AMI を共有するには、次の例のように [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-image-attribute.html) マンド () を使用します。

**明示的な起動許可を与えるには**  
次の例では、指定した AWS アカウントに対し、指定した AMI の起動許可が与えられます。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Add=[{UserId=123456789012}]"
```

**アカウントに与えた起動許可を取り消すには**  
次の例では、指定した AWS アカウントから指定した AMI の起動許可が削除されます。

```
aws ec2 modify-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --launch-permission "Remove=[{UserId=123456789012}]"
```

**すべての起動許可を取り消すには**  
次の例では、指定した AMI からパブリック起動許可と明示的起動許可がすべて削除されます。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

```
aws ec2 reset-image-attribute \
    --image-id ami-0abcdef1234567890 \
    --attribute launchPermission
```

------
#### [ PowerShell ]

AMI を共有するには、次の例のように [https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2ImageAttribute.html) コマンド (Windows PowerShell用ツール) を使用します。

**明示的な起動許可を与えるには**  
次の例では、指定した AWS アカウントに対し、指定した AMI の起動許可が与えられます。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 ` 
    -Attribute launchPermission `
    -OperationType add `
    -UserId "123456789012"
```

**アカウントに与えた起動許可を取り消すには**  
次の例では、指定した AWS アカウントから指定した AMI の起動許可が削除されます。

```
Edit-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission -OperationType remove `
    -UserId "123456789012"
```

**すべての起動許可を取り消すには**  
次の例では、指定した AMI からパブリック起動許可と明示的起動許可がすべて削除されます。AMI の所有者には常に起動許可が与えられるため、このコマンドの影響を受けないことにご注意ください。

```
Reset-EC2ImageAttribute `
    -ImageId ami-0abcdef1234567890 `
    -Attribute launchPermission
```

------

# お客様の AWS アカウント と AMI の共有をキャンセルする
<a name="cancel-sharing-an-AMI"></a>

AMI の起動許可にアカウントを追加することで、Amazon マシンイメージ (AMI) を[特定の AWS アカウント と共有](sharingamis-explicit.md)できます。AMI が AWS アカウント と共有されていて、そのアカウントとの共有が不要になった場合は、AMI の起動許可からアカウントを削除できます。この操作は、`cancel-image-launch-permission` AWS CLI コマンドを実行して行うことができます。このコマンドを実行すると、指定した AMI の起動許可から AWS アカウント が削除されます。お客様の AWS アカウント と共有されている AMI を見つけるには､「[Amazon EC2 インスタンスで使用する共有 AMI を検索する](usingsharedamis-finding.md)」を参照してください。

例えば、共有された未使用または廃止予定の AMI を含むインスタンスを起動する可能性を減らすために、AMI をアカウントで共有することをキャンセルする場合があります。AMI をアカウントと共有することをキャンセルすると、[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) の出力や EC2 コンソールの AMI リストには表示されなくなります。

**Topics**
+ [制限事項](#cancel-sharing-an-AMI-limitations)
+ [アカウントと AMI の共有をキャンセルする](#cancel-image-launch-permission)

## 制限事項
<a name="cancel-sharing-an-AMI-limitations"></a>
+ AWS アカウント とだけ共有されている AMI の起動許可からアカウントを削除できます。[組織または組織単位 (OU) と共有されている AMI](share-amis-with-organizations-and-OUs.md) の起動許可からアカウントを削除したり、パブリック AMI へのアクセスを削除したりすることに `cancel-image-launch-permission` を使用することはできません。
+ AMI の起動許可からアカウントを完全に削除することはできません。AMI の所有者は、お客様のアカウントと再び AMI を共有できます。
+ AMI はリージョンのリソースです。`cancel-image-launch-permission` の実行時には、AMI が配置されているリージョンを指定する必要があります。コマンドの中でリージョンを指定するか、AWS\$1DEFAULT\$1REGION [環境変数](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-envvars.html)を使用します。
+ AWS CLI および SDK のみが、AMI の起動許可からのアカウントの削除をサポートしています。EC2 コンソールは現在このアクションに対応していません。

## アカウントと AMI の共有をキャンセルする
<a name="cancel-image-launch-permission"></a>

**注記**  
お客様のアカウントと AMI の共有をキャンセルすると、元に戻すことはできません。AMI へのアクセスを回復するには、AMI 所有者がお客様のアカウントと AMI を共有する必要があります。

------
#### [ AWS CLI ]

**アカウントとの AMI の共有をキャンセルするには**  
[https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-image-launch-permission.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/cancel-image-launch-permission.html) コマンドを使用します。

```
aws ec2 cancel-image-launch-permission \
    --image-id ami-0abcdef1234567890 \
    --region us-east-1
```

------
#### [ PowerShell ]

**アカウントとの AMI の共有をキャンセルするには**  
[https://docs.aws.amazon.com/powershell/latest/reference/index.html](https://docs.aws.amazon.com/powershell/latest/reference/index.html) コマンドレットを使用します。

```
Stop-EC2ImageLaunchPermission `
    -ImageId ami-0abcdef1234567890 `
    -Region us-east-1
```

------

# 共有 Linux AMI の作成に関する推奨事項
<a name="building-shared-amis"></a>

攻撃対象領域を縮小し、作成する AMI の信頼性を向上させるためには、次のガイドラインを使用します。

**重要**  
セキュリティのガイドラインのリストは、いずれも完全ではありません。共有 AMI を注意深く作成し、機密データが漏洩される可能性について十分考慮してください。

**Topics**
+ [ルートユーザーのパスワードベースのリモートログインを無効にする](#public-amis-disable-password-logins-for-root)
+ [ローカルルートアクセスを無効にする](#restrict-root-access)
+ [SSH ホストキーペアの削除](#remove-ssh-host-key-pairs)
+ [パブリックキー認証情報のインストール](#public-amis-install-credentials)
+ [sshd DNS チェックの無効化 (任意)](#public-amis-disable-ssh-dns-lookups)
+ [機密データを削除する](#public-amis-protect-yourself)

AWS Marketplace の AMI を構築する場合は、*AWS Marketplace 販売者ガイド*の「[AMI 構築のベストプラクティス](https://docs.aws.amazon.com/marketplace/latest/userguide/best-practices-for-building-your-amis.html)」で、ガイドライン、ポリシー、ベストプラクティスをご参照ください。

## ルートユーザーのパスワードベースのリモートログインを無効にする
<a name="public-amis-disable-password-logins-for-root"></a>

パブリック AMI に固定のルートパスワードを使用することは、セキュリティの面で危険であり、すぐに知られるおそれがあります。初回ログイン後にパスワードを変更するようにユーザーに依存していますが、変更されるまでの一瞬の間にパスワードが悪用される危険性があります。

この問題を解決するには、ルートユーザーのパスワードベースのリモートログインを無効にします。

**ルートユーザーのパスワードベースのリモートログインを無効にするには**

1. テキストエディタで `/etc/ssh/sshd_config` ファイルを開き、次の行を見つけ出します:

   ```
   #PermitRootLogin yes
   ```

1. 行を次のように変更します:

   ```
   PermitRootLogin without-password
   ```

   この設定ファイルの場所は、ディストリビューションに応じて、または OpenSSH を実行していない場合は、異なることがあります。このような場合は、関連資料を参照してください。

## ローカルルートアクセスを無効にする
<a name="restrict-root-access"></a>

共有 AMI を使用する際のベストプラクティスは、直接ルートログインを無効にすることです。これを行うには、実行中のインスタンスにログインし、次のコマンドを発行します。

```
[ec2-user ~]$ sudo passwd -l root
```

**注記**  
このコマンドが `sudo` の使用に影響を及ぼすことはありません。

## SSH ホストキーペアの削除
<a name="remove-ssh-host-key-pairs"></a>

 パブリック AMI から派生した AMI を共有する場合は、`/etc/ssh` にある既存の SSH ホストキーペアを削除します。これにより、他のユーザーがお客様の AMI を使用してインスタンスを起動したときに、SSH は、新しい固有の SSH キーペアを生成するように強制されるため、セキュリティが強化され、「中間者」攻撃の可能性を減らします。

システムにある次のすべてのキーファイルを削除します。
+  ssh\$1host\$1dsa\$1key 
+  ssh\$1host\$1dsa\$1key.pub 
+  ssh\$1host\$1key 
+  ssh\$1host\$1key.pub 
+  ssh\$1host\$1rsa\$1key 
+  ssh\$1host\$1rsa\$1key.pub 
+ ssh\$1host\$1ecdsa\$1key
+ ssh\$1host\$1ecdsa\$1key.pub
+ ssh\$1host\$1ed25519\$1key
+ ssh\$1host\$1ed25519\$1key.pub

次のコマンドを使用して、これらのファイルをすべて確実に削除できます。

```
[ec2-user ~]$ sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub
```

**警告**  
**shred** などの安全な削除ユーティリティでは、ストレージメディアからファイルのすべてのコピーが削除されない場合があります。ファイルの非表示のコピーは、ジャーナルファイルシステム (Amazon Linux のデフォルト ext4 を含む)、スナップショット、バックアップ、RAID、および一時キャッシュによって作成することができます。詳細については、[shred ドキュメント](https://www.gnu.org/software/coreutils/manual/html_node/shred-invocation.html)を参照してください。

**重要**  
パブリック AMI から既存の SSH ホストキーペアを削除することを忘れた場合、ルーチン監査プロセスから、AMI のインスタンスを実行するすべての顧客に向けて、セキュリティ上のリスクがある可能性について通知されます。短い猶予期間の後に、AMI にプライベートのマークが付けられます。

## パブリックキー認証情報のインストール
<a name="public-amis-install-credentials"></a>

パスワードを使用したログインを防ぐように AMI を構成したら、ユーザーが別のメカニズムを使用してログインできるようにしておく必要があります。

ユーザーは、Amazon EC2 を使用すると、インスタンスの起動時にパブリックプライベートキーペア名を指定できます。`RunInstances` API 呼び出し (またはコマンドライン API ツール) で有効なキーペア名を指定すると、パブリックキー (`CreateKeyPair` または `ImportKeyPair` の呼び出し後に Amazon EC2 がサーバー上に保持するキーペアの一部) を、インスタンスメタデータに対する HTTP Query を介してインスタンスで使用できるようになります。

SSH を使用してログインするには、AMI が起動時にキー値を取得し、それを `/root/.ssh/authorized_keys` (または AMI 上のその他のユーザーアカウントの同等項目) に付加する必要があります。ユーザーはキーペアを使用して AMI のインスタンスを起動し、ルートパスワードを入力せずにログインできます。

Amazon Linux や Ubuntu を初めとする多くのディストリビューションでは、`cloud-init` パッケージを使用して、設定されたユーザーのパブリックキー認証情報を挿入します。`cloud-init` をサポートしていないディストリビューションの場合は、システムスタートアップスクリプト (例: `/etc/rc.local`) に次のコードを追加して、起動時にルートユーザーに対して指定したパブリックキーを取り込みます。

**注記**  
次の例では、IP アドレス http://169.254.169.254/ はリンクローカルアドレスであり、インスタンスからのみ有効です。

------
#### [ IMDSv2 ]

```
if [ ! -d /root/.ssh ] ; then
        mkdir -p /root/.ssh
        chmod 700 /root/.ssh
fi
# Fetch public key using HTTP
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/public-keys/0/openssh-key > /tmp/my-key
if [ $? -eq 0 ] ; then
        cat /tmp/my-key >> /root/.ssh/authorized_keys
        chmod 700 /root/.ssh/authorized_keys
        rm /tmp/my-key
fi
```

------
#### [ IMDSv1 ]

```
if [ ! -d /root/.ssh ] ; then
        mkdir -p /root/.ssh
        chmod 700 /root/.ssh
fi
# Fetch public key using HTTP
curl http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/my-key
if [ $? -eq 0 ] ; then
        cat /tmp/my-key >> /root/.ssh/authorized_keys
        chmod 700 /root/.ssh/authorized_keys
        rm /tmp/my-key
fi
```

------

 この設定は、あらゆるユーザーに適用できます。`root` ユーザーに限定する必要はありません。

**注記**  
この AMI に基づいたインスタンスを再バンドルすると、起動時に使用されたキーが組み込まれます。キーへの組み込みを阻止するには、`authorized_keys` ファイルの を空にする (ファイルを削除する) か、このファイルを再バンドルから除外します。

## sshd DNS チェックの無効化 (任意)
<a name="public-amis-disable-ssh-dns-lookups"></a>

sshd DNS チェックを無効にすると、sshd セキュリティが若干低下します。ただし、DNS の解決策が失敗した場合は、SSH ログインが引き続き機能します。sshd チェックを無効にしなかった場合、DNS の解決策が失敗すると、すべてのログインが阻止されます。

**sshd DNS チェックを無効にするには**

1. テキストエディタで `/etc/ssh/sshd_config` ファイルを開き、次の行を見つけ出します:

   ```
   #UseDNS yes
   ```

1. 行を次のように変更します: 

   ```
   UseDNS no
   ```

**注記**  
この設定ファイルの場所は、ディストリビューションに応じて、または OpenSSH を実行していない場合は、異なることがあります。このような場合は、関連資料を参照してください。

## 機密データを削除する
<a name="public-amis-protect-yourself"></a>

共有する AMI に、機密性のあるデータやソフトウェアは保管しないことをお勧めします。共有 AMI を起動するユーザーは、それを再バンドルしたり、自分のものとして登録したりできる可能性があります。以下のガイドラインに従って、見落としやすいセキュリティ上のリスクを回避してください: 
+ `--exclude directory` で `ec2-bundle-vol` オプションを使用して、バンドル操作に含めたくない機密情報が入っているディレクトリおよびサブディレクトリをスキップすることをお勧めします。特に、イメージをバンドルするときに、すべてのユーザー所有の SSH パブリックキー/プライベートキーペアおよび SSH `authorized_keys` ファイルを除外します。Amazon パブリック AMI で、これらのファイルは、ルートユーザーの場合は `/root/.ssh`、通常のユーザーの場合は `/home/user_name/.ssh/` に配置されています。詳細については、[ec2-bundle-vol](ami-tools-commands.md#ami-bundle-vol) を参照してください。
+ バンドルの前に必ずシェル履歴を削除してください。同じ AMI で複数のバンドルのアップロードを試行すると、シェル履歴にアクセスキーが含まれます。次の例は、インスタンス内からのバンドルの前に実行される最後のコマンドとなる必要があります。

  ```
  [ec2-user ~]$ shred -u ~/.*history
  ```
**警告**  
上記の警告で示した **shred** の制限は、ここにも適用されます。  
bash は、終了時に現在のセッション履歴をディスクに書き込むことに注意してください。`~/.bash_history` を削除後にインスタンスをログアウトし、再度ログインすると、`~/.bash_history` が再作成され、前のセッション中に実行されたすべてのコマンドが含まれています。  
bash 以外の他のプログラムもディスクに履歴を書き込むため、注意して不要な dot ファイルと dot ディレクトリを削除または除外します。
+ 実行中のインスタンスをバンドルするには、プライベートキーと X.509 証明書が必要です。これらの証明書およびその他の証明書を、バンドルされていない場所 (インスタンスストアなど) に書き込みます。