LoginSignup
14
4

More than 3 years have passed since last update.

IAMポリシーによるEC2インスタンス操作制限

Posted at

はじめに

IAMポリシーによるEC2インスタンスの操作制限について調べた内容の記事です。

IAMポリシーについて

IAMポリシーはAWSリソースに対する操作権限を記述したもので、IAMユーザー・IAMグループ・IAMロールに対しアタッチすることで操作権限を制御することができます。ポリシーはjson形式で記述されます。

操作制限の具体例

今回はIAMポリシーによる操作制御の具体例として、EC2インスタンスに対して以下の操作を許可するために必要なポリシーを調べました。各操作はマネージメントコンソールから行うことを想定しています。

  • EC2インスタンスが見れるだけ
  • 既存のEC2インスタンスの起動・停止を許可
  • EC2インスタンスの作成を許可
  • 既存のIAMロールをアタッチしたEC2インスタンスの作成を許可

EC2インスタンスが見れるだけ

AWS管理ポリシーの arn:aws:iam::aws:policy/ReadOnlyAccess のみをアタッチします。
これはAWSリソースに対する読み取りアクセスのみを許可するポリシーです。

既存のEC2インスタンスの起動・停止を許可

既存のEC2インスタンスの起動・停止を許可するポリシーです。
許可する対象としてEC2インスタンスに自身のユーザー名のOwnerタグがつけられているものに限定しています。
ポリシーは以下の2つの記述からなります。

  • EC2インスタンスの起動・停止の許可
  • EC2インスタンスの情報表示の許可

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": "arn:aws:ec2:*:*:instance/*",
            "Condition": {
                "StringEquals": {
                    "ec2:ResourceTag/Owner": "${aws:username}"
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeInstances",
            "Resource": "*"
        }
    ]
}

EC2インスタンスの作成を許可

EC2インスタンスの作成を許可するポリシーです。
以下の2つの記述からなります。

  • EC2インスタンスの情報表示・コンソール出力の許可
  • EC2インスタンスの作成の許可

ちなみにこのポリシー下では既存のIAMロールをEC2インスタンスにアタッチすることができません。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*",
                "ec2:GetConsole*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*:*:subnet/*",
                "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/*"
            ]
        }
    ]
}

既存のIAMロールをアタッチしたEC2インスタンスの作成を許可

既存のIAMロールをアタッチしたEC2インスタンスの作成を許可するポリシーです。
1つ上で説明したポリシーに加え以下の3つのアクションを許可しています。

  • iam:Get*
  • iam:List*
  • iam:PassRole

上の2つはIAMの情報取得のための権限です。
iam:PassRoleはサービスにロールを渡す権限で、EC2インスタンスにIAMロールを設定する際に必要となります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*",
                "ec2:GetConsole*"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": [
                "arn:aws:ec2:*:*:subnet/*",
                "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/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:Get*",
                "iam:List*",
                "iam:PassRole"
            ],
            "Resource": "*"
        }
    ]
}

参考

14
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
4