デフォルトでは、IAM ロールには、VPC リソースを作成または変更するアクセス許可はありません。AWS Management Console、AWS CLI、または AWS API を使用してタスクを実行することもできません。IAM 管理者は、ロールに必要な、指定されたリソースで特定の API オペレーションを実行するアクセス許可をロールに付与する IAM ポリシーを作成する必要があります。続いて、管理者はそれらのアクセス許可が必要な IAM ロールに、そのポリシーをアタッチします。
これらサンプルの、JSON ポリシードキュメントを使用して、IAM アイデンティティベースのポリシーを作成する方法については、「IAM ユーザーガイド」の「IAM ポリシーの作成 (コンソール)」を参照してください。
内容
ポリシーに関するベストプラクティス
ID ベースのポリシーは、ユーザーのアカウント内で誰かが Amazon VPC リソースを作成、アクセス、または削除できるどうかを決定します。これらのアクションを実行すると、AWS アカウントに料金が発生する可能性があります。アイデンティティベースポリシーを作成したり編集したりする際には、以下のガイドラインと推奨事項に従ってください:
-
AWS マネージドポリシーを使用して開始し、最小特権の許可に移行する – ユーザーとワークロードへの許可の付与を開始するには、多くの一般的なユースケースのために許可を付与する AWS マネージドポリシーを使用します。これらは AWS アカウントで使用できます。ユースケース別に AWS カスタマーマネージドポリシーを定義して、マネージドポリシーを絞り込むことをお勧めします。詳細については、「IAM ユーザーガイド」の「AWS マネージドポリシー」または「ジョブ機能の AWS マネージドポリシー」を参照してください。
-
最小特権を適用する – IAM ポリシーで許可を設定する場合は、タスクの実行に必要な許可のみを付与します。これを行うには、特定の条件下で特定のリソースに対して実行できるアクションを定義します。これは、最小特権アクセス許可とも呼ばれています。IAM を使用して許可を適用する方法の詳細については、「IAM ユーザーガイド」の「IAM でのポリシーとアクセス許可」を参照してください。
-
IAM ポリシーで条件を使用してアクセスをさらに制限する - ポリシーに条件を追加して、アクションやリソースへのアクセスを制限できます。例えば、ポリシー条件を記述して、すべてのリクエストを SSL を使用して送信するように指定できます。また、AWS CloudFormation などの特定の AWS のサービス を介して使用する場合、条件を使用してサービスアクションへのアクセスを許可することもできます。詳細については、「IAM ユーザーガイド」の「IAM JSON ポリシー要素:条件」を参照してください。
-
IAM Access Analyzer を使用して IAM ポリシーを検証し、安全で機能的な権限を確保する - IAM Access Analyzer は、新規および既存のポリシーを検証して、ポリシーが IAM ポリシー言語 (JSON) および IAM のベストプラクティスに準拠するようにします。IAM アクセスアナライザーは 100 を超えるポリシーチェックと実用的な推奨事項を提供し、安全で機能的なポリシーの作成をサポートします。詳細については、「IAM ユーザーガイド」の「IAM Access Analyzer でポリシーを検証する」を参照してください。
-
多要素認証 (MFA) を要求する – AWS アカウントで IAM ユーザーまたはルートユーザーを要求するシナリオがある場合は、セキュリティを強化するために MFA をオンにします。API オペレーションが呼び出されるときに MFA を必須にするには、ポリシーに MFA 条件を追加します。詳細については、「IAM ユーザーガイド」の「MFA を使用した安全な API アクセス」を参照してください。
IAM でのベストプラクティスの詳細については、IAM ユーザーガイドの IAM でのセキュリティのベストプラクティスを参照してください。
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 リソースを制御することもできます。例えば、次のポリシーでは、タグ 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
"
}
}
}
]
}
セキュリティグループの管理
次のポリシーでは、ロールがセキュリティグループを管理することを許可します。1 番目のステートメントでは、タグ Stack=test
の付いたセキュリティグループを削除したり、タグ Stack=test
の付いたセキュリティグループのインバウンドおよびアウトバウンドのルールを管理することをロールに許可します。2 番目のステートメントでは、ロールが作成したセキュリティグループにタグ Stack=Test
を付ける必要があります。3 番目のステートメントは、セキュリティグループの作成時に、タグを作成することをロールに許可します。4 番目のステートメントでは、すべてのセキュリティグループとセキュリティグループのルールを表示することをロールに許可します。5 番目のステートメントは、VPC にセキュリティグループを作成することをロールに許可します。
注記
AWS CloudFormation サービスでは、このポリシーを使用して、必須タグを含むセキュリティグループを作成することはできません。タグを必要とする ec2:CreateSecurityGroup
アクションの条件を削除すると、このポリシーが機能します。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RevokeSecurityGroupIngress",
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:UpdateSecurityGroupRuleDescriptionsEgress",
"ec2:RevokeSecurityGroupEgress",
"ec2:DeleteSecurityGroup",
"ec2:ModifySecurityGroupRules",
"ec2:UpdateSecurityGroupRuleDescriptionsIngress"
],
"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"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DescribeSecurityGroupRules",
"ec2:DescribeVpcs",
"ec2:DescribeSecurityGroups"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "ec2:CreateSecurityGroup",
"Resource": "arn:aws:ec2:*:*:vpc/*"
}
]
}
インスタンスに関連付けられたセキュリティグループをロールが変更できるようにするには、ポリシーに 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": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:ModifySecurityGroupRules"
],
"Resource": "arn:aws:ec2:region
:account-id
:security-group-rule/*"
}
]
}
特定のサブネット内にインスタンスを起動する
以下のポリシーは、特定のサブネット内にインスタンスを起動し、リクエストで特定のセキュリティグループを使用するアクセス許可をロールに付与します。このポリシーは、サブネットの 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/*"
]
}
]
}
VPC とサブネットへのパブリックアクセスをブロックする
次のポリシー例は、VPC ブロックパブリックアクセス (BPA) 機能を使用して VPC およびサブネット内のリソースに対するパブリックアクセスをブロックするための許可をロールに付与します。
例 1 - VPC BPA アカウント全体の設定と VPC BPA の除外に対する読み取り専用アクセスを許可します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VPCBPAReadOnlyAccess",
"Action": [
"ec2:DescribeVpcBlockPublicAccessOptions",
"ec2:DescribeVpcBlockPublicAccessExclusions"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
例 2 - VPC BPA アカウント全体の設定と VPC BPA の除外に対する読み取りおよび書き込みのフルアクセスを許可します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VPCBPAFullAccess",
"Action": [
"ec2:DescribeVpcBlockPublicAccessOptions",
"ec2:DescribeVpcBlockPublicAccessExclusions",
"ec2:ModifyVpcBlockPublicAccessOptions",
"ec2:CreateVpcBlockPublicAccessExclusion",
"ec2:ModifyVpcBlockPublicAccessExclusion",
"ec2:DeleteVpcBlockPublicAccessExclusion"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
例 3 - VPC BPA の設定の変更と除外の作成を除くすべての EC2 API に対するアクセスを許可します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "EC2FullAccess"
"Action": [
"ec2:*",
],
"Effect": "Allow",
"Resource": "*"
},
{
"Sid": "VPCBPAPartialAccess",
"Action": [
"ec2:ModifyVpcBlockPublicAccessOptions",
"ec2:CreateVpcBlockPublicAccessExclusion"
],
"Effect": "Deny",
"Resource": "*"
}
]
}
その他の Amazon VPC ポリシーの例
Amazon VPC に関連するその他の IAM ポリシーの例については、次のドキュメントを参照してください。