AWS CDKでEC2にIAMロールを割り当てる時の覚書

参考になる記事があまりなかったのでまとめました 前提情報 AWS CDKのVersion1.35.0時点のコンテンツです。アップグレードによる変更などで参考にならなくなる可能性もありますのでご了承ください。 やりたいこと […]

広告ここから
広告ここまで

目次

    参考になる記事があまりなかったのでまとめました

    前提情報

    AWS CDKのVersion1.35.0時点のコンテンツです。アップグレードによる変更などで参考にならなくなる可能性もありますのでご了承ください。

    やりたいこと

    AWS CDKで作成したEC2インスタンスにIAMロールを設定したい

    コード

    数が多いので、リソース毎に

    IAM Policy

    import {
        ManagedPolicy, Effect, PolicyStatement
    } from '@aws-cdk/aws-iam'
    import { Stack } from '@aws-cdk/core';
    
    export class IAMPolicyForCloudFront {
        public static create(stack: Stack) {
            const statement = new PolicyStatement({
                effect: Effect.ALLOW,
            })
            statement.addActions(
                "cloudfront:*Invalidation*",
                "cloudfront:*getDistribution*"
            )
            statement.addResources('*')
            const managedPolicy = new ManagedPolicy(
                stack,
                'IAMPolicyForCloudFront',
                {
                    description: "To access CloudFront from WordPress",
                    statements: [
                        statement
                    ]
                }
            )
            return managedPolicy
        }
    }

    IAM Role

    import { Stack } from "@aws-cdk/core";
    import { Role, ServicePrincipal } from "@aws-cdk/aws-iam";
    import { IAMPolicyForCloudFront } from "./CloudFront";
    
    export class EC2InstanceRole {
        public static create(stack: Stack) {
            const role = new Role(
                stack,
                'IAMInstanceRole',
                {
                    managedPolicies: [
                        IAMPolicyForCloudFront.create(stack)
                    ],
                   assumedBy: new ServicePrincipal("ec2.amazonaws.com"),
                   path: '/'
                }
            )
            return role
        }
    }

    EC2 Instance

    import { Stack } from "@aws-cdk/core";
    import { CfnInstanceProfile } from "@aws-cdk/aws-iam";
    import { CfnInstance } from '@aws-cdk/aws-ec2';
    import { EC2InstanceRole } from './Role"
    
    export class InstanceProfile {
        public static create(stack: Stack) {
            const instanceRole = EC2InstanceRole.create(stack)
            const iamInstanceProfile = new CfnInstanceProfile(
                stack,
                'InstanceProfile',
                {
                    path: '/',
                    roles: [instanceRole.roleName]
                }
            )
            const instance = new CfnInstance(
                stack,
                'Instance',
                {
                   iamInstanceProfile: iamInstanceProfile.ref,
                   ...

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark