AWS CDKでIAMのインラインポリシーとサービスロールを作る

AWS CDKでIAMのインラインポリシーとサービスロールを作る:

AppSyncのDataSourceを作るのにサービスロールが必要だったので、覚書。

$ cdk --version 
0.23.0 (build 1d705e7) 


IAMパッケージ

$ @aws-cdk/aws-iam@0.23.0 


ポリシー

だいたいこんな感じになる。

ステートメントをメソッドチェーンでビルダー的に書けるので、この書き方に慣れさえすれば普通に書くより楽かもしれない。

import cdk = require('@aws-cdk/cdk'); 
import IAM = require('@aws-cdk/aws-iam') 
const app = new cdk.App(); 
const stack = new cdk.Stack(app, 'TestStack'); 
 
const statement = new IAM.PolicyStatement() 
        .allow() 
        .addActions( 
          "dynamodb:GetItem", 
          "dynamodb:Query", 
        ) 
        .addResources( 
          "*" 
        ) 
 
const servicePolicy = new IAM.Policy( 
  stack, 
  'AppSyncInlinePolicy', { 
    policyName: 'AppSyncInlinePolicy', 
    statements: [statement] 
  } 
) 


ロール

さっきのポリシーインスタンスをそのまま放り込んでやればOK。

const serviceRole = new IAM.Role(stack, 'AppSyncDynamoDBRole', { 
  assumedBy: new IAM.ServicePrincipal('appsync.amazonaws.com'), 
  path: '/service-role/' 
}) 
serviceRole.attachInlinePolicy(servicePolicy) 


出力

Resources: 
  AppSyncInlinePolicyED30ADB5: 
    Type: AWS::IAM::Policy 
    Properties: 
      PolicyDocument: 
        Statement: 
          - Action: 
              - dynamodb:GetItem 
              - dynamodb:Query 
            Effect: Allow 
            Resource: "*" 
        Version: "2012-10-17" 
      PolicyName: AppSyncInlinePolicy 
      Roles: 
        - Ref: AppSyncDynamoDBRoleBDD57878 
    Metadata: 
      aws:cdk:path: TestStack/AppSyncInlinePolicy/Resource 
  AppSyncDynamoDBRoleBDD57878: 
    Type: AWS::IAM::Role 
    Properties: 
      AssumeRolePolicyDocument: 
        Statement: 
          - Action: sts:AssumeRole 
            Effect: Allow 
            Principal: 
              Service: appsync.amazonaws.com 
        Version: "2012-10-17" 
      Path: /service-role/ 
    Metadata: 
      aws:cdk:path: TestStack/AppSyncDynamoDBRole/Resource 
  CDKMetadata: 
    Type: AWS::CDK::Metadata 
    Properties: 
      Modules: aws-cdk=0.23.0,@aws-cdk/aws-iam=0.23.0,@aws-cdk/cdk=0.23.0,@aws-cdk/cx-api=0.23.0,jsii-runtime=node.js/v10.5.0 


感想

とにかくCloudFormationのプロパティをJSのクラスメソッドで書くのが違和感すごい。

ただしIDEの入力補完や型参照を活かしながら書けば、普通にYAML書くよりコード量が減って楽です。

なお破壊的変更でぶっ壊れることがあるみたいですが、最悪cdk synthでCloudFormationにアウトプットしてCDK使うのやめればいいと思うと気楽ではある。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 22:08:45 RSSフィード2021-06-17 22:00 分まとめ(2089件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)