

# Amazon EC2 コンソールへのアクセスを制御するポリシーの例
<a name="iam-policies-ec2-console"></a>

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

コンソールではこの機能を実行するために追加の API アクションを使用するので、これらのポリシーは正常に動作しない可能性があります。例えば、`DescribeVolumes` API アクションのみを使用するアクセス許可を持つユーザーがコンソールでボリュームを表示しようとすると、エラーが発生します。このセクションでは、コンソールの特定の部分をユーザーが操作できるようになるポリシーを説明します。Amazon EC2 向けのポリシー作成の詳細については、以下の AWS セキュリティブログの投稿[Granting Users Permission to Work in the Amazon EC2 Console](https://aws.amazon.com/blogs/security/granting-users-permission-to-work-in-the-amazon-ec2-console/)を参照してください。

以下の例では、Amazon EC2 を使用するアクセス許可をユーザーに付与するために使用できるポリシーステートメントを示しています。各*ユーザー入力プレースホルダー*を独自の情報に置き換えます。これらのポリシーは、AWS マネジメントコンソールを使用して行われたリクエスト向けに設計されています。Amazon EC2 コンソールは複数の API アクションを呼び出して 1 つのリソースを表示する場合があり、ユーザーがタスクを試行してコンソールにエラーが表示されるまではそれが明確でない場合があります。詳細については、AWS セキュリティブログの投稿「[Granting Users Permission to Work in the Amazon EC2 Console](https://aws.amazon.com/blogs/security/granting-users-permission-to-work-in-the-amazon-ec2-console/)」を参照してください。

**Topics**
+ [読み取り専用アクセス](#ex-read-only)
+ [EC2 インスタンス起動ウィザードの使用](#ex-launch-wizard)
+ [セキュリティグループの操作](#ex-security-groups)
+ [Elastic IP アドレスの操作](#ex-eip)
+ [リザーブドインスタンス の操作](#ex-reservedinstances)

コンソールでタスクを実行するために必要な API アクションを探すには、呼び出しをログに記録する AWS CloudTrail などのサービスを使用できます。ポリシーにより特定のリソースを作成または変更するアクセス許可が付与されない場合、コンソールではエンコードされた診断情報のメッセージが表示されます。[ の DecodeAuthorizationMessage](https://docs.aws.amazon.com/STS/latest/APIReference/API_DecodeAuthorizationMessage.html) API アクションAWS STS、または AWS CLI の [decode-authorization-message](https://docs.aws.amazon.com/cli/latest/reference/sts/decode-authorization-message.html) コマンドを使用してメッセージをデコードできます。

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

ユーザーが Amazon EC2 コンソールですべてのリソースを表示できるようにするには、次の例と同じポリシーを使用します: [例: 読み取り専用アクセス](ExamplePolicies_EC2.md#iam-example-read-only)。別のステートメントによりユーザーにアクセス許可が与えられない限り、ユーザーはリソースのアクションを実行したり新しいリソースを作成することができません。

**インスタンス、AMI、スナップショットを表示する**

代わりに、リソースのサブセットへの読み取り専用アクセスを提供できます。これを行うには、`ec2:Describe` API アクションの \$1 (ワイルドカード) を各リソースの固有の `ec2:Describe` アクションに置き換えます。次のポリシーによりユーザーは Amazon EC2 コンソールですべてのインスタンス、AMI、およびスナップショットを表示できます。`ec2:DescribeTags` アクションにより、ユーザーはパブリック AMI を表示できます。コンソールでタグ付け情報にパブリック AMI を表示させる必要がありますが、ユーザーがプライベート AMI だけを表示できるようにするには、このアクションを削除できます。

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

****  

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

------

**注記**  
Amazon EC2 `ec2:Describe*` API アクションは、リソースレベルのアクセス許可をサポートしていません。そのため、ユーザーがコンソールで表示できる個人のリソースを制御できません。したがって、上記のステートメントの `Resource` エレメントには、\$1 (ワイルドカード) が必要です。どの Amazon EC2 API アクションでどの ARN を使用できるかの詳細については、[Amazon EC2 のアクション、リソース、および条件キー](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonec2.html)を参照してください。

**インスタンスと CloudWatch メトリクスを表示する**

以下のポリシーは、ユーザーに対して Amazon EC2 コンソールでのインスタンスの表示、[**Instances**] ページの [**Monitoring**] タブでの CloudWatch アラームおよびメトリクスの表示を許可します。Amazon EC2 コンソールでは、アラームとメトリクスの表示に CloudWatch API を使用するため、ユーザーに対して `cloudwatch:DescribeAlarms`、`cloudwatch:DescribeAlarmsForMetric`、`cloudwatch:ListMetrics`、`cloudwatch:GetMetricStatistics` および `cloudwatch:GetMetricData` のアクションを使用する許可を付与する必要があります。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeInstances",
         "ec2:DescribeInstanceTypes",
         "cloudwatch:DescribeAlarms",
         "cloudwatch:DescribeAlarmsForMetric",
         "cloudwatch:ListMetrics",
         "cloudwatch:GetMetricStatistics",
         "cloudwatch:GetMetricData"
      ],
      "Resource": "*"
   }
   ]
}
```

------

## 例: EC2 インスタンス起動ウィザードの使用
<a name="ex-launch-wizard"></a>

Amazon EC2 インスタンス起動ウィザードは、インスタンスを設定し、起動するためのオプションを提供する画面です。ユーザーがウィザードのオプションを操作できるように、API アクションを使用するアクセス許可をポリシーに含める必要があります。ポリシーにそれらのアクションを使用するアクセス許可が含まれない場合、ウィザードの一部の項目は適切にロードされず、ユーザーは起動を完了できません。

**基本のインスタンス起動ウィザードのアクセス**

起動を正常に完了させるには、ユーザーに `ec2:RunInstances` API アクションを使用するアクセス許可を付与し、少なくとも以下の API アクションを使用できるようにする必要があります。
+ `ec2:DescribeImages`: AMI を表示して選択します。
+ `ec2:DescribeInstanceTypes`: インスタンスタイプを表示および選択します。
+ `ec2:DescribeVpcs`: 使用できるネットワークオプションを表示します。
+ `ec2:DescribeSubnets`: 選択した VPC のすべての使用可能なサブネットを表示します。
+ `ec2:DescribeSecurityGroups` または `ec2:CreateSecurityGroup`: 既存のセキュリティグループを表示および選択する、または新しいセキュリティグループを作成します。
+ `ec2:DescribeKeyPairs` または `ec2:CreateKeyPair`: 既存のキーペアを選択する、または新しいキーペアを作成します。
+ `ec2:AuthorizeSecurityGroupIngress`: インバウンドルールを追加します。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:DescribeImages",
                "ec2:DescribeInstanceTypes",
                "ec2:DescribeKeyPairs",
                "ec2:DescribeVpcs",
                "ec2:DescribeSubnets",
                "ec2:DescribeSecurityGroups",
                "ec2:CreateSecurityGroup",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:CreateKeyPair"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "*"
        }
    ]
}
```

------

ポリシーに次のような API アクションを追加して、ユーザーに追加のオプションを提供できます。
+ `ec2:DescribeAvailabilityZones`: 特定のアベイラビリティーゾーンを選択します。
+ `ec2:DescribeNetworkInterfaces`: 選択したサブネットの既存のネットワークインターフェイスを表示および選択します。
+ VPC セキュリティグループにアウトバウンドルールを追加するには、ユーザーに `ec2:AuthorizeSecurityGroupEgress` API アクションを使用するアクセス許可を付与する必要があります。既存のルールを変更または削除するには、ユーザーに関連する `ec2:RevokeSecurityGroup*` API アクションを使用するアクセス許可を付与する必要があります。
+ `ec2:CreateTags`: により作成されたリソースにタグ付けする場合に使用します。`RunInstances`詳細については、「[Amazon EC2 リソース作成時にタグ付けするアクセス許可の付与](supported-iam-actions-tagging.md)」を参照してください。ユーザーにこのアクションを使用する許可がなく、インスタンス起動ウィザードのタグ付けページでてタグを適用しようとした場合、起動に失敗します。
**重要**  
インスタンスの起動中に **[Name]** (名前) を指定すると、タグが作成され、`ec2:CreateTags` アクションが必要になります。ユーザーに `ec2:CreateTags` アクションを使用するアクセス許可を付与すると、`aws:ResourceTag` 条件キーを使用してユーザーによる他のリソースの使用を制限する能力が制限されるため、注意が必要です。ユーザーに `ec2:CreateTags` アクションを使用するアクセス許可を付与すると、ユーザーがそれらの制限を回避するためにリソースのタグを変更できます。詳細については、「[属性ベースのアクセスを使用するアクセスの制御](iam-policies-for-amazon-ec2.md#control-access-with-tags)」を参照してください。
+ AMI を選択するときに Systems Manager パラメータを使用するには、ポリシーに `ssm:DescribeParameters` と `ssm:GetParameters` を追加する必要があります。`ssm:DescribeParameters` は、ユーザーに Systems Manager パラメータを表示および選択する許可を付与します。`ssm:GetParameters` は、ユーザーに Systems Manager パラメータの値を取得する許可を付与します。また、特定の Systems Manager パラメータへのアクセスを制限することもできます。詳細については、このセクションの後半の**特定の Systems Manager パラメータへのアクセスの制限**を参照してください。

現在、Amazon EC2 `Describe*` API アクションは、リソースレベルの許可をサポートしていません。そのため、ユーザーがインスタンス起動ウィザードで表示できる個人のリソースを制限することはできません。ただし、`ec2:RunInstances` API アクションにリソースレベルのアクセス許可を適用して、ユーザーがインスタンスの起動に使用できるリソースを制限できます。ユーザーが使用する権限がないオプションを選択すると、起動は失敗します。

**特定のインスタンスタイプ、サブネット、リージョンへのアクセスの制限**

次のポリシーにより、ユーザーは Amazon が所有する AMI を使用して `t2.micro` インスタンスを特定のサブネット (`subnet-1a2b3c4d`) でのみ起動することができます。ユーザーは指定されたリージョンでのみ起動できます。ユーザーが異なるリージョンを選択するか、インスタンス起動ウィザードで異なるインスタンスタイプ、AMI、サブネットを選択すると、起動は失敗します。

最初のステートメントでは、上記の例で説明したように、インスタンス起動ウィザードでオプションを表示する許可または新しいオプションを作成する許可がユーザーに付与されます。2 番目のステートメントでは、`ec2:RunInstances` アクションでネットワークインターフェイス、ボリューム、キーペア、セキュリティグループ、サブネットリソースを使用するアクセス許可が付与されます。これは、ユーザーが VPC でインスタンスを起動するために必要です。`ec2:RunInstances` アクションの使用方法の詳細については、[インスタンスの起動 (RunInstances)](ExamplePolicies_EC2.md#iam-example-runinstances)を参照してください。3 番目と 4 番目のステートメントは、それぞれインスタンスと AMI リソースを使用するための許可をユーザーに付与しますが、これは、インスタンスが `t2.micro` インスタンスであり、AMI が Amazon または特定の信頼できる検証済みのパートナーによって所有されている場合に限られます。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeInstances",
         "ec2:DescribeImages",
         "ec2:DescribeInstanceTypes",
         "ec2:DescribeKeyPairs", 
         "ec2:CreateKeyPair", 
         "ec2:DescribeVpcs", 
         "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", 
         "ec2:CreateSecurityGroup", 
         "ec2:AuthorizeSecurityGroupIngress"
	  ],
	  "Resource": "*"
   },
   {
      "Effect": "Allow",
      "Action":"ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:network-interface/*",
         "arn:aws:ec2:us-east-2:111122223333:volume/*",
         "arn:aws:ec2:us-east-2:111122223333:key-pair/*",
         "arn:aws:ec2:us-east-2:111122223333:security-group/*",
         "arn:aws:ec2:us-east-2:111122223333:subnet/subnet-1a2b3c4d"
      ]
   },
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:instance/*"
      ],
      "Condition": {
         "StringEquals": {
            "ec2:InstanceType": "t2.micro"
         }
      }
   },
   {
      "Effect": "Allow",
      "Action": "ec2:RunInstances",
      "Resource": [ 
            "arn:aws:ec2:us-east-2::image/ami-*"
      ],
      "Condition": {
         "StringEquals": {
            "ec2:Owner": "amazon"
         }
      }
   }
   ]
}
```

------

**特定の Systems Manager パラメータへのアクセスの制限**

次のポリシーは、特定の名前の Systems Manager パラメータを使用するアクセスを許可します。

1 つ目のステートメントは、インスタンス起動ウィザードで AMI を選択するときに Systems Manager パラメータを表示する許可をユーザーに付与します。2 つ目のステートメントは、`prod-*` という名前のパラメータのみを使用するアクセス許可をユーザーに付与します。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ssm:DescribeParameters"
      ],
      "Resource": "*"
   },
   {
      "Effect": "Allow",
      "Action": [
         "ssm:GetParameters"
      ],
     "Resource": "arn:aws:ssm:us-east-2:123456123456:parameter/prod-*"
   }
   ]
}
```

------

## 例: セキュリティグループの操作
<a name="ex-security-groups"></a>

**セキュリティグループを表示し、ルールを追加/削除する**

次のポリシーは、Amazon EC2 コンソールでセキュリティグループを表示し、インバウンドおよびアウトバウンドのルールを追加および削除し、タグ `Department=Test` を含む既存のセキュリティグループのルール説明を変更するアクセス許可をユーザーに付与します。

最初のステートメントの `ec2:DescribeTags` アクションにより、ユーザーはコンソールでタグを表示できます。これにより、ユーザーは変更できるセキュリティグループをより簡単に識別できます。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
         "ec2:DescribeSecurityGroups", 
         "ec2:DescribeSecurityGroupRules", 
         "ec2:DescribeTags"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
         "ec2:AuthorizeSecurityGroupIngress", 
         "ec2:RevokeSecurityGroupIngress", 
         "ec2:AuthorizeSecurityGroupEgress", 
         "ec2:RevokeSecurityGroupEgress", 
         "ec2:ModifySecurityGroupRules", 
         "ec2:UpdateSecurityGroupRuleDescriptionsIngress", 
         "ec2:UpdateSecurityGroupRuleDescriptionsEgress"
      ],
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:security-group/*"
      ],
      "Condition": {
         "StringEquals": {
            "aws:ResourceTag/Department": "Test"
         }
      }
   },
   {
      "Effect": "Allow",
      "Action": [
         "ec2:ModifySecurityGroupRules"
      ],
      "Resource": [
         "arn:aws:ec2:us-east-2:111122223333:security-group-rule/*"
      ]
   }
]}
```

------

**[Create Security Group] ダイアログボックスの使用**

ユーザーが Amazon EC2 コンソールの [**Create Security Group**] ダイアログボックスを使用して作業できるようにするポリシーを作成できます。このダイアログボックスを使用するには、ユーザーに少なくとも以下の API アクションを使用するアクセス許可を付与する必要があります。
+ `ec2:CreateSecurityGroup`: 新しいセキュリティグループを作成するには 
+ `ec2:DescribeVpcs`: [**VPC**] リストに既存の VPC のリストを表示します。

これらのアクセス許可で、ユーザーは新しいセキュリティグループを正常に作成できますが、ルールを追加することはできません。[**Create Security Group**] ダイアログボックスでルールを操作するには、ポリシーに次の API アクションを追加します。
+ `ec2:AuthorizeSecurityGroupIngress`: インバウンドルールを追加します。
+ `ec2:AuthorizeSecurityGroupEgress`: VPC セキュリティグループにアウトバウンドルールを追加します。
+ `ec2:RevokeSecurityGroupIngress`: 既存のインバウンドルールを変更または削除します。これは、ユーザーがコンソールで [**Copy to new**] 機能を使用できるようにするために役に立ちます。この機能により、[**Create Security Group**] ダイアログボックスが開き、選択したセキュリティグループと同じルールが追加されます。
+ `ec2:RevokeSecurityGroupEgress`: VPC セキュリティグループのアウトバウンドルールを変更または削除します。これは、すべてのアウトバウンドトラフィックを許可するデフォルトのアウトバウンドルールを変更または削除する場合に役に立ちます。
+ `ec2:DeleteSecurityGroup`: 無効なルールを保存できないときに対応します。コンソールでは、最初にセキュリティグループを作成し、次に指定されたルールを追加します。ルールが無効である場合、アクションは失敗し、コンソールによってセキュリティグループの削除が試行されます。引き続き、[**Create Security Group**] ダイアログボックスが利用できるため、ユーザーは無効なルールを修正してセキュリティグループを再作成できます。この API アクションは必須ではありませんが、ユーザーにこのアクションを使用するアクセス許可が付与されておらず、無効なルールを持つセキュリティグループを作成しようとすると、ルールのないセキュリティグループが作成され、後でルールを追加することが必要になります。
+ `ec2:UpdateSecurityGroupRuleDescriptionsIngress`: 入力 (受信) セキュリティグループルールの説明を追加または更新するには
+ `ec2:UpdateSecurityGroupRuleDescriptionsEgress`: 出力 (送信) セキュリティグループルールの説明を追加または更新するには
+ `ec2:ModifySecurityGroupRules`: セキュリティグループのルールを変更します。
+ `ec2:DescribeSecurityGroupRules`: セキュリティグループのルールを一覧表示します。

次のポリシーは、[**Create Security Group**] ダイアログボックスを使用し、特定の VPC (`vpc-1a2b3c4d`) に関連付けられたセキュリティグループに対してインバウンドおよびアウトバウンドのルールを作成するアクセス許可をユーザーに付与します。ユーザーは VPC のセキュリティグループを作成できますが、ルールを追加することはできません。同様に、ユーザーは VPC `vpc-1a2b3c4d` に関連付けられていないの既存のセキュリティグループにルールを追加することもできません。ユーザーには、コンソールですべてのセキュリティグループを表示するアクセス許可も付与されます。これにより、ユーザーはインバウンドルールを追加するセキュリティグループをより簡単に識別できるようになります。このポリシーは、ユーザーに VPC `vpc-1a2b3c4d` に関連付けられたセキュリティグループを削除するアクセス許可も付与します。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [{
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeSecurityGroups", 
        "ec2:CreateSecurityGroup", 
        "ec2:DescribeVpcs"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DeleteSecurityGroup", 
        "ec2:AuthorizeSecurityGroupIngress", 
        "ec2:AuthorizeSecurityGroupEgress"
      ],
      "Resource": "arn:aws:ec2:us-east-2:111122223333:security-group/*",
      "Condition":{
         "ArnEquals": {
            "ec2:Vpc": "arn:aws:ec2:us-east-2:111122223333:vpc/vpc-1a2b3c4d"
         }
      }
    }
   ]
}
```

------

## 例: Elastic IP アドレスの操作
<a name="ex-eip"></a>

Amazon EC2 コンソールで Elastic IP アドレスを確認することをユーザーに許可するには、`ec2:DescribeAddresses` アクションを使用するためのアクセス許可をユーザーに付与します。

Elastic IP アドレスの使用をユーザーに許可する場合は、ポリシーに次のアクションを追加できます。
+ `ec2:AllocateAddress`: Elastic IP アドレスを割り当てます。
+ `ec2:ReleaseAddress`: Elastic IP アドレスをリリースするには。
+ `ec2:AssociateAddress`: Elastic IP アドレスをインスタンスまたはネットワークインターフェイスに関連付けます。
+ `ec2:DescribeNetworkInterfaces` と `ec2:DescribeInstances`: [**Associate address**] で使用します。この画面には、Elastic IP アドレスを関連付けることができるインスタンスまたはネットワークインターフェイスが表示されます。
+ `ec2:DisassociateAddress`: Elastic IP アドレスとインスタンスまたはネットワークインターフェイスの関連付けを解除します。

次のポリシーでは、Elastic IP アドレスの表示、割り当て、インスタンスとの関連付けを行うことができます。ユーザーは Elastic IP アドレスとネットワークインターフェイスの関連付け、Elastic IP アドレスの関連付けの解除、または Elastic IP アドレスのリリースを行うことはできません。

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

****  

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

------

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

次のポリシーにより、アカウントのリザーブドインスタンスの表示と変更、および AWS マネジメントコンソール での新しいリザーブドインスタンスの購入をすることができます。

このポリシーにより、ユーザーがアカウント内のすべての リザーブドインスタンス と オンデマンドインスタンス を表示できるようになります。個別の リザーブドインスタンス にリソースレベルのアクセス許可を設定することはできません。

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

****  

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

------

`ec2:DescribeAvailabilityZones` アクションは、リザーブドインスタンス を購入できるアベイラビリティーゾーンに関する情報を Amazon EC2 コンソールで表示できるようにするために必要です。`ec2:DescribeInstances` アクションは必須ではありませんが、このアクションにより、ユーザーがアカウントのインスタンスを表示し、正しい仕様に合わせて予約を購入できるようになります。

`ec2:DescribeInstances` を削除するなど、API アクションを調整してユーザーアクセスを制限できます。`ec2:DescribeAvailabilityZones` はユーザーが読み取り専用アクセスを持っていることを意味します。