Developers.IO 2017セッション「Ansibleハンズオン on AWS 」で利用したIAMの設定 #cmdevio2017

こんにちは、いわもんです、ご無沙汰しております。

さて、先日は [DevelopresIO 2017]に多くの方にご参加頂きありがとうございました。 当日は私も「Ansibleハンズオン on AWS」のお手伝い(TA)に立たせていただいておりました。

Ansibleハンズオン on AWS

当日の様子や、資料は下記をご覧ください。

Ansibleハンズオン on AWS #cmdevio2017

Developers.IO 2017セッション「Ansibleハンズオン on AWS 」をお手伝いしました #cmdevio2017

IAMの設定

「Ansibleハンズオン on AWS」では、弊社からハンズオン用のAWSアカウントを参加者の方に用意させて頂きましたが、念のため制限をかけました。 その際のIAMの設定をご覧ください。

やりたい事

  • EC2以外のサービスは利用できない
  • 起動できるインスタンスはt2.small/t2.microのみ
  • EC22へインスタンスプロファイルの割り当てを行いたい

実施内容は以下の通りでした。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "ec2:*",
            "Effect": "Allow",
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": "ec2:RunInstances",
            "Condition": {
                "StringNotEquals": {
                    "ec2:InstanceType": [
                        "t2.micro",
                        "t2.small"
                    ]
                }
            },
            "Resource": "arn:aws:ec2:*:XXXXXXXXXXX:instance/*"
        },
        {
            "Effect": "Deny",
            "Action": "elasticloadbalancing:*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "cloudwatch:*",
            "Resource": "*"
        },
        {
            "Effect": "Deny",
            "Action": "autoscaling:*",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:Get*",
                "iam:List*",
                "iam:PassRole"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "*"
        }
    ]
}

解説

EC2以外のサービスは利用できない

  • "Action": "ec2:*"とする事で、EC2のみ操作が可能となります。
        {
            "Action": "ec2:*",
            "Effect": "Allow",
            "Resource": "*"
        },

起動できるインスタンスはt2.small/t2.microのみ

特定インスタンスタイプのEC2インスタンスが起動できないIAMユーザーを作成する

  • 参考URLでは特定のインスタンス以外を起動するとなっています。
  • StringEqualsStringNotEqualsとする事で、インスタンスタイプの指定が行えます。
  • StringNotEqualsにて指定するには、別途Resourceの指定が必要です
  • "Resource": "arn:aws:ec2:*:XXXXXXXXXX:instance/*"の指定を行いました。
        {
            "Effect": "Deny",
            "Action": "ec2:RunInstances",
            "Condition": {
                "StringNotEquals": {
                    "ec2:InstanceType": [
                        "t2.micro",
                        "t2.small"
                    ]
                }
            },
            "Resource": "arn:aws:ec2:*:XXXXXXXXXX:instance/*"
        },

EC2インスタンスへのIAMRoleの割り当てを行いたい

【Tips】Admin権限を持っていないIAMユーザでIAM Roleを設定するためのポリシー設定

  • 上記を参考に実施しました。
        {
            "Effect": "Allow",
            "Action": [
                "iam:Get*",
                "iam:List*",
                "iam:PassRole"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "*"
        }

まとめ

勉強会や開発環境、デモなど、なんらかの制限を実施した上で、利用者にはある程度自由に触らせたい時などの参考にいただけると幸いです。

お忙しい中、多くの方にご参加いただき、まことにありがとうございました。

今日のわさび様

すしざんまい

19667786_1460729423965080_8571472094902105650_o