メニュー
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: インスタンスの使用

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

次のポリシーでは、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": "*" } ] }

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

次のポリシーでは、すべてのインスタンスを表示し、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}" } } } ] }

ボリュームの作成

次のポリシーでは、ユーザーが CreateVolume API アクションを使用することができます。ユーザーは、ボリュームが暗号化されていて、ボリューム サイズが 20 GiB 未満の場合にのみボリュームの作成を許可されます。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateVolume" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition":{ "NumericLessThan": { "ec2:VolumeSize" : "20" }, "Bool":{ "ec2:Encrypted" : "true" } } } ] }

タグ付きのボリュームの作成

次のポリシーには、タグ costcenter=115 および stack=prod を使用して作成したすべてのボリュームへのタグ付けをユーザーに求める aws:RequestTag 条件キーが含まれています。aws:TagKeys 条件キーは、ForAllValues 修飾子を使用し、キー costcenter および stack のみがリクエストで許可されることを指定します (他のタグは指定できません)。ユーザーがこれらのタグを渡さないか、タグをまったく指定しない場合、リクエストは失敗します。

タグを適用するリソース作成アクションでは、CreateTags アクションを使用するアクセス権限も持っていることが求められます。2 番目のステートメントは、ec2:CreateAction 条件キーを使用して、ユーザーが CreateVolume のコンテキストでみタグを使用できるようにします。ユーザーは、既存のボリュームにも他のリソースにもタグ付けできません。詳細については、「Tagging に関するリソースレベルのアクセス権限」を参照してください。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateTaggedVolumes", "Effect": "Allow", "Action": "ec2:CreateVolume", "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "aws:RequestTag/costcenter": "115", "aws:RequestTag/stack": "prod" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["costcenter","stack"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:us-east-1:123456789012:volume/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "CreateVolume" } } } ] }

次のポリシーでは、ユーザーがタグを指定しなくてもボリュームを作成することができます。CreateTags アクションは、タグが CreateVolume リクエストで指定されている場合にのみ評価されます。ユーザーがタグを指定する場合、purpose=test タグを指定する必要があります。リクエストでは他のタグは許可されません。

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

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

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

インスタンスの起動に必要なリソースレベルのアクセス許可の詳細については、「RunInstances に関するリソースレベルのアクセス許可」を参照してください。

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

AMI

次のポリシーでは、指定された 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/*", "arn:aws:ec2:region:account:subnet/*", "arn:aws:ec2:region:account:network-interface/*" ] } ] }

一方、以下のポリシーは、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/*" ] } ] }

[EC2-Classic のみ] 次のポリシーでは、インスタンスに関連付けられた特定のタグ (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" ] } ] }

インスタンスタイプ

次のポリシーにより、ユーザーは 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/*" ] } ] }

サブネット

次のポリシーにより、ユーザーは指定したサブネット 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/*" ] } ] }

EBS ボリューム3

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

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

タグの適用

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

詳細については、「Tagging に関するリソースレベルのアクセス権限」を参照してください。

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

次のポリシーには、environment=production および purpose=webserver タグを使用して RunInstances により作成されたすべてのインスタンスおよびボリュームへのタグ付けをユーザーに求める aws:RequestTag 条件キーが含まれています。aws:TagKeys 条件キーは、ForAllValues 修飾子を使用し、キー environment および purpose のみがリクエストで許可されることを指定します (他のタグは指定できません)。リクエストでタグが指定されていない場合、リクエストに失敗します。

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

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

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

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

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

Elastic GPU のアタッチ

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

ec2:ElasticGpuType 条件キーは、ForAnyValue 修飾子を使用し、elastic GPU タイプ eg1.medium および eg1.large のみがリクエストで許可されることを指定します。

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

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

次のポリシーでは、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": "*" } ] }

次のポリシーでは、特定のタグ「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" } } } ] }

次のポリシーでは、インスタンスが 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" ] } ] }

次のポリシーでは、インスタンスが「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. リソースをタグ付けする

次のポリシーでは、タグにキー environment および値 production が含まれている場合のみ、ユーザーが CreateTags アクションを使用してインスタンスにタグを適用できます。ForAllValues 修飾子は、リクエストでキー environment のみが許可される (他のタグが許可されない) ことを示すため、aws:TagKeys 条件キーとともに使用されます。ユーザーは、他のリソースタイプをタグ付けすることができません。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:instance/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": "production" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "environment" ] } } } ] }

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

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:region:account:*/*", "Condition": { "StringEquals": { "aws:RequestTag/environment": ["test","prod"], "ec2:ResourceTag/owner": "${aws:username}" } } } ] }

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

注記

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

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

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

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

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

10: ルートテーブルの操作

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

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

11: 特定のインスタンスが他の AWS サービスでリソースを表示できるようにする

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

ec2:SourceInstanceARN は AWS 全体を対象とする条件キーであるため、Amazon EC2 だけではなく他のサービスアクションにも使用できます。

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