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

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

IAM ポリシーを使用して Amazon EC2 に必要な許可をユーザーに付与する必要があります。IAM ポリシーを使用して、Amazon EC2 コンソールで特定のリソースを表示、および操作するアクセス許可をユーザーに付与することができます。上記のセクションのサンプルポリシーを使用することはできますが、これらは AWS CLI または AWS SDK で作成されたリクエスト向けに設計されています。詳細については、「IAM ユーザーガイド」の「AWS CLI または AWS SDK で使用するサンプルポリシー」および「IAM ポリシーの作成」を参照してください。

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

ヒント

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

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

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

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

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

{ "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 のアクション、リソース、および条件キーを参照してください。

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

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

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

例: EC2 起動インスタンスウィザードの使用

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: インバウンドルールを追加します。

{ "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詳細については、「リソース作成時にタグ付けするアクセス許可の付与」を参照してください。ユーザーにこのアクションを使用する許可がなく、起動インスタンスウィザードのタグ付けページでてタグを適用しようとした場合、起動に失敗します。

    重要

    インスタンスの起動中に [Name] (名前) を指定すると、タグが作成され、ec2:CreateTags アクションが必要になります。ユーザーに ec2:CreateTags アクションを使用するアクセス許可を付与すると、aws:ResourceTag 条件キーを使用してユーザーによる他のリソースの使用を制限する能力が制限されるため、注意が必要です。ユーザーに ec2:CreateTags アクションを使用するアクセス許可を付与すると、ユーザーがそれらの制限を回避するためにリソースのタグを変更できます。詳細については、「リソースタグを使用した EC2 リソースへのアクセスの制御」を参照してください。

  • AMI を選択するときに Systems Manager パラメータを使用するには、ポリシーに ssm:DescribeParametersssm: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) でのみ起動することができます。ユーザーは sa-east-1 リージョンでのみ起動できます。ユーザーが異なるリージョンを選択するか、起動インスタンスウィザードで異なるインスタンスタイプ、AMI、サブネットを選択すると、起動は失敗します。

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

{ "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: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": "t2.micro" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:sa-east-1::image/ami-*" ], "Condition": { "StringEquals": { "ec2:Owner": "amazon" } } } ] }

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

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

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

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

例: ボリュームの使用

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

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

最初のステートメントでは、ボリュームを作成するときにユーザーがアベイラビリティーゾーンを選択できるようにするため、ec2:DescribeAvailabilityZones アクションが必要です。

ユーザーは、作成したボリュームをタグ付けできません (ボリュームの作成中も作成後も)。

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

例: セキュリティグループの操作

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

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

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

{ "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:region:111122223333:security-group/*" ], "Condition": { "StringEquals": { "aws:ResourceTag/Department": "Test" } } }, { "Effect": "Allow", "Action": [ "ec2:ModifySecurityGroupRules" ], "Resource": [ "arn:aws:ec2:region: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 に関連付けられたセキュリティグループを削除するアクセス許可も付与します。

{ "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" } } } ] }

例: Elastic IP アドレスの操作

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

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

  • ec2:AllocateAddress: Elastic IP アドレスを割り当てます。

  • ec2:ReleaseAddress: Elastic IP アドレスをリリースするには。

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

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

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

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

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

例: リザーブドインスタンス の操作

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

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

{ "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 はユーザーが読み取り専用アクセスを持っていることを意味します。