Amazon VPC ポリシーの例
デフォルトでは、IAM ユーザーおよびロールには、VPC リソースを作成または変更するアクセス許可はありません。また、AWS Management Console や AWS CLI、AWS API を使用してタスクを実行することもできません。IAM 管理者は、ユーザーとロールに必要な、指定されたリソースで特定の API オペレーションを実行する許可をユーザーとロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらの許可が必要な IAM ユーザーまたはグループにそのポリシーを添付します。
JSON ポリシードキュメントのこれらの例を使用して、IAM アイデンティティベースのポリシーを作成する方法については、IAM ユーザーガイドの「JSON タブでのポリシーの作成」を参照してください。
目次
ポリシーのベストプラクティス
ID ベースのポリシーは非常に強力です。アカウント内で、Amazon VPC リソースを作成、アクセス、または削除できるかどうかを決定します。これらのアクションを実行すると、AWS アカウント に追加料金が発生する可能性があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください。
-
AWS 管理ポリシーを使用して開始する – Amazon VPC の使用をすばやく開始するには、AWS 管理ポリシーを使用して、従業員に必要なアクセス許可を付与します。これらのポリシーはアカウントですでに有効になっており、 によって管理および更新されていますAWS 詳細については、「IAM ユーザーガイド」の「AWS マネージドポリシーを使用した許可の使用スタート」を参照してください。
-
最小特権を付与する - カスタムポリシーを作成するときは、タスクの実行に必要な許可のみを付与します。最小限の許可からスタートし、必要に応じて追加の許可を付与します。この方法は、寛容過ぎる許可から始めて、後から厳しくしようとするよりも安全です。詳細については、「IAM ユーザーガイド」の「最小特権を認める」を参照してください。
-
機密性の高いオペレーションに MFA を有効にする - 追加セキュリティとして、機密性の高いリソースまたは API オペレーションにアクセスするために IAM ユーザーに対して、多要素認証 (MFA) の使用を要求します。詳細については、「IAM ユーザーガイド」の「AWS での多要素認証 (MFA) の使用」を参照してください。
-
追加のセキュリティとしてポリシー条件を使用する - 実行可能な範囲内で、アイデンティティベースのポリシーがリソースへのアクセスを許可する条件を定義します。例えば、あるリクエストの送信が許可される IP アドレスの範囲を指定するための条件を記述できます。指定された日付または時間範囲内でのみリクエストを許可する条件を書くことも、SSL や MFA の使用を要求することもできます。詳細については、IAM ユーザーガイドの「IAM JSON ポリシー要素: 条件」を参照してください。
Amazon VPC コンソールを使用する
Amazon VPC コンソールにアクセスするには、一連の最小限のアクセス許可が必要です。これらのアクセス許可により、AWS アカウントの Amazon VPC リソースの詳細をリストおよび表示できます。最小限必要なアクセス許可よりも制限されたアイデンティティベースのポリシーを作成すると、そのポリシーをアタッチしたエンティティ (IAM ユーザーまたはロール) に対してはコンソールが意図したとおりに機能しません。
次のポリシーは、VPC コンソールでリソースを一覧表示するアクセス許可をユーザーに付与しますが、リソースを作成、更新、削除することはできません。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:DescribeAccountAttributes", "ec2:DescribeAddresses", "ec2:DescribeAvailabilityZones", "ec2:DescribeClassicLinkInstances", "ec2:DescribeClientVpnEndpoints", "ec2:DescribeCustomerGateways", "ec2:DescribeDhcpOptions", "ec2:DescribeEgressOnlyInternetGateways", "ec2:DescribeFlowLogs", "ec2:DescribeInternetGateways", "ec2:DescribeManagedPrefixLists", "ec2:DescribeMovingAddresses", "ec2:DescribeNatGateways", "ec2:DescribeNetworkAcls", "ec2:DescribeNetworkInterfaceAttribute", "ec2:DescribeNetworkInterfacePermissions", "ec2:DescribeNetworkInterfaces", "ec2:DescribePrefixLists", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroupReferences", "ec2:DescribeSecurityGroups", "ec2:DescribeSecurityGroupRules", "ec2:DescribeStaleSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeTags", "ec2:DescribeTrafficMirrorFilters", "ec2:DescribeTrafficMirrorSessions", "ec2:DescribeTrafficMirrorTargets", "ec2:DescribeTransitGateways", "ec2:DescribeTransitGatewayVpcAttachments", "ec2:DescribeTransitGatewayRouteTables", "ec2:DescribeVpcAttribute", "ec2:DescribeVpcClassicLink", "ec2:DescribeVpcClassicLinkDnsSupport", "ec2:DescribeVpcEndpoints", "ec2:DescribeVpcEndpointConnectionNotifications", "ec2:DescribeVpcEndpointConnections", "ec2:DescribeVpcEndpointServiceConfigurations", "ec2:DescribeVpcEndpointServicePermissions", "ec2:DescribeVpcEndpointServices", "ec2:DescribeVpcPeeringConnections", "ec2:DescribeVpcs", "ec2:DescribeVpnConnections", "ec2:DescribeVpnGateways", "ec2:GetManagedPrefixListAssociations", "ec2:GetManagedPrefixListEntries" ], "Resource": "*" } ] }
AWS CLI または AWS API のみを呼び出すユーザーには、最小限のコンソールアクセス許可を付与する必要はありません。代わりに、これらのユーザーに対して、実行する必要がある API オペレーションと一致するアクションにのみアクセスを許可します。
パブリックサブネットを持つ VPC を作成する
次の例では、ユーザーが VPC、サブネット、ルートテーブル、およびインターネットゲートウェイを作成できるようにします。ユーザーは、インターネットゲートウェイを VPC にアタッチし、ルートテーブルにルートを作成することもできます。ec2:ModifyVpcAttribute
アクションにより、ユーザーは、VPC 内で起動される各インスタンスが DNS ホスト名を受け取ることができるように、VPC の DNS ホスト名を有効にできます。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:CreateVpc", "ec2:CreateSubnet", "ec2:DescribeAvailabilityZones", "ec2:CreateRouteTable", "ec2:CreateRoute", "ec2:CreateInternetGateway", "ec2:AttachInternetGateway", "ec2:AssociateRouteTable", "ec2:ModifyVpcAttribute" ], "Resource": "*" } ] }
前述のポリシーにより、ユーザーは、Amazon VPC コンソールで最初の VPC ウィザード設定オプションを使用して VPC を作成することもできます。VPC ウィザードを表示するには、ユーザーに ec2:DescribeVpcEndpointServices
を使用するアクセス許可も必要です。これにより、VPC ウィザードの VPC エンドポイントセクションが正しく読み込まれます。
VPC リソースの変更と削除
ユーザーが変更または削除できる VPC リソースを制御することもできます。たとえば、次のポリシーでは、タグ Purpose=Test
を持つルートテーブルの操作と削除をユーザーに許可します。また、このポリシーでは、ユーザーがタグ Purpose=Test
を持つインターネットゲートウェイのみを削除できることを指定します。ユーザーは、このタグを持たないルートテーブルまたはインターネットゲートウェイを操作できません。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:DeleteInternetGateway", "Resource": "arn:aws:ec2:*:*:internet-gateway/*", "Condition": { "StringEquals": { "ec2:ResourceTag/
Purpose
": "Test
" } } }, { "Effect": "Allow", "Action": [ "ec2:DeleteRouteTable", "ec2:CreateRoute", "ec2:ReplaceRoute", "ec2:DeleteRoute" ], "Resource": "arn:aws:ec2:*:*:route-table/*", "Condition": { "StringEquals": { "ec2:ResourceTag/Purpose
": "Test
" } } } ] }
セキュリティグループの管理
次のポリシーでは、すべてのセキュリティグループとセキュリティグループのルールを表示できます。2 番目のステートメントでは、ユーザーがタグ Stack=test
の付いたセキュリティグループを削除したり、タグ Stack=test
の付いたセキュリティグループのインバウンドおよびアウトバウンドのルールを管理することを許可します。3 番目のステートメントでは、ユーザーが作成したセキュリティグループにタグ Stack=Test
を付ける必要があります。4 番目のステートメントは、セキュリティグループの作成時に、タグを作成することをユーザーに許可します。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeSecurityGroups", "ec2:DescribeSecurityGroupRules", "ec2:DescribeVpcs" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:RevokeSecurityGroupIngress", "ec2:UpdateSecurityGroupRuleDescriptionsIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupEgress", "ec2:UpdateSecurityGroupRuleDescriptionsEgress", "ec2:ModifySecurityGroupRules", "ec2:DeleteSecurityGroup" ], "Resource": "arn:aws:ec2:*:*:security-group/*", "Condition":{ "StringEquals": { "ec2:ResourceTag/
Stack
": "test
" } } }, { "Effect": "Allow", "Action": [ "ec2:CreateSecurityGroup" ], "Resource": "arn:aws:ec2:*:*:security-group/*", "Condition": { "StringEquals": { "aws:RequestTag/Stack
": "test
" }, "ForAllValues:StringEquals": { "aws:TagKeys": ["Stack
"] } } }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:*:*:security-group/*", "Condition": { "StringEquals": { "ec2:CreateAction" : "CreateSecurityGroup" } } } ] }
インスタンスに関連付けられたセキュリティグループをユーザーが変更できるようにするには、ポリシーに ec2:ModifyInstanceAttribute
アクションを追加します。
ユーザーがネットワークインターフェイスのセキュリティグループを変更できるようにするには、ポリシーに ec2:ModifyNetworkInterfaceAttribute
アクションを追加します。
セキュリティグループルールの管理
次のポリシーは、セキュリティグループとセキュリティグループルールの表示、特定の VPC のセキュリティグループのインバウンドおよびアウトバウンドのルールの追加と削除、および指定された VPC のルールの説明を変更するアクセス許可をユーザーに付与します。1 番目のステートメントでは、ec2:Vpc
条件キーを使用して、特定の VPC に許可をスコープしています。
2 番目のステートメントは、すべてのセキュリティグループ、セキュリティグループルール、タグについて説明する許可をユーザーに与えます。これにより、ユーザーはセキュリティグループルールを表示して変更できるようになります。
{ "Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action": [ "ec2:AuthorizeSecurityGroupIngress", "ec2:RevokeSecurityGroupIngress", "ec2:UpdateSecurityGroupRuleDescriptionsIngress", "ec2:AuthorizeSecurityGroupEgress", "ec2:RevokeSecurityGroupEgress", "ec2:UpdateSecurityGroupRuleDescriptionsEgress", "ec2:ModifySecurityGroupRules" ], "Resource": "arn:aws:ec2:
region
:account-id
:security-group/*", "Condition": { "ArnEquals": { "ec2:Vpc": "arn:aws:ec2:region
:account-id
:vpc/vpc-id
" } } }, { "Effect": "Allow", "Action": [ "ec2:DescribeSecurityGroups", "ec2:DescribeSecurityGroupRules", "ec2:DescribeTags" ], "Resource": "*" } ] }
特定のサブネット内にインスタンスを起動する
以下のポリシーは、特定のサブネット内にインスタンスを起動し、リクエストで特定のセキュリティグループを使用する許可をユーザーに与えます。このポリシーは、サブネットの ARN およびセキュリティグループの ARN を指定することで許可を与えます。ユーザーが別のサブネット内でまたは別のセキュリティグループを使用してインスタンスを起動しようとすると、リクエストは失敗します (ただし、別のポリシーまたは別の定義文で、ユーザーにその許可が与えられている場合を除きます)。
このポリシーは、ネットワークインターフェイスリソースを使用する許可も与えます。サブネット内に起動すると、RunInstances
リクエストは、デフォルトでプライマリネットワークインターフェイスを作成するので、ユーザーには、インスタンスを起動するときにこのリソースを作成する許可が必要です。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:
region
::image/ami-*", "arn:aws:ec2:region
:account
:instance/*", "arn:aws:ec2:region
:account
:subnet/subnet-id
", "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/sg-id
" ] } ] }
特定の VPC 内にインスタンスを起動する
以下のポリシーは、特定の VPC 内の任意のサブネットにインスタンスを起動する許可をユーザーに与えます。このポリシーは、条件キー (ec2:Vpc
) をサブネットリソースに適用することで許可を与えます。
また、このポリシーは、タグ「department=dev
」のある AMI のみを使用してインスタンスを起動する許可をユーザーに与えます。
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "arn:aws:ec2:
region
:account-id
:subnet/*", "Condition": { "ArnEquals": { "ec2:Vpc": "arn:aws:ec2:region
:account-id
:vpc/vpc-id
" } } }, { "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
:network-interface/*", "arn:aws:ec2:region
:account
:key-pair/*", "arn:aws:ec2:region
:account
:security-group/*" ] } ] }
その他の Amazon VPC ポリシーの例
Amazon VPC に関連するその他の IAM ポリシーの例については、次のドキュメントを参照してください。