

# AMI ウォーターマークを使用して AMI を追跡および識別する
<a name="ami-watermark"></a>

AMI ウォーターマークは、プライベート AMI にアタッチして出所を追跡し、ガバナンスポリシーを適用するための識別子です。ウォーターマークは AMI ライフサイクル全体で保持されます。
+ ウォーターマーク付き AMI から起動された実行中のインスタンスから新しい AMI を作成すると、新しい AMI はウォーターマークを継承します。
+ ウォーターマーク付き AMI をコピーする場合、コピーにはウォーターマークが保持されます。
+ ウォーターマーク付き AMI を S3 に保存して復元する場合、復元された AMI はウォーターマークを保持します。
+ ウォーターマーク付き AMI を別のアカウントと共有した場合、ウォーターマークは受信者に表示されたままになります。

AMI ウォーターマークを使用すると、次のようなメリットがあります。

**主な利点**
+ アカウントとリージョン間の出所を追跡する — 承認されたベースイメージから派生する AMI を特定します。
+ アカウント全体で関連する AMI をフィルタリングして検索します。
+ AMI コンシューマーがプロジェクトまたは組織に関連付けられた信頼された AMI を検出して識別するのに役立ちます。

**Topics**
+ [AMI ウォーターマークの仕組み](#ami-watermark-how-it-works)
+ [必要なアクセス許可](#ami-watermark-permissions)
+ [AMI にウォーターマークをアタッチする](#ami-watermark-attach)
+ [AMI からウォーターマークをデタッチする](#ami-watermark-detach)
+ [AMI ウォーターマークを表示する](#ami-watermark-view)
+ [ウォーターマークで AMI をフィルタリング](#ami-watermark-filter)

## AMI ウォーターマークの仕組み
<a name="ami-watermark-how-it-works"></a>

AMI ウォーターマークは、AMI に付加する構造化された識別子です。ウォーターマークの主な特徴を以下のとおりです。
+ **永続化** — AMI にウォーターマークを添付すると、そのウォーターマークはすべての派生 AMI にも引き継がれます。
+ **所有者のみ** — AMI 所有者のみが AMI にウォーターマークをアタッチできます。
+ **誰でも表示可能** — AMI にアクセスできるユーザーは誰でもウォーターマークを表示できます。
+ **5 の制限** — AMI には最大 5 つのウォーターマークを含めることができます。
+ **パブリック AMI では使用不可能** — ウォーターマークをパブリック AMI したり、ウォーターマークがある場合は AMI を公開したりすることはできません。
+ **フィルタリング可能** — `describe-images` を使用すると、AMI ウォーターマークでフィルタリングできます。

### ウォーターマークの形式
<a name="ami-watermark-format"></a>

ウォーターマークは、次のフィールドを持つ構造化オブジェクトです。
+ `WatermarkKey` — ウォーターマークの一意の識別子は、`{{account-id}}:{{watermark-name}}` で構成されます。account ID は、REST API 所有者の 12 桁の AWS account ID です。ウォーターマークの名称部分は、お客様が指定した名前です。
+ `SourceImageRegion` — 最初にウォーターマークをアタッチした AMI のリージョン。
+ `SourceImageId` — ウォーターマークを最初にアタッチした AMI。
+ `SourceImageCreationDate` — ウォーターマークを最初にアタッチした AMI の作成日。
+ `WatermarkCreationTime` — ウォーターマークを適用したときのタイムスタンプ。

ウォーターマーク名は 3～128 文字で、英数字、括弧 (())、角括弧 ([])、スペース、ピリオド (.)、スラッシュ (/)、ダッシュ (-)、一重引用符 (')、アットマーク (@)、またはアンダースコア (\_) を含めることができます。

## 必要なアクセス許可
<a name="ami-watermark-permissions"></a>

AMI ウォーターマークを使用するには、次の IAM アクセス許可が必要です。
+ `ec2:AttachImageWatermark` — AMI にウォーターマークをアタッチします。
+ `ec2:DetachImageWatermark` — AMI からウォーターマークをデタッチします。
+ `ec2:DescribeImages` — AMI のウォーターマークを表示します。

## AMI にウォーターマークをアタッチする
<a name="ami-watermark-attach"></a>

コンソール、AWS CLI、または PowerShell を使用して、AMI にウォーターマークをアタッチできます。

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

**AMI にウォーターマークをアタッチするには**

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

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

1. AMI を選択します。

1. **詳細** タブの **ウォーターマーク** セクションで、**ウォーターマークの管理** を選択します。

1. ウォーターマーク名を入力し、**アタッチ** を選択します。

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

**AMI にウォーターマークをアタッチするには**  
[attach-image-watermark](https://docs.aws.amazon.com/cli/latest/reference/ec2/attach-image-watermark.html) コマンドを使用します。

```
aws ec2 attach-image-watermark \
    --image-id {{ami-1111111111EXAMPLE}} \
    --image-watermark-name "{{prod-baseline}}"
```

以下は出力の例です。

```
{
    "WatermarkKey": "123456789012:prod-baseline"
}
```

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

**AMI にウォーターマークをアタッチするには**  
[Add-EC2ImageWatermark](https://docs.aws.amazon.com/powershell/latest/reference/items/Add-EC2ImageWatermark.html) コマンドレットを使用します。

```
Add-EC2ImageWatermark `
    -ImageId {{ami-1111111111EXAMPLE}} `
    -ImageWatermarkName "{{prod-baseline}}"
```

------

1 つの AMI に最大 5 つのウォーターマークをアタッチできます。

## AMI からウォーターマークをデタッチする
<a name="ami-watermark-detach"></a>

コンソール、AWS CLI、または PowerShell を使用して、AMI からウォーターマークをデタッチできます。

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

**AMI からウォーターマークをデタッチするには**

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

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

1. AMI を選択します。

1. **詳細** タブの **ウォーターマーク** セクションで、**ウォーターマークの管理** を選択します。

1. 削除するウォーターマークを選択し、**削除** を選択します。

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

**AMI からウォーターマークをデタッチするには**  
[detach-image-watermark](https://docs.aws.amazon.com/cli/latest/reference/ec2/detach-image-watermark.html) コマンドを使用します。

```
aws ec2 detach-image-watermark \
    --image-id {{ami-1111111111EXAMPLE}} \
    --image-watermark-key "{{111122223333:prod-baseline}}"
```

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

**AMI からウォーターマークをデタッチするには**  
[Remove-EC2ImageWatermark](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2ImageWatermark.html) cmdlet を使用します。

```
Remove-EC2ImageWatermark `
    -ImageId {{ami-1111111111EXAMPLE}} `
    -ImageWatermarkKey "{{111122223333:prod-baseline}}"
```

------

**注記**  
AMI からウォーターマークをデタッチしても、そのウォーターマークが既に存在する派生 AMI からは削除されません。ウォーターマークが永続性を維持するには、ウォーターマークを管理する必要がある信頼できる管理者にのみ `ec2:DetachImageWatermark` のアクセス許可を付与します。

## AMI ウォーターマークを表示する
<a name="ami-watermark-view"></a>

コンソール、AWS CLI、または PowerShell を使用して、AMI のウォーターマークを表示できます。

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

**AMI のウォーターマークを表示するには**

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

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

1. AMI を選択します。

1. **詳細** タブのウォーターマークセクションで **ウォーターマーク** を表示します。

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

**AMI のウォーターマークを表示するには**  
[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html) コマンドを使用します。

```
aws ec2 describe-images \
    --image-ids {{ami-046863d776a820ccd}} \
    --region {{us-east-1}}
```

レスポンスには、各 AMI に対応する `ImageWatermarks` の 配列が含まれます。

```
{
    "Images": [
        {
            "ImageId": "ami-046863d776a820ccd",
            "Public": false,
            "OwnerId": "123456789012",
            ...
            "ImageWatermarks": [
                {
                    "WatermarkKey": "111122223333:prod-baseline",
                    "Region": "us-east-1",
                    "SourceImageId": "ami-0b752bf1df193a6c4",
                    "SourceImageCreationDate": "2024-07-10T08:15:00",
                    "CreationDate": "2024-07-12T14:30:00"
                },
                {
                    "WatermarkKey": "222222222222:security-approved",
                    "Region": "eu-north-1",
                    "SourceImageId": "ami-12345678",
                    "SourceImageCreationDate": "2024-06-01T10:00:00",
                    "CreationDate": "2024-06-05T09:45:00"
                }
            ]
        }
    ]
}
```

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

**AMI のウォーターマークを表示するには**  
[Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
(Get-EC2Image -ImageId {{ami-046863d776a820ccd}}).ImageWatermarks
```

------

## ウォーターマークで AMI をフィルタリング
<a name="ami-watermark-filter"></a>

コンソール、AWS CLI、PowerShell を使用して AMI をウォーターマークでフィルタリングできます。

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

**AMI ウォーターマークでフィルタリングするには**

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

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

1. 検索バーで、**ウォーターマークキー** フィルターを選択し、ウォーターマークキーの値を入力します。

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

**AMI ウォーターマークでフィルタリングするには**  
`image-watermark-key` フィルターで「[describe-images](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-images.html)」コマンドを使用します。

```
aws ec2 describe-images \
    --filters "Name=image-watermark-key,Values={{111122223333:prod-baseline}}"
```

これにより、コピー操作によって継承された派生 AMI など、指定されたウォーターマークを持つ にアクセスできるすべての AMI が返されます。

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

**AMI ウォーターマークでフィルタリングするには**  
`-Filter` パラメータで [Get-EC2Image](https://docs.aws.amazon.com/powershell/latest/reference/items/Get-EC2Image.html) コマンドレットを使用します。

```
Get-EC2Image `
    -Filter @{Name="image-watermark-key"; Values="{{111122223333:prod-baseline}}"}
```

これにより、コピー操作によって継承された派生 AMI など、指定されたウォーターマークを持つ にアクセスできるすべての AMI が返されます。

------