EC2を起動できるサブネットを制限する方法
コンニチハ、千葉です。
困っていた内容
特定のサブネットでEC2を起動できるように権限を付与したいのですが、どうすればいいでしょうか?
解決方法
要件にあった IAM ポリシーを作成し、アタッチします。IAMポリシーは、2パターン利用できます。
- 特定のサブネットにタグを付与し、IAMポリシーでタグが付与されていない場合は操作を拒否する
- IAMポリシーにて起動するサブネットを直接指定する
1. 特定のサブネットにタグを付与し、IAMポリシーでタグが付与されていない場合は操作を拒否する
開発環境や本番環境などのタグをベースに、EC2が起動できるサブネットを制限します。 許可するサブネットが増えた場合は、追加のサブネットに対しタグを付与します。
- IAMに対しAmazonEC2FullAccessを付与
- サブネットに対しタグを付与。key=restrict, value=development
- 以下のカスタムポリシーを付与
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:elasticGpu/*", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*::snapshot/*", "arn:aws:ec2:*:*:launch-template/*", "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*:*:security-group/*", "arn:aws:ec2:*:*:placement-group/*", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*::image/*" ] }, { "Sid": "VisualEditor1", "Effect": "Deny", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:subnet/*" ], "Condition": { "StringNotEquals": { "ec2:ResourceTag/restrict": "development" } } } ] }
2. IAMポリシーにて起動するサブネットを直接指定する
IAMポリシーに、EC2が起動できるサブネットIDを指定することで制限します。
subnet-subnet-id
を特定のサブネットIDに変更します。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:Describe*", "ec2:GetConsole*" ], "Resource": "*" }, { "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": [ "arn:aws:ec2:*:*:subnet/subnet-subnet-id", "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*", "arn:aws:ec2:*::image/ami-*", "arn:aws:ec2:*:*:key-pair/*", "arn:aws:ec2:*:*:security-group/*" ] } ] }
以上、千葉がお送りしました。