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,
...