メニュー
Amazon Elastic Compute Cloud
Linux インスタンス用ユーザーガイド

Amazon EC2 コンソールで機能するサンプル ポリシー

IAM ポリシーを使用して、Amazon EC2 コンソールで特定のリソースを表示、および操作するアクセス許可をユーザーに付与することができます。上記のセクションのサンプルポリシーを使用することはできますが、これらは AWS CLI または AWS SDK で作成されたリクエスト向けに設計されています。コンソールではこの機能を実行するために追加の API アクションを使用するので、これらのポリシーは正常に動作しない可能性があります。たとえば、DescribeVolumes API アクションのみを使用するアクセス許可を持つユーザーがコンソールでボリュームを表示しようとすると、エラーが発生します。このセクションでは、コンソールの特定の部分をユーザーが操作できるようになるポリシーを説明します。

注記

コンソールでタスクを実行するために必要な API アクションを探すには、AWS CloudTrail などのサービスを使用できます。詳細については、AWS CloudTrail User Guide を参照してください。ポリシーにより特定のリソースを作成または変更するアクセス許可が付与されない場合、コンソールではエンコードされた診断情報のメッセージが表示されます。AWS STS の DecodeAuthorizationMessage API アクション、または AWS CLI の decode-authorization-message コマンドを使用してメッセージをデコードできます。

Amazon EC2 向けのポリシー作成の詳細については、AWS セキュリティブログの投稿「Granting Users Permission to Work in the Amazon EC2 Console」を参照してください。

例 1: 読み取り専用アクセス

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

a. インスタンス、AMIS、スナップショットを表示する

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

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

注記

現在、Amazon EC2 ec2:Describe* API アクションは、リソースレベルのアクセス許可をサポートしていません。そのため、ユーザーがコンソールで表示できる個人のリソースを制御できません。したがって、上記のステートメントの Resource エレメントには、* (ワイルドカード) が必要です。どの Amazon EC2 API アクションでどの ARN を使用できるかについては、Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可 を参照してください。

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

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

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "cloudwatch:DescribeAlarms", "cloudwatch:GetMetricStatistics" ], "Resource": "*" } ] }

例 2: EC2 起動ウィザードを使用する

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

a. 起動ウィザードへの基本的なアクセスを許可する

起動を正常に完了させるには、ユーザーに ec2:RunInstances API アクションを使用するアクセス許可を付与し、少なくとも以下の API アクションを使用できるようにする必要があります。

  • ec2:DescribeImages: AMI を表示して選択します。

  • ec2:DescribeVPCs: 利用可能なネットワークオプション (EC2-Classic と VPC の一覧) を表示します。これは、VPC 内で起動しない場合でも必須です。

  • ec2:DescribeSubnets: VPC 内で起動している場合、選択した VPC で利用可能なすべてのサブネットを表示します。

  • ec2:DescribeSecurityGroups: ウィザードでセキュリティグループページを表示します。ユーザーは既存のセキュリティグループを選択できます。

  • ec2:DescribeKeyPairs または ec2:CreateKeyPair: 既存のキーペアを選択する、または新しいキーペアを作成します。

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

ポリシーに次のような API アクションを追加して、ユーザーに追加のオプションを提供できます。

  • ec2:DescribeAvailabilityZones: EC2 Classic 内で起動している場合、特定のアベイラビリティゾーンを表示して選択します。

  • ec2:DescribeNetworkInterfaces: VPC 内で起動している場合、選択したサブネット内に存在するネットワークインターフェイスを表示して選択します。

  • ec2:CreateSecurityGroup: 新しいセキュリティグループを作成します。たとえば、ウィザードの推奨される launch-wizard-x セキュリティグループを作成します。ただし、このアクション単独では、セキュリティグループが作成されるだけです。ルールは追加または変更されません。インバウンドルールを追加するには、ユーザーに ec2:AuthorizeSecurityGroupIngress API アクションを使用するアクセス許可を付与する必要があります。VPC セキュリティグループにアウトバウンドルールを追加するには、ユーザーに ec2:AuthorizeSecurityGroupEgress API アクションを使用するアクセス許可を付与する必要があります。既存のルールを変更または削除するには、ユーザーに関連する ec2:RevokeSecurityGroup* API アクションを使用するアクセス許可を付与する必要があります。

  • ec2:CreateTags: インスタンスにタグを追加します。起動ウィザードはデフォルトで Name のキーを含むタグをインスタンスに追加しようとします。このアクションを使用するアクセス許可を持たないユーザーには、このタグをインスタンスに適用できなかったという警告が表示されます。ただし、これが起動の成功に影響を与えることはありません。したがって絶対に必要な場合のみユーザーにこのアクションを使用するアクセス許可を付与することをお勧めします。

    重要

    ユーザーに ec2:CreateTags アクションを使用するアクセス許可を付与するには注意が必要です。これにより、ec2:ResourceTag 条件キーを使用する能力が限定され、他のリソースの使用が制限されます。ユーザーは、リソースのタグを変更してその制限を回避できます。

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

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

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

最初のステートメントでは、上記の例に示したように、起動ウィザードでオプションを表示するアクセス許可がユーザーに付与されます。2 番目のステートメントでは、ec2:RunInstances アクションでネットワークインターフェイス、ボリューム、キーペア、セキュリティグループ、サブネットリソースを使用するアクセス許可が付与されます。これは、ユーザーが VPC でインスタンスを起動するために必要です。ec2:RunInstances アクションの使用方法の詳細については、「5: インスタンスを起動する (RunInstances)」を参照してください。3 番目と 4 番目のステートメントでは、インスタンスと AMI リソースを使用するアクセス許可がそれぞれ付与されますが、インスタンスが m1.small インスタンスの場合のみ、および AMI が Amazon によって所有されている場合のみ付与されます。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeImages", "ec2:DescribeKeyPairs","ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ], "Resource": "*" }, { "Effect": "Allow", "Action":"ec2:RunInstances", "Resource": [ "arn:aws:ec2:sa-east-1:111122223333:network-interface/*", "arn:aws:ec2:sa-east-1:111122223333:volume/*", "arn:aws:ec2:sa-east-1:111122223333:key-pair/*", "arn:aws:ec2:sa-east-1:111122223333:security-group/*", "arn:aws:ec2:sa-east-1:111122223333:subnet/subnet-1a2b3c4d" ] }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:sa-east-1:111122223333:instance/*" ], "Condition": { "StringEquals": { "ec2:InstanceType": "m1.small" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:sa-east-1::image/ami-*" ], "Condition": { "StringEquals": { "ec2:Owner": "amazon" } } } ] }

例 3: ボリュームを操作する

次のポリシーは、ボリュームを表示して作成し、特定のインスタンスにボリュームをアタッチ、およびデタッチするアクセス許可をユーザーに付与します。

ユーザーは、"purpose=test" というタグを含むインスタンスに対してどのボリュームもアタッチできます。同様に、それらのインスタンスからボリュームをデタッチすることもできます。Amazon EC2 コンソールを使用してボリュームをアタッチするには、ユーザーに ec2:DescribeInstances アクションを使用するアクセス許可があると、[Attach Volume] ダイアログボックスのあらかじめ用意されたリストからインスタンスを選択できるため、役立ちます。 ただし、これにより、コンソールの [Instances] ページでもすべてのインスタンスが表示されるため、このアクションを省略することもできます。

最初のステートメントの ec2:DescribeVolumeStatus および ec2:DescribeAvailabilityZones アクションは、コンソールでボリュームを正しく表示するために必須です。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeVolumes", "ec2:DescribeVolumeStatus", "ec2:DescribeAvailabilityZones", "ec2:CreateVolume", "ec2:DescribeInstances" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:region:111122223333:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/purpose": "test" } } }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:region:111122223333:volume/*" } ] }

例 4: セキュリティグループを操作する

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

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

注記

EC2-Classic セキュリティグループのアウトバウンドルールを変更することはできません。セキュリティグループの詳細については、Linux インスタンスの Amazon EC2 セキュリティグループ を参照してください。

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

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeSecurityGroups", "ec2:DescribeTags" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:RevokeSecurityGroupIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupEgress" ], "Resource": [ "arn:aws:ec2:region:111122223333:security-group/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/Department": "Test" } } } ] }

b. [Create Security Group] ダイアログボックスを使用する

ユーザーが Amazon EC2 コンソールの [Create Security Group] ダイアログボックスを使用して作業できるようにするポリシーを作成できます。このダイアログボックスを使用するには、ユーザーに少なくとも以下の API アクションを使用するアクセス許可を付与する必要があります。

  • ec2:CreateSecurityGroup: 新しいセキュリティグループを作成するには

  • ec2:DescribeVpcs: [VPC] リストに既存の VPC のリストを表示します。このアクションは、EC2-Classic のセキュリティグループを作成する際は必要ありません。

これらのアクセス許可で、ユーザーは新しいセキュリティグループを正常に作成できますが、ルールを追加することはできません。[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:CreateSecurityGroup API アクションは、リソースのレベルのアクセス許可をサポートしていません。ただし、ec2:AuthorizeSecurityGroupIngress および ec2:AuthorizeSecurityGroupEgress アクションにリソースレベルのアクセス許可を適用してルールを作成する方法を制御できます。

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

Copy
{ "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:region:111122223333:security-group/*", "Condition":{ "ArnEquals": { "ec2:Vpc": "arn:aws:ec2:region:111122223333:vpc/vpc-1a2b3c4d" } } } ] }

例 5: Elastic IP アドレスの操作

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

Elastic IP アドレスの使用をユーザーに許可する場合は、ポリシーに次のアクションを追加できます。

  • ec2:AllocateAddress: VPC または EC2-Classic で使用するアドレスを割り当てます。

  • ec2:ReleaseAddress: Elastic IP アドレスを解放します。

  • ec2:AssociateAddress: Elastic IP アドレスをインスタンスまたはネットワークインターフェイスに関連付けます。

  • ec2:DescribeNetworkInterfacesec2:DescribeInstances: [Associate address] で使用します。この画面には、Elastic IP アドレスを関連付けることができるインスタンスまたはネットワークインターフェイスが表示されます。EC2-Classic インスタンスの場合、ユーザーは ec2:DescribeInstances を使用するアクセス許可のみが必要です。

  • ec2:DisassociateAddress: Elastic IP アドレスとインスタンスまたはネットワークインターフェイスの関連付けを解除します。

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

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

例 6. リザーブドインスタンスを使用する

以下のポリシーを IAM ユーザーにアタッチすることができます。これにより、アカウントのリザーブドインスタンスの表示と変更、および AWS マネジメントコンソールでの新しいリザーブドインスタンス購入のアクセス許可がユーザーに付与されます。

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

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

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

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