

# Amazon EC2 API へのアクセスを制御するポリシーの例
<a name="ExamplePolicies_EC2"></a>

IAM ポリシーを使用して、Amazon EC2 を操作するために必要なアクセス許可をユーザーに付与することができます。詳細な手順については「*IAM ユーザーガイド*」の「[IAM ポリシーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)」を参照してください。

以下の例ではAmazon EC2 を使用するアクセス許可をユーザーに付与するために使用できるポリシーステートメントを示しています。これらのポリシーはAWS CLI または AWS SDK を使用して行われたリクエスト向けに設計されています。次の例では*ユーザー入力プレースホルダー*をユーザー自身の情報で置き換えます。

**Topics**
+ [読み取り専用アクセス](#iam-example-read-only)
+ [特定のリージョンへのアクセスの制限](#iam-example-region)
+ [インスタンスの使用](#iam-example-instances)
+ [インスタンスの起動 (RunInstances)](#iam-example-runinstances)
+ [スポットインスタンス の操作](#iam-example-spot-instances)
+ [リザーブドインスタンス の操作](#iam-example-reservedinstances)
+ [リソースのタグ付け](#iam-example-taggingresources)
+ [IAM ロールの使用](#iam-example-iam-roles)
+ [ルートテーブルの使用](#iam-example-route-tables)
+ [特定のインスタンスが他の AWS サービスでリソースを表示できるようにする](#iam-example-source-instance)
+ [起動テンプレートの使用](#iam-example-launch-templates)
+ [インスタンスメタデータの使用](#iam-example-instance-metadata)
+ [Amazon EBS ボリュームとスナップショットの使用](#iam-example-ebs)

Amazon EC2 コンソールで機能するポリシーの例については、「[Amazon EC2 コンソールへのアクセスを制御するポリシーの例](iam-policies-ec2-console.md)」を参照してください。

## 例: 読み取り専用アクセス
<a name="iam-example-read-only"></a>

次のポリシーでは名前が `Describe` で始まるすべての Amazon EC2 API アクションを使用できるアクセス許可をユーザーに与えます。`Resource` エレメントにワイルドカードを使用します。これはユーザーが API アクションですべてのリソースを指定できることを示します。また、API アクションがリソースレベルのアクセス許可をサポートしていない場合も、\$1 ワイルドカードが必要です。どの Amazon EC2 API アクションでどの ARN を使用できるかの詳細については、「[Amazon EC2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)」を参照してください。

デフォルトで API アクションを使用するアクセス許可が拒否されているため、ユーザーには (別のステートメントでアクセス許可が与えられない限り) そのリソースに対してアクションを実行するアクセス許可がありません。

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

****  

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

------

## 例: 特定のリージョンへのアクセスの制限
<a name="iam-example-region"></a>

次のポリシーではリージョンが 欧州 (フランクフルト) でない限り、すべての Amazon EC2 API アクションを使用するアクセス許可をユーザーに拒否します。これにはグローバル条件キー `aws:RequestedRegion` が使用され、このキーはすべての Amazon EC2 API アクションでサポートされています。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
       {
      "Effect": "Deny",
      "Action": "ec2:*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:RequestedRegion": "eu-central-1"
        }
      }
    }  
  ]
}
```

------

または条件キー `ec2:Region` を使用することもできます。これはAmazon EC2 に固有のもので、すべての Amazon EC2 API アクションでサポートされています。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
       {
      "Effect": "Deny",
      "Action": "ec2:*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "ec2:Region": "eu-central-1"
        }
      }
    }  
  ]
}
```

------

## インスタンスの使用
<a name="iam-example-instances"></a>

**Topics**
+ [例: すべてのインスタンスを記述、起動、停止、開始、および終了する](#iam-example-instances-all)
+ [例: すべてのインスタンスを記述し、特定のインスタンスのみを停止、開始、および終了する](#iam-example-instances-specific)

### 例: すべてのインスタンスを記述、起動、停止、開始、および終了する
<a name="iam-example-instances-all"></a>

次のポリシーでは`Action` エレメントで指定された API アクションを使用するアクセス許可をユーザーに与えます。`Resource` エレメントでは \$1 ワイルドカードを使用して、ユーザーが API アクションですべてのリソースを指定できることを示します。また、API アクションがリソースレベルのアクセス許可をサポートしていない場合も、\$1 ワイルドカードが必要です。どの Amazon EC2 API アクションでどの ARN を使用できるかの詳細については、「[Amazon EC2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)」を参照してください。

ユーザーはデフォルトで API アクションを使用するアクセス許可を拒否されているため、ユーザーには (別のステートメントでユーザーにそのアクセス許可を与えない限り) その他の API アクションを使用するアクセス許可がありません。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeInstances", 
        "ec2:DescribeImages",
        "ec2:DescribeKeyPairs", 
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeAvailabilityZones",
        "ec2:RunInstances", 
        "ec2:TerminateInstances",
        "ec2:StopInstances", 
        "ec2:StartInstances"
      ],
      "Resource": "*"
    }
   ]
}
```

------

### 例: すべてのインスタンスを記述し、特定のインスタンスのみを停止、開始、および終了する
<a name="iam-example-instances-specific"></a>

次のポリシーでは、ユーザーは「`purpose=test`」のリソースタグを使用してすべてのインスタンスを表示し、i-1234567890abcdef0 および i-0598c7d356eba48d7 のインスタンスのみを開始および停止し、`us-east-1` リージョンでインスタンスのみを終了できるようにします。

最初のステートメントでは`Resource` エレメントに \$1 ワイルドカードを使用して、ユーザーがそのアクションにすべてのリソースを指定できることを示しています。この場合、すべてのインスタンスをリストできます。また、API アクションがリソースレベルのアクセス許可をサポートしていない場合も、\$1 ワイルドカードが必要です (この場合は`ec2:DescribeInstances`)。どの Amazon EC2 API アクションでどの ARN を使用できるかの詳細については、「[Amazon EC2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)」を参照してください。

2 番目のステートメントでは`StopInstances` および `StartInstances` アクションに対してリソースレベルのアクセス許可を使用しています。`Resource` エレメント内で、ARN によって特定のインスタンスが指定されています。

3 番目のステートメントでは、指定された AWS アカウントに属する `us-east-1` リージョン内のすべてのインスタンスを終了する許可がユーザーに与えられます。ただし、インスタンスに `"purpose=test"` タグがある場合にのみ該当します。`Condition` エレメントはポリシーステートメントの発効条件を指定します。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
   {
   "Effect": "Allow",
      "Action": "ec2:DescribeInstances",
      "Resource": "*"
   },
   {
      "Effect": "Allow",
      "Action": [
        "ec2:StopInstances", 
        "ec2:StartInstances"
      ],
      "Resource": [
        "arn:aws:ec2:us-east-1:111122223333:instance/i-1234567890abcdef0",
        "arn:aws:ec2:us-east-1:111122223333:instance/i-0598c7d356eba48d7"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "ec2:TerminateInstances",
      "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
      "Condition": {
         "StringEquals": {
            "aws:ResourceTag/purpose": "test"
         }
      }
   }

   ]
}
```

------

## インスタンスの起動 (RunInstances)
<a name="iam-example-runinstances"></a>

[RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) API アクションは1 つ以上の オンデマンドインスタンス または 1 つ以上の スポットインスタンス を起動します。`RunInstances` は AMI を必要とし、インスタンスを作成します。ユーザーはリクエストでキーペアとセキュリティグループを指定できます。VPC 内に起動するにはサブネットが必要であり、起動されるとネットワークインターフェイスが作成されます。Amazon EBS-backed AMI から起動すると、ボリュームが作成されます。そのため、ユーザーにはこれらの Amazon EC2 リソースを使用するアクセス許可が必要です。ユーザーが `RunInstances` に対してオプションのパラメータを指定する必要がある、またはユーザーからパラメータの特定の値を制限するポリシーステートメントを作成できます。

インスタンスの起動に必要なリソースレベルのアクセス許可の詳細については、「[Amazon EC2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)」を参照してください。

デフォルトでは作成したインスタンスを記述、開始、停止、または終了するアクセス許可はユーザーに付与されていません。作成したインスタンスを管理するアクセス許可をユーザーに付与する 1 つの方法としてはインスタンスごとに特定のタグを作成し、そのタグでインスタンスを管理できるようにステートメントを作成します。詳細については[インスタンスの使用](#iam-example-instances)を参照してください。

**Topics**
+ [AMI](#iam-example-runinstances-ami)
+ [インスタンスタイプ](#iam-example-runinstances-instance-type)
+ [サブネット](#iam-example-runinstances-subnet)
+ [EBS ボリューム](#iam-example-runinstances-volumes)
+ [タグ](#iam-example-runinstances-tags)
+ [起動テンプレートのタグ](#iam-example-tags-launch-template)
+ [Elastic GPU](#iam-example-runinstances-egpu)
+ [起動テンプレート](#iam-example-runinstances-launch-templates)

### AMI
<a name="iam-example-runinstances-ami"></a>

次のポリシーでは指定された AMI (`ami-9e1670f7` および `ami-45cf5c3c`) のみを使用してインスタンスを起動できます。(別のステートメントでユーザーに起動するアクセス許可が付与されない限り) ユーザーはその他の AMI を使用してインスタンスを起動することはできません。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:us-east-1::image/ami-9e1670f7",
        "arn:aws:ec2:us-east-1::image/ami-45cf5c3c",
        "arn:aws:ec2:us-east-1:111122223333:instance/*",
        "arn:aws:ec2:us-east-1:111122223333:volume/*",
        "arn:aws:ec2:us-east-1:111122223333:key-pair/*",
        "arn:aws:ec2:us-east-1:111122223333:security-group/*",
        "arn:aws:ec2:us-east-1:111122223333:subnet/*",
        "arn:aws:ec2:us-east-1:111122223333:network-interface/*"
      ]
    }
   ]
}
```

------

または次のポリシーを使用すると、ユーザーは Amazon、または特定の信頼できる検証済みのパートナーが所有するすべての AMI からインスタンスを起動できます。最初のステートメントの `Condition` エレメントは`ec2:Owner` が `amazon` であるかどうかをテストします。(別のステートメントでユーザーに起動するアクセス許可が付与されない限り) ユーザーはその他の AMI を使用してインスタンスを起動することはできません。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
         {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [ 
         "arn:aws:ec2:us-east-1::image/ami-*"
      ],
      "Condition": {
         "StringEquals": {
            "ec2:Owner": "amazon"
         }
      }
   },
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [ 
         "arn:aws:ec2:us-east-1:111122223333:instance/*",
         "arn:aws:ec2:us-east-1:111122223333:subnet/*",
         "arn:aws:ec2:us-east-1:111122223333:volume/*",
         "arn:aws:ec2:us-east-1:111122223333:network-interface/*",
         "arn:aws:ec2:us-east-1:111122223333:key-pair/*",
         "arn:aws:ec2:us-east-1:111122223333:security-group/*"
         ]
      }
   ]
}
```

------

### インスタンスタイプ
<a name="iam-example-runinstances-instance-type"></a>

次のポリシーにより、ユーザーは `t2.micro` または `t2.small` インスタンスタイプのみを使用してインスタンスを起動できます。これにより、コストを管理することができます。最初のステートメントの `Condition` エレメントは `ec2:InstanceType` が `t2.micro` または `t2.small` のどちらであるかをテストするため、ユーザーは大きなインスタンスを起動することはできません。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-1:111122223333:instance/*"
      ],
      "Condition": {
         "StringEquals": {
            "ec2:InstanceType": ["t2.micro", "t2.small"]
         }
      }
   },
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-1::image/ami-*",
         "arn:aws:ec2:us-east-1:111122223333:subnet/*",
         "arn:aws:ec2:us-east-1:111122223333:network-interface/*",
         "arn:aws:ec2:us-east-1:111122223333:volume/*",
         "arn:aws:ec2:us-east-1:111122223333:key-pair/*",
         "arn:aws:ec2:us-east-1:111122223333:security-group/*"
         ]
      }
   ]
}
```

------

また、ユーザーが `t2.micro` と `t2.small` のインスタンスタイプ以外のすべてのインスタンス起動へのアクセスを拒否するポリシーを作成することもできます。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
        { 
      "Effect": "Deny",
      "Action": "ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-1:111122223333:instance/*"
      ],
      "Condition": {
         "StringNotEquals": {
            "ec2:InstanceType": ["t2.micro", "t2.small"]
         }
      }
   },
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-1::image/ami-*",
         "arn:aws:ec2:us-east-1:111122223333:network-interface/*",
         "arn:aws:ec2:us-east-1:111122223333:instance/*",
         "arn:aws:ec2:us-east-1:111122223333:subnet/*",
         "arn:aws:ec2:us-east-1:111122223333:volume/*",
         "arn:aws:ec2:us-east-1:111122223333:key-pair/*",
         "arn:aws:ec2:us-east-1:111122223333:security-group/*"
         ]
      }
   ]
}
```

------

### サブネット
<a name="iam-example-runinstances-subnet"></a>

次のポリシーにより、ユーザーは指定したサブネット `subnet-12345678` のみを使用してインスタンスを起動できます。グループはインスタンスを他のサブネットに起動することはできません (他のステートメントがそのような許可をユーザーに与えている場合はその限りではありません)。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
    {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
        "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-12345678",
        "arn:aws:ec2:us-east-1:111122223333:network-interface/*",
        "arn:aws:ec2:us-east-1:111122223333:instance/*",
        "arn:aws:ec2:us-east-1:111122223333:volume/*",
        "arn:aws:ec2:us-east-1::image/ami-*",
        "arn:aws:ec2:us-east-1:111122223333:key-pair/*",
        "arn:aws:ec2:us-east-1:111122223333:security-group/*"
      ]
    }
   ]
}
```

------

また、ユーザーがその他のサブネットにインスタンスを起動するアクセス許可を拒否するポリシーを作成することもできます。ステートメントではサブネット `subnet-12345678` が指定されている場合以外はネットワークインターフェイスの作成を拒否することでこれを実行します。この拒否は他のサブネットへのインスタンスの起動を許可する他のすべてのポリシーよりも優先されます。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
         {
      "Effect": "Deny",
      "Action": "ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-1:111122223333:network-interface/*"
      ],
      "Condition": {
         "ArnNotEquals": {
            "ec2:Subnet": "arn:aws:ec2:us-east-1:111122223333:subnet/subnet-12345678"
         }
      }
   },
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-1::image/ami-*",
         "arn:aws:ec2:us-east-1:111122223333:network-interface/*",
         "arn:aws:ec2:us-east-1:111122223333:instance/*",
         "arn:aws:ec2:us-east-1:111122223333:subnet/*",
         "arn:aws:ec2:us-east-1:111122223333:volume/*",
         "arn:aws:ec2:us-east-1:111122223333:key-pair/*",
         "arn:aws:ec2:us-east-1:111122223333:security-group/*"
         ]
      }
   ]
}
```

------

### EBS ボリューム
<a name="iam-example-runinstances-volumes"></a>

次のポリシーではインスタンスの EBS ボリュームが暗号化されている場合のみユーザーがインスタンスを起動できます。ユーザーはルートボリュームが暗号化されるように、暗号化されたスナップショットを使用して作成された AMI からインスタンスを起動する必要があります。ユーザーが起動時にインスタンスにアタッチする追加ボリュームも暗号化されている必要があります。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
                {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*:*:volume/*"
            ],
            "Condition": {
                "Bool": {
                    "ec2:Encrypted": "true"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*::image/ami-*",
                "arn:aws:ec2:*:*:network-interface/*",
                "arn:aws:ec2:*:*:instance/*",
                "arn:aws:ec2:*:*:subnet/*",
                "arn:aws:ec2:*:*:key-pair/*",
                "arn:aws:ec2:*:*:security-group/*"
            ]
        }
    ]
}
```

------

### タグ
<a name="iam-example-runinstances-tags"></a>

**インスタンスの作成時にタグを付ける**

次のポリシーではユーザーがインスタンスを起動し、作成時にインスタンスにタグ付けすることができます。タグを適用するリソース作成アクションにはユーザーが `CreateTags` アクションを使用するアクセス権限を持っていることが必要です。2 番目のステートメントは`ec2:CreateAction` 条件キーを使用し、ユーザーが `RunInstances` のコンテキストでのみ、インスタンスに対してのみタグを作成できるようにします。ユーザーは既存のリソースにタグ付けすることができず、`RunInstances` リクエストを使用してボリュームにタグ付けすることもできません。

詳細については[Amazon EC2 リソース作成時にタグ付けするアクセス許可の付与](supported-iam-actions-tagging.md)を参照してください。

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

****  

```
{
  "Version":"2012-10-17",		 	 	  
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:RunInstances"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
      "Condition": {
         "StringEquals": {
             "ec2:CreateAction" : "RunInstances"
          }
       }
    }
  ]
}
```

------

**インスタンスやボリュームの作成時に特定のタグを付ける**

次のポリシーには`aws:RequestTag` および `RunInstances` タグを使用して `environment=production` により作成されたすべてのインスタンスおよびボリュームへのタグ付けをユーザーに求める `purpose=webserver` 条件キーが含まれています。ユーザーがこれらのタグを渡さないか、タグをまったく指定しない場合、リクエストは失敗します。

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

****  

```
{
  "Version":"2012-10-17",		 	 	  
  "Statement": [
   {
      "Effect": "Allow",
      "Action": [
         "ec2:RunInstances"
      ],
      "Resource": [
         "arn:aws:ec2:us-east-1::image/*",
         "arn:aws:ec2:us-east-1:111122223333:subnet/*",
         "arn:aws:ec2:us-east-1:111122223333:network-interface/*",
         "arn:aws:ec2:us-east-1:111122223333:security-group/*",
         "arn:aws:ec2:us-east-1:111122223333:key-pair/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:RunInstances"
      ],
      "Resource": [
          "arn:aws:ec2:us-east-1:111122223333:volume/*",
          "arn:aws:ec2:us-east-1:111122223333:instance/*"
      ],
      "Condition": {
         "StringEquals": {
             "aws:RequestTag/environment": "production" ,
             "aws:RequestTag/purpose": "webserver"
          }
       }
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
         "StringEquals": {
             "ec2:CreateAction" : "RunInstances"
          }
       }
    }
  ]
}
```

------

**インスタンスやボリュームの作成時に特定のタグを少なくとも 1 つ付ける**

次のポリシーは`ForAnyValue` 条件で `aws:TagKeys` 修飾子を使用して、リクエストで少なくとも 1 つのタグが指定されている必要があり、キー `environment` または `webserver` が含まれている必要があることを示します。タグはインスタンスとボリュームの両方に適用される必要があります。リクエストでは任意のタグ値を指定できます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	  
  "Statement": [
   {
      "Effect": "Allow",
      "Action": [
         "ec2:RunInstances"
      ],
      "Resource": [
         "arn:aws:ec2:us-east-1::image/*",
         "arn:aws:ec2:us-east-1:111122223333:subnet/*",
         "arn:aws:ec2:us-east-1:111122223333:network-interface/*",
         "arn:aws:ec2:us-east-1:111122223333:security-group/*",
         "arn:aws:ec2:us-east-1:111122223333:key-pair/*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
          "ec2:RunInstances"
      ],
      "Resource": [
          "arn:aws:ec2:us-east-1:111122223333:volume/*",
          "arn:aws:ec2:us-east-1:111122223333:instance/*"
      ],
      "Condition": {
          "ForAnyValue:StringEquals": {
              "aws:TagKeys": ["environment","webserver"]
          }
       }
    },
    {
      "Effect": "Allow",
      "Action": [
          "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
          "StringEquals": {
              "ec2:CreateAction" : "RunInstances"
          }
       }
    }
  ]
}
```

------

**インスタンスの作成時にタグを付ける場合は特定のタグを使用してタグ付けする必要がある**

次のポリシーではユーザーはリクエストでタグを指定する必要はありませんが、指定する場合は `purpose=test` タグを指定する必要があります。他のタグは許可されません。ユーザーは`RunInstances` リクエストでタグ付け可能なリソースにタグを適用できます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	  
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
         "ec2:RunInstances"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
         "StringEquals": {
             "aws:RequestTag/purpose": "test",
             "ec2:CreateAction" : "RunInstances"
          },
          "ForAllValues:StringEquals": {
              "aws:TagKeys": "purpose"
          }
       }
    }
  ]
}
```

------

RunInstances の呼び出しで作成時のタグ付けをユーザーを禁止するには



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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRun",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1::image/*",
                "arn:aws:ec2:us-east-1:*:subnet/*",
                "arn:aws:ec2:us-east-1:*:network-interface/*",
                "arn:aws:ec2:us-east-1:*:security-group/*",
                "arn:aws:ec2:us-east-1:*:key-pair/*",
                "arn:aws:ec2:us-east-1:*:volume/*",
                "arn:aws:ec2:us-east-1:*:instance/*",
                "arn:aws:ec2:us-east-1:*:spot-instances-request/*"
            ]
        },
        {
            "Effect": "Deny",
            "Action": "ec2:CreateTags",
            "Resource": "*"
        }
    ]
}
```

------

spot-instances-request の特定のタグのみを許可します。ここで矛盾数 2 が意外な効果を発揮します。通常の状況ではタグを指定しないと非認証になります。spot-instances-request の場合、spot-instances-request タグがないと、このポリシーは評価されないため、タグなしの Spot on Run リクエストが成功します。

### 起動テンプレートのタグ
<a name="iam-example-tags-launch-template"></a>

次の例で、ユーザーはインスタンスを起動できますが、特定の起動テンプレートを使用する場合に限ります (`lt-09477bcd97b0d310e`)。`ec2:IsLaunchTemplateResource` 条件キーはユーザーが起動テンプレートで指定されたリソースを上書きしないようにします。ステートメントの 2 番目の部分ではユーザーは作成時にインスタンスにタグ付けできます — ステートメントのこの部分は起動テンプレートでタグがインスタンスに対して指定されている場合に必要になります。

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

****  

```
{
  "Version":"2012-10-17",		 	 	  
  "Statement": [
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "*",
      "Condition": {
         "ArnLike": {
             "ec2:LaunchTemplate": "arn:aws:ec2:us-east-1:111122223333:launch-template/lt-09477bcd97b0d310e" 
          },
          "Bool": {
             "ec2:IsLaunchTemplateResource": "true"
          }
       }
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:CreateTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
      "Condition": {
         "StringEquals": {
             "ec2:CreateAction" : "RunInstances"
          }
       }
    }
  ]
}
```

------

### Elastic GPU
<a name="iam-example-runinstances-egpu"></a>

次のポリシーではユーザーはインスタンスを起動させ、インスタンスにアタッチする Elastic GPU を指定できます。ユーザーは任意のリージョンでインスタンスを起動できますが、Elastic GPU をアタッチできるのはその `us-east-2` リージョンでの起動中に限られます。

`ec2:ElasticGpuType`条件キーは`eg1.medium``eg1.large`インスタンスがまたはエラスティック GPU タイプのいずれかを使用することを保証します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
             {
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:*:111122223333:elastic-gpu/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:Region": "us-east-2",
                    "ec2:ElasticGpuType": [
                        "eg1.medium",
                        "eg1.large"
                    ]
                }  
            }
        },
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*::image/ami-*",
                "arn:aws:ec2:*:111122223333:network-interface/*",
                "arn:aws:ec2:*:111122223333:instance/*",
                "arn:aws:ec2:*:111122223333:subnet/*",
                "arn:aws:ec2:*:111122223333:volume/*",
                "arn:aws:ec2:*:111122223333:key-pair/*",
                "arn:aws:ec2:*:111122223333:security-group/*"
            ]
        }
    ]
}
```

------

### 起動テンプレート
<a name="iam-example-runinstances-launch-templates"></a>

次の例で、ユーザーはインスタンスを起動できますが、特定の起動テンプレートを使用する場合に限ります (`lt-09477bcd97b0d310e`)。ユーザーは`RunInstances` アクションでパラメータを指定することで、起動テンプレートのパラメータを上書きできます。

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

****  

```
{
  "Version":"2012-10-17",		 	 	  
  "Statement": [
         {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "*",
      "Condition": {
         "ArnLike": {
             "ec2:LaunchTemplate": "arn:aws:ec2:us-east-1:111122223333:launch-template/lt-09477bcd97b0d310e" 
          }
       }
    }
  ]
}
```

------

この例で、ユーザーは起動テンプレートを使用する場合に限りインスタンスを起動できます。ポリシーでは `ec2:IsLaunchTemplateResource` 条件キーを使用して、ユーザーが起動テンプレート内の既存の ARN を上書きできないようにします。

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

****  

```
{
  "Version":"2012-10-17",		 	 	  
  "Statement": [
         {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "*",
      "Condition": {
         "ArnLike": {
             "ec2:LaunchTemplate": "arn:aws:ec2:us-east-1:111122223333:launch-template/*" 
          },
          "Bool": {
             "ec2:IsLaunchTemplateResource": "true"
          }
       }
    }
  ]
}
```

------

次のサンプルポリシーによりユーザーはインスタンスを起動できますが、起動テンプレートを使用する場合に限ります。ユーザーはリクエストでサブネットおよびネットワークインターフェイスのパラメータを上書きすることはできません。これらのパラメータは起動テンプレートでのみ指定できます。ステートメントの最初の部分は[NotResource](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notresource.html) 要素を使用して、サブネットやネットワークインターフェイスを除くその他のすべてのリソースを許可します。ステートメントの 2 番目の部分はサブネットおよびネットワークインターフェイスのリソースを許可しますが、これは起動テンプレートから取得された場合に限ります。

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

****  

```
{
  "Version":"2012-10-17",		 	 	  
  "Statement": [
        {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "NotResource": ["arn:aws:ec2:us-east-1:111122223333:subnet/*",
                      "arn:aws:ec2:us-east-1:111122223333:network-interface/*" ],
      "Condition": {
         "ArnLike": {
             "ec2:LaunchTemplate": "arn:aws:ec2:us-east-1:111122223333:launch-template/*" 
          }
       }
    },
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": ["arn:aws:ec2:us-east-1:111122223333:subnet/*",
                   "arn:aws:ec2:us-east-1:111122223333:network-interface/*" ],
      "Condition": {
         "ArnLike": {
             "ec2:LaunchTemplate": "arn:aws:ec2:us-east-1:111122223333:launch-template/*" 
          },
          "Bool": {
             "ec2:IsLaunchTemplateResource": "true"
          }
       }
    }
  ]
}
```

------

次の例では起動テンプレートを使用していて、また起動テンプレートにタグがある場合に限り、ユーザーはインスタンスを起動できるようになります `Purpose=Webservers`。ユーザーは`RunInstances` アクションで起動テンプレートパラメータを上書きすることはできません。

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

****  

```
{
  "Version":"2012-10-17",		 	 	  
  "Statement": [
        {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "NotResource": "arn:aws:ec2:us-east-1:111122223333:launch-template/*",
      "Condition": {
         "ArnLike": {
             "ec2:LaunchTemplate": "arn:aws:ec2:us-east-1:111122223333:launch-template/*" 
          },
         "Bool": {
             "ec2:IsLaunchTemplateResource": "true"
          }
       }
    },
    {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": "arn:aws:ec2:us-east-1:111122223333:launch-template/*",
      "Condition": {
       "StringEquals": {
           "aws:ResourceTag/Purpose": "Webservers" 
        }
       }
     }
  ]
}
```

------

## スポットインスタンス の操作
<a name="iam-example-spot-instances"></a>

RunInstances アクションを使用してスポットインスタンスリクエストを作成し、作成時にスポットインスタンスリクエストにタグ付けできます。RunInstances に指定するリソースは `spot-instances-request` です。

`spot-instances-request` リソースはIAM ポリシーで次のように評価されます。
+ スポットインスタンスリクエストの作成時にタグを付けない場合、Amazon EC2 は RunInstances ステートメント内の `spot-instances-request` リソースを評価しません。
+ スポットインスタンスリクエストの作成時にタグを付けると、 RunInstances ステートメント内の `spot-instances-request` リソースが、Amazon EC2 により評価されます。

したがって、`spot-instances-request` リソースの場合、次のルールが IAM ポリシーに適用されます。
+ RunInstances を使用してスポットインスタンスリクエストを作成し、その際リクエストにタグを付けない場合は`spot-instances-request` リソースを明示的に許可しなくても、その呼び出しは成功します。
+ RunInstances を使用してスポットインスタンスリクエストを作成する際に、そのリクエストにタグを付ける場合にはRunInstances の許可ステートメントに `spot-instances-request` リソースを含める必要があります。これがない場合は呼び出しが失敗します。
+ RunInstances を使用してスポットインスタンスリクエストを作成し、作成時にタグを付ける場合はCreateTags 許可ステートメントに `spot-instances-request` リソースまたは `*` ワイルドカードを指定する必要があります。指定しないと、呼び出しは失敗します。

スポットインスタンス はRunInstances または RequestSpotInstances を使用してリクエストできます。次の例の IAM ポリシーはRunInstances を使用して スポットインスタンス をリクエストする場合にのみ適用されます。

**例: RunInstances を使用して スポットインスタンス をリクエストする**

次のポリシーではRunInstances アクションを使用して スポットインスタンス をリクエストすることをユーザーに許可します。`spot-instances-request` リソースはRunInstances によって作成されます。このリソースは スポットインスタンス をリクエストします。

**注記**  
RunInstances を使用してスポットインスタンスリクエストを作成し、作成時にタグを付けない場合は`spot-instances-request` リストから `Resource` を省略できます。これはスポットインスタンスリクエストの作成時にタグを付けない場合、Amazon EC2 は RunInstances ステートメント内の `spot-instances-request` リソースを評価しないためです。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRun",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1::image/*",
                "arn:aws:ec2:us-east-1:*:subnet/*",
                "arn:aws:ec2:us-east-1:*:network-interface/*",
                "arn:aws:ec2:us-east-1:*:security-group/*",
                "arn:aws:ec2:us-east-1:*:key-pair/*",
                "arn:aws:ec2:us-east-1:*:volume/*",
                "arn:aws:ec2:us-east-1:*:instance/*",
                "arn:aws:ec2:us-east-1:*:spot-instances-request/*"
            ]
        }
    ]
}
```

------

**警告**  
**サポート対象外 – 例: RunInstances を使用して スポットインスタンス をリクエストするためのアクセス許可をユーザーに拒否する**  
次のポリシーは`spot-instances-request`リソースではサポートされません。  
次のポリシーではユーザーに オンデマンドインスタンス を起動するためのアクセス許可を付与しますが、スポットインスタンス をリクエストするためのアクセス許可を拒否します。`spot-instances-request` リソースはRunInstances によって作成されます。このリソースは スポットインスタンス をリクエストします。2 番目のステートメントでは`spot-instances-request` リソースに対する RunInstances アクションを拒否します。ただし、スポットインスタンスリクエストの作成時にタグを付けない場合、Amazon EC2 が RunInstances ステートメントの `spot-instances-request` リソースを評価しないため、この条件はサポートされません。  

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRun",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1::image/*",
                "arn:aws:ec2:us-east-1:*:subnet/*",
                "arn:aws:ec2:us-east-1:*:network-interface/*",
                "arn:aws:ec2:us-east-1:*:security-group/*",
                "arn:aws:ec2:us-east-1:*:key-pair/*",
                "arn:aws:ec2:us-east-1:*:volume/*",
                "arn:aws:ec2:us-east-1:*:instance/*"
            ]
        },
        {
            "Sid": "DenySpotInstancesRequestsNOTSUPPORTEDDONOTUSE",
            "Effect": "Deny",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*"
        }
    ]
}
```

**例: スポットインスタンスリクエストの作成時にタグを付ける**

次のポリシーではインスタンスの起動時に作成されるすべてのリソースにタグを付けることをユーザーに許可します。最初のステートメントでは一覧表示されたリソースの作成を RunInstances に許可します。`spot-instances-request` リソースはRunInstances によって作成されます。このリソースは スポットインスタンス をリクエストします。2 番目のステートメントでは`*` ワイルドカードを指定し、インスタンスの起動時に作成されるすべてのリソースのタグ付けを許可します。

**注記**  
スポットインスタンスリクエストの作成時にタグを付けると、 RunInstances ステートメント内の `spot-instances-request` リソースが、Amazon EC2 により評価されます。したがって、RunInstances アクションで `spot-instances-request` リソースを明示的に許可する必要があります。許可しないと、呼び出しは失敗します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRun",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1::image/*",
                "arn:aws:ec2:us-east-1:*:subnet/*",
                "arn:aws:ec2:us-east-1:*:network-interface/*",
                "arn:aws:ec2:us-east-1:*:security-group/*",
                "arn:aws:ec2:us-east-1:*:key-pair/*",
                "arn:aws:ec2:us-east-1:*:volume/*",
                "arn:aws:ec2:us-east-1:*:instance/*",
                "arn:aws:ec2:us-east-1:*:spot-instances-request/*"
            ]
        },
        {
            "Sid": "TagResources",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*"
        }
    ]
}
```

------

**例: スポットインスタンスリクエストの作成時にタグ付けを拒否する**

次のポリシーではインスタンスの起動時に作成されるリソースにタグを付けるためのアクセス許可をユーザーに拒否します。

最初のステートメントでは一覧表示されたリソースの作成を RunInstances に許可します。`spot-instances-request` リソースはRunInstances によって作成されます。このリソースは スポットインスタンス をリクエストします。2 番目のステートメントでは`*` ワイルドカードを指定し、インスタンスの起動時に作成されるすべてのリソースのタグ付けを拒否します。`spot-instances-request` リソースまたは他のリソースの作成時にタグを付けた場合、RunInstances の呼び出しは失敗します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRun",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1::image/*",
                "arn:aws:ec2:us-east-1:*:subnet/*",
                "arn:aws:ec2:us-east-1:*:network-interface/*",
                "arn:aws:ec2:us-east-1:*:security-group/*",
                "arn:aws:ec2:us-east-1:*:key-pair/*",
                "arn:aws:ec2:us-east-1:*:volume/*",
                "arn:aws:ec2:us-east-1:*:instance/*",
                "arn:aws:ec2:us-east-1:*:spot-instances-request/*"
            ]
        },
        {
            "Sid": "DenyTagResources",
            "Effect": "Deny",
            "Action": "ec2:CreateTags",
            "Resource": "*"
        }
    ]
}
```

------

**警告**  
**サポート対象外 - 例: スポットインスタンスリクエストに特定のタグを割り当てる場合にのみ、リクエストの作成を許可する**  
次のポリシーは`spot-instances-request` リソースではサポートされません。  
次のポリシーはスポットインスタンスリクエストに特定のタグを付ける場合にのみ、リクエストを作成するためのアクセス許可を RunInstances に付与することを想定しています。  
最初のステートメントでは一覧表示されたリソースの作成を RunInstances に許可します。  
2 番目のステートメントではスポットインスタンスリクエストにタグ `environment=production` が付いている場合にのみ、リクエストを作成するためのアクセス許可をユーザーに付与することを想定しています。この条件を RunInstances によって作成された他のリソースに適用する場合、タグを指定しないと、`Unauthenticated` エラーが発生します。ただし、スポットインスタンスリクエストにタグを指定しない場合、Amazon EC2 は RunInstances ステートメントの `spot-instances-request` リソースを評価しないため、RunInstances がタグなしのスポットインスタンスリクエストを作成します。  
`environment=production` 以外の別のタグを指定すると、`Unauthenticated` エラーが発生することに注意してください。これはユーザーがスポットインスタンスリクエストにタグを付けると、Amazon EC2 が RunInstances ステートメントの `spot-instances-request` リソースを評価するためです。  

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRun",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1::image/*",
                "arn:aws:ec2:us-east-1:*:subnet/*",
                "arn:aws:ec2:us-east-1:*:network-interface/*",
                "arn:aws:ec2:us-east-1:*:security-group/*",
                "arn:aws:ec2:us-east-1:*:key-pair/*",
                "arn:aws:ec2:us-east-1:*:volume/*",
                "arn:aws:ec2:us-east-1:*:instance/*"
            ]
        },
        {
            "Sid": "RequestSpotInstancesOnlyIfTagIsEnvironmentProductionNOTSUPPORTEDDONOTUSE",
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/environment": "production"
                }
            }
        },
        {
            "Sid": "TagResources",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*"
        }

    ]
}
```

**例: スポットインスタンスリクエストに特定のタグが割り当てられている場合、このリクエストの作成を拒否する**

次のポリシーはスポットインスタンスリクエストにタグ `environment=production` が付いている場合、このリクエストを作成するためのアクセス許可を RunInstances に拒否します。

最初のステートメントでは一覧表示されたリソースの作成を RunInstances に許可します。

2 番目のステートメントではスポットインスタンスリクエストにタグ `environment=production` が付いている場合、このリクエストを作成するためのアクセス許可をユーザーに拒否します。`environment=production` をタグとして指定すると、`Unauthenticated` エラーが発生します。他のタグを指定するか、タグを指定しないと、スポットインスタンスリクエストが作成されます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowRun",
            "Effect": "Allow",
            "Action": [
                "ec2:RunInstances"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1::image/*",
                "arn:aws:ec2:us-east-1:*:subnet/*",
                "arn:aws:ec2:us-east-1:*:network-interface/*",
                "arn:aws:ec2:us-east-1:*:security-group/*",
                "arn:aws:ec2:us-east-1:*:key-pair/*",
                "arn:aws:ec2:us-east-1:*:volume/*",
                "arn:aws:ec2:us-east-1:*:instance/*",
                "arn:aws:ec2:us-east-1:*:spot-instances-request/*"
            ]
        },
        {
            "Sid": "DenySpotInstancesRequests",
            "Effect": "Deny",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:us-east-1:*:spot-instances-request/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/environment": "production"
                }
            }
        },
        {
            "Sid": "TagResources",
            "Effect": "Allow",
            "Action": "ec2:CreateTags",
            "Resource": "*"
        }
    ]
}
```

------

## 例: リザーブドインスタンス の操作
<a name="iam-example-reservedinstances"></a>

次のポリシーではアカウントで リザーブドインスタンス を表示、変更、購入するアクセス許可をユーザーに与えます。

個別の リザーブドインスタンス にリソースレベルのアクセス許可を設定することはできません。このポリシーはユーザーがアカウントのすべての リザーブドインスタンス にアクセスできることを意味します。

`Resource` 要素は \$1 ワイルドカードを使用して、ユーザーがそのアクションにすべてのリソースを指定できることを示しています。この場合、アカウントのすべての リザーブドインスタンス をリストして変更できます。ユーザーはアカウント認証情報を使用して リザーブドインスタンス を購入することもできます。また、API アクションがリソースレベルのアクセス許可をサポートしていない場合も、\$1 ワイルドカードが必要です。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeReservedInstances", 
        "ec2:ModifyReservedInstances",
        "ec2:PurchaseReservedInstancesOffering", 
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeReservedInstancesOfferings"
      ],
      "Resource": "*"
    }
   ]
}
```

------

次のコードではアカウント内の リザーブドインスタンス を表示および変更できるようにユーザーに許可しています。新しい リザーブドインスタンス の購入は許可していません。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
   "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeReservedInstances", 
        "ec2:ModifyReservedInstances",
        "ec2:DescribeAvailabilityZones"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## 例: リソースのタグ付け
<a name="iam-example-taggingresources"></a>

次のポリシーではタグにキー `CreateTags` および値 `environment` が含まれている場合のみ、ユーザーが `production` アクションを使用してインスタンスにタグを適用できます。他のタグは許可されず、ユーザーは他のリソースタイプをタグ付けすることはできません。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
              {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/environment": "production"
                }
            }
        }
    ]
}
```

------

次のポリシーではユーザーは `owner` のキーとユーザー名の値を使用したタグが既に適用されているタグ付け可能なリソースにタグ付けできます。加えて、ユーザーはリクエストで `anycompany:environment-type` のキーと値 `test` または `prod` を持つタグを指定する必要があります。ユーザーはリクエストで追加のタグを指定できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
               {
            "Effect": "Allow",
            "Action": [
                "ec2:CreateTags"
            ],
            "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
            "Condition": {
                "StringEquals": {
                    "aws:RequestTag/anycompany:environment-type": ["test","prod"],
                    "aws:ResourceTag/owner": "${aws:username}"
                } 
            }
        }
    ]
}
```

------

ユーザーがリソースの特定のタグを指定できるようにする IAM ポリシーを作成できます。例えば、次のポリシーではリクエストで指定されたタグキーが `environment` または `cost-center` の場合、ユーザーがボリュームのタグを削除できます。タグにはどの値でも指定できますが、指定されたキーのいずれかにタグキーが一致する必要があります。

**注記**  
リソースを削除すると、リソースに関連付けられているすべてのタグも削除されます。タグ付きのリソースを削除する場合、ユーザーは `ec2:DeleteTags` アクションを使用するためのアクセス許可は必要ありません。削除アクションを実行するためのアクセス許可のみが必要です。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
       {
      "Effect": "Allow",
      "Action": "ec2:DeleteTags",
      "Resource": "arn:aws:ec2:us-east-1:111122223333:volume/*",
      "Condition": {
        "ForAllValues:StringEquals": {
          "aws:TagKeys": ["environment","cost-center"]
        }
      }
    }
  ]
}
```

------

このポリシーではリソースが `owner` のキーとユーザー名の値で既にタグ付けされている場合のみ、ユーザーが任意のリソースで `environment=prod` タグのみ削除できます。ユーザーはリソースの他のタグを削除することはできません。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
      {
      "Effect": "Allow",
      "Action": [
        "ec2:DeleteTags"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:*/*",
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/environment": "prod",
          "aws:ResourceTag/owner": "${aws:username}"
        },
        "ForAllValues:StringEquals": {
          "aws:TagKeys": ["environment"]
        }
      }
    }
  ]
}
```

------

## 例: IAM ロールの使用
<a name="iam-example-iam-roles"></a>

次のポリシーでは`department=test` タグを持つインスタンス対して IAM ロールのアタッチ、置換、デタッチを行うことをユーザーに許可します。IAM ロールの置換またはデタッチには関連 ID が必要であるため、ポリシーでは `ec2:DescribeIamInstanceProfileAssociations` アクションを使用するアクセス許可もユーザーに付与します。

ユーザーはロールをインスタンスに渡すために `iam:PassRole` アクションを使用するための許可が必要です。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:AssociateIamInstanceProfile",
        "ec2:ReplaceIamInstanceProfileAssociation",
        "ec2:DisassociateIamInstanceProfile"
      ],
      "Resource": "arn:aws:ec2:us-east-1:111122223333:instance/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/department":"test"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": "ec2:DescribeIamInstanceProfileAssociations",
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:PassRole",
      "Resource": "arn:aws:iam::111122223333:role/DevTeam*"
    }
  ]
}
```

------

次のポリシーではどのインスタンスに対しても IAM ロールのアタッチまたは置換を行うことをユーザーに許可します。ユーザーは`TestRole-` で始まる名前の IAM ロールのみアタッチまたは置換できます。`iam:PassRole` アクションではインスタンスプロファイルではなく IAM ロールの名前を指定します (両方の名前が異なる場合)。詳細については[インスタンスプロファイル](iam-roles-for-amazon-ec2.md#ec2-instance-profile)を参照してください。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:AssociateIamInstanceProfile",
                "ec2:ReplaceIamInstanceProfileAssociation"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeIamInstanceProfileAssociations",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/TestRole-*"
        }
    ]
}
```

------

## 例: ルートテーブルの使用
<a name="iam-example-route-tables"></a>

次のポリシーではVPC (`vpc-ec43eb89`) のみに関連付けられているルートテーブルのルートの追加、削除、置換を行うことができます。`ec2:Vpc` 条件キーの VPC を指定するにはVPC の完全な ARN を指定する必要があります。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
              {
            "Effect": "Allow",
            "Action": [
                "ec2:DeleteRoute",
                "ec2:CreateRoute",
                "ec2:ReplaceRoute"
            ],
            "Resource": [
                "arn:aws:ec2:us-east-1:111122223333:route-table/*"
            ],
            "Condition": {
                "StringEquals": {
                    "ec2:Vpc": "arn:aws:ec2:us-east-1:111122223333:vpc/vpc-ec43eb89"
                }
            }
        }
    ]
}
```

------

## 例: 特定のインスタンスが他の AWS サービスでリソースを表示できるようにする
<a name="iam-example-source-instance"></a>

次に示すのはIAM ロールにアタッチできるポリシーの例です。ポリシーにより、インスタンスは AWS サービスのさまざまなリソースを表示できるようになります。このポリシーではグローバル条件キー `ec2:SourceInstanceARN` を使用して、リクエスト元のインスタンスがインスタンス `i-093452212644b0dd6` である必要があることを指定します。同じ IAM ロールが別のインスタンスと関連付けられている場合、他のインスタンスはこれらのどのアクションも実行できません。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
              {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeVolumes",
                "s3:ListAllMyBuckets",
                "dynamodb:ListTables",
                "rds:DescribeDBInstances"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "ArnEquals": {
                    "ec2:SourceInstanceARN": "arn:aws:ec2:us-east-1:111122223333:instance/i-093452212644b0dd6"
                }
            }
        }
    ]
}
```

------

## 例: 起動テンプレートの使用
<a name="iam-example-launch-templates"></a>

次のポリシーではユーザーは起動テンプレートのバージョンを作成して起動テンプレートを変更することができます。ただし、特定の起動テンプレートに限られます (`lt-09477bcd97b0d3abc`)。ユーザーは他の起動テンプレートを使用することはできません。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
   {
      "Action": [
        "ec2:CreateLaunchTemplateVersion",
        "ec2:ModifyLaunchTemplate"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:ec2:us-east-1:111122223333:launch-template/lt-09477bcd97b0d3abc"
    }
  ]
}
```

------

次のポリシーではユーザーは任意の起動テンプレートと起動テンプレートのバージョンを削除できます。ただし、起動テンプレートに `Purpose`=`Testing` のタグがある場合に限ります。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
       {
      "Action": [
        "ec2:DeleteLaunchTemplate",
        "ec2:DeleteLaunchTemplateVersions"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:ec2:us-east-1:111122223333:launch-template/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/Purpose": "Testing"
        }
      }
    }
  ]
}
```

------

## インスタンスメタデータの使用
<a name="iam-example-instance-metadata"></a>

以下のポリシーではインスタンスメタデータサービスバージョン 2 (IMDSv2) を使用して、ユーザーが[インスタンスメタデータ](ec2-instance-metadata.md)のみを取得できるようにします。以下の 4 つのポリシーは4 つのステートメントを使用する 1 つのポリシーに結合できます。1 つのポリシーとして結合すると、このポリシーをサービスコントロールポリシー (SCP) として使用できます。これは既存の IAM ポリシーに適用する*拒否*ポリシーとして (既存のアクセス許可を削除して制限するために) 使用したり、アカウント、組織単位 (OU)、組織全体にグローバルに適用する SCP として使用したりすることもできます。

**注記**  
以下の RunInstances メタデータオプションポリシーはRunInstances を使用してインスタンスを起動するアクセス許可をプリンシパルに付与するポリシーと組み合わせて使用する必要があります。プリンシパルに RunInstances アクセス許可もない場合、インスタンスを起動することはできません。詳細については[インスタンスの使用](#iam-example-instances)と[インスタンスの起動 (RunInstances)](#iam-example-runinstances)のポリシーを参照してください。

**重要**  
Auto Scaling グループを使用し、すべての新しいインスタンスで IMDSv2 の使用を要求する必要がある場合は、Auto Scaling グループで*起動テンプレート*を使用する必要があります。  
Auto Scaling グループが起動テンプレートを使用する場合、新しい Auto Scaling グループが作成されるときに IAM プリンシパルの `ec2:RunInstances` アクセス許可がチェックされます。また、既存の Auto Scaling グループが更新され、新しい起動テンプレートまたは新しいバージョンの起動テンプレートが使用される場合にもチェックされます。  
`RunInstances` の IAM プリンシパルでの IMDSv1 の使用に関する制限は起動テンプレートを使用している Auto Scaling グループが作成または更新された場合にのみチェックされます。`Latest` または `Default` 起動テンプレートを使用するように設定された Auto Scaling グループでは起動テンプレートの新しいバージョンが作成されたときにアクセス許可はチェックされません。アクセス許可をチェックするには*特定のバージョン*の起動テンプレートを使用するように Auto Scaling グループを設定する必要があります。  
作成された新しいプリンシパルのサービスコントロールポリシー (SCP) または IAM アクセス許可の境界を使用して、組織内のすべてのアカウントの起動設定の使用を無効にします。Auto Scaling グループアクセス許可を持つ既存の IAM プリンシパルの場合、関連するポリシーをこの条件キーで更新します。起動設定の使用を無効にするには値が `"autoscaling:LaunchConfigurationName"` として指定された `null` 条件キーを使用して、関連する SCP、アクセス許可の境界、または IAM ポリシーを作成または変更します。
新しい起動テンプレートの場合は起動テンプレートでインスタンスメタデータオプションを設定します。既存の起動テンプレートの場合は新しいバージョンの起動テンプレートを作成し、新しいバージョンでインスタンスメタデータオプションを設定します。
起動テンプレートを使用するアクセス許可を任意のプリンシパルに付与するポリシーで、`$latest` を指定して `$default` と `"autoscaling:LaunchTemplateVersionSpecified": "true"` の関連付けを制限します。使用を特定のバージョンの起動テンプレートに制限することで、インスタンスメタデータオプションが設定されているバージョンを使用して新しいインスタンスを確実に起動できます。詳細については*Amazon EC2 Auto Scaling API リファレンス* (具体的には `Version` パラメータ) の「[LaunchTemplateSpecification](https://docs.aws.amazon.com/autoscaling/ec2/APIReference/API_LaunchTemplateSpecification.html)」を参照してください。
起動設定を使用する Auto Scaling グループの場合、起動設定を起動テンプレートに置き換えます。詳細については「*Amazon EC2 Auto Scaling ユーザーガイド*」の「[Create a launch template for an Auto Scaling group](https://docs.aws.amazon.com/autoscaling/ec2/userguide/migrate-to-launch-templates.html)」を参照してください。
起動テンプレートを使用する Auto Scaling グループの場合、インスタンスメタデータオプションが設定された新しい起動テンプレートを使用するか、インスタンスメタデータオプションが設定された現在の起動テンプレートの新しいバージョンを使用します。詳細については、「[update-auto-scaling-group](https://docs.aws.amazon.com/cli/latest/reference/autoscaling/update-auto-scaling-group.html)」を参照してください。

**Topics**
+ [IMDSv2 の使用を要求する](#iam-example-instance-metadata-requireIMDSv2)
+ [IMDSv2 のオプトアウトを拒否する](#iam-example-instance-metadata-denyoptoutIMDSv2)
+ [ホップ制限の最大値の指定](#iam-example-instance-metadata-maxHopLimit)
+ [インスタンスメタデータオプションを変更できるユーザーの制限](#iam-example-instance-metadata-limit-modify-IMDS-options)
+ [IMDSv2 からロール認証情報を取得することを要求する](#iam-example-instance-metadata-require-roles-to-use-IMDSv2-credentials)

### IMDSv2 の使用を要求する
<a name="iam-example-instance-metadata-requireIMDSv2"></a>

次のポリシーではインスタンスが IMDSv2 の使用を要求するようにオプトインされていない限り(`"ec2:MetadataHttpTokens": "required"` で指定)、RunInstances API を呼び出せないように指定します。インスタンスが IMDSv2 を要求するように指定しないと、RunInstances API を呼び出したときに `UnauthorizedOperation` エラーが発生します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
               {
            "Sid": "RequireImdsV2",
            "Effect": "Deny",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "StringNotEquals": {
                    "ec2:MetadataHttpTokens": "required"
                }
            }
        }
    ]
}
```

------

### IMDSv2 のオプトアウトを拒否する
<a name="iam-example-instance-metadata-denyoptoutIMDSv2"></a>

次のポリシーでは`ModifyInstanceMetadataOptions` API を呼び出さないように指定し、IMDSv1 または IMDSv2 のオプションを許可します。`ModifyInstanceMetadataOptions` API を呼び出す場合は`HttpTokens` 属性を `required` に設定する必要があります。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "DenyIMDSv1HttpTokensModification",
        "Effect": "Deny",
        "Action": "ec2:ModifyInstanceMetadataOptions",
        "Resource": "arn:aws:ec2:*:*:instance/*",
        "Condition": {
            "StringNotEquals": {
                "ec2:Attribute/HttpTokens": "required"
            },
            "Null": {
                "ec2:Attribute/HttpTokens": false
            }
        }
    }]
}
```

------

### ホップ制限の最大値の指定
<a name="iam-example-instance-metadata-maxHopLimit"></a>

次のポリシーではホップ制限を指定しない限り、RunInstances API を呼び出せないように指定します。また、ホップ制限を 3 以下にするように指定します。これを指定しないと、RunInstances API を呼び出したときに `UnauthorizedOperation` エラーが発生します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
               {
            "Sid": "MaxImdsHopLimit",
            "Effect": "Deny",
            "Action": "ec2:RunInstances",
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "NumericGreaterThan": {
                    "ec2:MetadataHttpPutResponseHopLimit": "3"
                }
            }
        }
    ]
}
```

------

### インスタンスメタデータオプションを変更できるユーザーの制限
<a name="iam-example-instance-metadata-limit-modify-IMDS-options"></a>

次のポリシーでは一般の管理者がインスタンスメタデータオプションを変更するロール `ec2-imds-admins` を持つユーザーのみに変更を行うことを許可します。`ec2-imds-admins` ロール以外のプリンシパルが ModifyInstanceMetadataOptions API を呼び出そうとすると、`UnauthorizedOperation` エラーが発生します。このステートメントはModifyInstanceMetadataOptions API の使用を制御するために使用できます。現在、ModifyInstanceMetadataOptions API 用の詳細なアクセスコントロール (条件) はありません。

### IMDSv2 からロール認証情報を取得することを要求する
<a name="iam-example-instance-metadata-require-roles-to-use-IMDSv2-credentials"></a>

次のポリシーではこのポリシーを適用したロールを EC2 サービスが引き受けて、結果の認証情報をリクエストの署名に使用する場合はIMDSv2 から取得した EC2 ロールの認証情報を使用してリクエストに署名する必要があることを指定します。それ以外の場合はすべての API コールで `UnauthorizedOperation` エラーが発生します。このステートメント/ポリシーはリクエストが EC2 ロールの認証情報によって署名されていない場合は効果がないため、一般的に適用できます。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
               {
            "Sid": "RequireAllEc2RolesToUseV2",
            "Effect": "Deny",
            "Action": "*",
            "Resource": "*",
            "Condition": {
                "NumericLessThan": {
                    "ec2:RoleDelivery": "2.0"
                }
            }
        }
    ]
}
```

------

## Amazon EBS ボリュームとスナップショットの使用
<a name="iam-example-ebs"></a>

Amazon EBS ボリュームとスナップショットを使用するポリシーの例については「[Amazon EBS のアイデンティティベースのポリシー例](https://docs.aws.amazon.com/ebs/latest/userguide/security_iam_id-based-policy-examples.html)」を参照してください。