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

AWS CLI または AWS SDK で使用するサンプルポリシー

以下の例では、Amazon EC2 に対して IAM ユーザーが所有するアクセス許可を制御するために使用できるポリシーステートメントを示しています。これらのポリシーは、AWS CLI または AWS SDK で行われたリクエスト向けに設計されています。Amazon EC2 コンソールで機能するポリシーの例については、「Amazon EC2 コンソールで機能するサンプル ポリシー」を参照してください。Amazon VPC 固有の IAM ポリシーの例については、「Amazon VPC リソースへのアクセスの制御」を参照してください。

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

次のポリシーでは、名前が Describe で始まるすべての Amazon EC2 API アクションを使用できるアクセス許可をユーザーに与えます。Resource エレメントにワイルドカードを使用します。これは、ユーザーが API アクションですべてのリソースを指定できることを示します。また、API アクションがリソースレベルのアクセス許可をサポートしていない場合も、* ワイルドカードが必要です。どの Amazon EC2 API アクションでどの ARN を使用できるかについては、Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可 を参照してください。

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

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

例 2: 特定のリージョンへのアクセスの制限

次のポリシーでは、欧州 (フランクフルト) に限り、すべての Amazon EC2 API アクションを使用するアクセス許可をユーザーに付与します。ユーザーは、その他のリージョンのリソースを表示、作成、変更、または削除することはできません。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Effect": "Allow", "Action": "ec2:*", "Resource": "*", "Condition": { "StringEquals": { "ec2:Region": "eu-central-1" } } } ] }

例 3: インスタンスの使用

a: すべてのインスタンスを記述、起動、停止、開始、および終了する

次のポリシーでは、Action エレメントで指定された API アクションを使用するアクセス許可をユーザーに与えます。Resource エレメントでは * ワイルドカードを使用して、ユーザーが API アクションですべてのリソースを指定できることを示します。また、API アクションがリソースレベルのアクセス許可をサポートしていない場合も、* ワイルドカードが必要です。どの Amazon EC2 API アクションでどの ARN を使用できるかについては、Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可 を参照してください。

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

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

b. すべてのインスタンスを記述し、特定のインスタンスのみを停止、開始、および終了する

次のポリシーでは、すべてのインスタンスを表示し、i-1234567890abcdef0 と i-0598c7d356eba48d7 インスタンスのみを開始および停止し、米国東部 (バージニア北部) リージョン (us-east-1) 内でリソースタグ "purpose=test" の付いたインスタンスのみを終了する許可をユーザーに与えます。

最初のステートメントでは、Resource エレメントに * ワイルドカードを使用して、ユーザーがそのアクションにすべてのリソースを指定できることを示しています。この場合、すべてのインスタンスをリストできます。また、API アクションがリソースレベルのアクセス許可をサポートしていない場合も、* ワイルドカードが必要です (この場合は、ec2:DescribeInstances)。どの Amazon EC2 API アクションでどの ARN を使用できるかについては、Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可 を参照してください。

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

3 番目のステートメントでは、指定された AWS アカウントに属する 米国東部 (バージニア北部) リージョン (us-east-1) 内にあり、タグ "purpose=test" が付けられているすべてのインスタンスを終了する許可をユーザーに与えています。Condition エレメントは、ポリシーステートメントの発効条件を指定します。

Copy
{ "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:123456789012:instance/i-1234567890abcdef0", "arn:aws:ec2:us-east-1:123456789012:instance/i-0598c7d356eba48d7" ] }, { "Effect": "Allow", "Action": "ec2:TerminateInstances", "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/purpose": "test" } } } ] }

例 4. ボリュームを操作する

API アクションが複数のリソースを指定するために発信者を必要とする場合、ユーザーがすべての必要なリソースにアクセスできるようにポリシーステートメントを作成する必要があります。1 つ以上のリソースで Condition エレメントを使用する必要がある場合、この例のとおり複数のステートメントを作成する必要があります。

以下のポリシーでは、ユーザーがタグ「volume_user=iam-user-name」の付いたボリュームを、タグ「department=dev」の付いたインスタンスにアタッチしたり、またインスタンスからボリュームをデタッチしたりできるようにします。このポリシーを IAM グループにアタッチする場合、aws:username ポリシー変数によってグループの IAM ユーザーに、値として IAM ユーザー名を持つタグ名が volume_user のインスタンスからボリュームをアタッチまたはデタッチするためのアクセス許可が付与されます。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/department": "dev" } } }, { "Effect": "Allow", "Action": [ "ec2:AttachVolume", "ec2:DetachVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "ec2:ResourceTag/volume_user": "${aws:username}" } } } ] }

例 5: インスタンスを起動する (RunInstances)

RunInstances API アクションでは、1 つ以上のインスタンスを起動します。RunInstances は AMI を必要とし、インスタンスを作成します。ユーザーは、リクエスト内でキーペアとセキュリティグループを指定できます。EC2-VPC 内に起動するにはサブネットが必要であり、起動されるとネットワークインターフェイスが作成されます。Amazon EBS-Backed AMI から起動すると、ボリュームが作成されます。そのため、ユーザーにはこれらの Amazon EC2 リソースを使用するアクセス許可が必要です。発信者は、インスタンスタイプおよびサブネットなどの RunInstances に対してオプションのパラメータを使用して、インスタンスを設定することもできます。ユーザーがオプションのパラメータを指定する必要がある、またはユーザーからパラメータの特定の値を制限するポリシーステートメントを作成できます。このセクションの例では、ユーザーが起動できるインスタンスの設定を制御できるさまざまな方法について説明します。

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

[a. AMI]

次のポリシーでは、インスタンスに関連付けられた特定のタグ「department=dev」のある AMI のみを使用して、インスタンスを起動できます。最初のステートメントの Condition エレメントはユーザーがこのタグのある AMI を指定している必要があるため、ユーザーがその他の AMI を使用してインスタンスを起動することはできません。また、このポリシーはサブネットとネットワークインターフェイスリソースへのアクセス許可を与えていないため、ユーザーはサブネットに起動することができません。ただし、EC2-Classic に起動することはできます。2 番目のステートメントではワイルドカードを使用してユーザーがインスタンスリソースを作成できるようにしており、ユーザーはキーペア project_keypair およびセキュリティグループ sg-1a2b3c4d を指定する必要があります。ただし、ユーザーはキーペアがなくてもインスタンスを起動できます。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/department": "dev" } } }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/project_keypair", "arn:aws:ec2:region:account:security-group/sg-1a2b3c4d" ] } ] }

また、次のポリシーでは、ユーザーが指定された AMI (ami-9e1670f7 および ami-45cf5c3c) のみを使用してインスタンスを起動できます。ユーザーは他の AMI を使用してインスタンスを起動することはできず (他のステートメントがそのような許可をユーザーに与えている場合はその限りではありません)、ユーザーはインスタンスをサブネットに起動することはできません。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:region::image/ami-9e1670f7", "arn:aws:ec2:region::image/ami-45cf5c3c", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:volume/*", "arn:aws:ec2:region:account:key-pair/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

一方、以下のポリシーは、Amazon が所有するすべての AMI からインスタンスを起動することをユーザーに許可します。最初のステートメントの Condition エレメントは、ec2:Owneramazon であるかどうかをテストします。 (別のステートメントでユーザーに起動するアクセス許可が付与されない限り) ユーザーはその他の AMI を使用してインスタンスを起動することはできません。ユーザーは、インスタンスをサブネットに起動することができます。

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

[b. Instance type]

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

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

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

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

[c. Subnet]

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

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

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

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

例 6. ClassicLink を使用する

ClassicLink で VPC を有効にし、EC2-Classic インスタンスと VPC にリンクできます。ClassicLink が有効な VPC と、VPC にリンクされたすべての EC2-Classic インスタンスを表示することもできます。ec2:EnableVpcClassicLinkec2:DisableVpcClassicLinkec2:AttachClassicLinkVpcec2:DetachClassicLinkVpc の各アクションのリソースレベルのアクセス許可を使用してポリシーを作成し、ユーザーがそれらのアクションを使用できるかどうかを制御できます。リソースレベルのアクセス許可は、ec2:Describe* アクションではサポートされません。

a. ClassicLink を使用する完全なアクセス許可

次のポリシーでは、ClassicLink が有効な VPC とリンクされた EC2-Classic インスタンスを表示するアクセス許可、ClassicLink で VPC を有効化および無効化するアクセス許可、ClassicLink が有効な VPC からインスタンスをリンクおよびリンク解除するアクセス許可をユーザーに付与します。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeClassicLinkInstances", "ec2:DescribeVpcClassicLink", "ec2:EnableVpcClassicLink", "ec2:DisableVpcClassicLink", "ec2:AttachClassicLinkVpc", "ec2:DetachClassicLinkVpc" ], "Resource": "*" } ] }

b. ClassicLink で VPC を有効化および無効化する

次のポリシーでは、特定のタグ「purpose=classiclink」を持つ VPC を ClassicLink で有効化および無効化することをユーザーに許可します。ユーザーは、ClassicLink で他の VPC を有効化または無効化することができません。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:*VpcClassicLink", "Resource": "arn:aws:ec2:region:account:vpc/*", "Condition": { "StringEquals": { "ec2:ResourceTag/purpose":"classiclink" } } } ] }

c. インスタンスをリンクする

次のポリシーでは、インスタンスが m3.large インスタンスタイプの場合に、インスタンスを VPC にのみリンクするアクセス許可をユーザーに付与します。2 番目のステートメントでは、VPC にインスタンスをリンクするのに必要な、VPC およびセキュリティグループリソースを使用することをユーザーに許可します。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:AttachClassicLinkVpc", "Resource": "arn:aws:ec2:region:account:instance/*", "Condition": { "StringEquals": { "ec2:InstanceType":"m3.large" } } }, { "Effect": "Allow", "Action": "ec2:AttachClassicLinkVpc", "Resource": [ "arn:aws:ec2:region:account:vpc/*", "arn:aws:ec2:region:account:security-group/*" ] } ] }

次のポリシーでは、インスタンスを特定の VPC (vpc-1a2b3c4d) にのみリンクするアクセス許可、VPC の特定のセキュリティグループのみインスタンス (sg-1122aabbsg-aabb2233) に関連付けるアクセス許可をユーザーに付与します。ユーザーは、インスタンスを他の VPC にリンクすることはできず、他の VPC のセキュリティグループを指定してリクエスト内のインスタンスに関連付けることはできません。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:AttachClassicLinkVpc", "Resource": [ "arn:aws:ec2:region:account:vpc/vpc-1a2b3c4d", "arn:aws:ec2:region:account:instance/*", "arn:aws:ec2:region:account:security-group/sg-1122aabb", "arn:aws:ec2:region:account:security-group/sg-aabb2233" ] } ] }

d. インスタンスをリンク解除する

次のポリシーでは、インスタンスが「unlink=true」タグを持つ場合にのみ、リンクされた EC2-Classic インスタンスを VPC からリンク解除するアクセス許可をユーザーに付与します。2 番目のステートメントでは、VPC からインスタンスをリンク解除するのに必要な、VPC リソースを使用するアクセス許可をユーザーに付与します。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:DetachClassicLinkVpc", "Resource": [ "arn:aws:ec2:region:account:instance/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/unlink":"true" } } }, { "Effect": "Allow", "Action": "ec2:DetachClassicLinkVpc", "Resource": [ "arn:aws:ec2:region:account:vpc/*" ] } ] }

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

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

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

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

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

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

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

例 8: IAM ロールを使用する

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

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

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssociateIamInstanceProfile", "ec2:ReplaceIamInstanceProfileAssociation", "ec2:DisassociateIamInstanceProfile" ], "Resource": "arn:aws:ec2:region:account:instance/*", "Condition": { "StringEquals": { "ec2:ResourceTag/department":"test" } } }, { "Effect": "Allow", "Action": "ec2:DescribeIamInstanceProfileAssociations", "Resource": "*" }, { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*" } ] }

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

Copy
{ "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::account:role/TestRole-*" } ] }