この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
コンニチハ、千葉です。
困っていた内容
特定のサブネットで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/*"
]
}
]
}
以上、千葉がお送りしました。