HAPPY HACKING Oouchi's BLOG

PSE(ポンコツエンジニア)の技術ブログ

LambdaからIAMロールを作成してポリシーをアタッチする

f:id:ooooouchi:20200517111121p:plain

Lambda関数

import { IAM } from "aws-sdk";
import AssumeRolePolicyDocument from "./assume-role-policy.json";

const iam = new IAM();
export const handler = (event: any) => {
  const roleParam: IAM.CreateRoleRequest = {
    AssumeRolePolicyDocument: JSON.stringify(AssumeRolePolicyDocument),
    Path: "/",
    RoleName: "roleName",
  };

  const res = iam.createRole(roleParam, function (err, data) {
    if (err) {
      return err;
    } else {
      const policyParam = {
        PolicyArn: "arn:aws:iam::aws:<policy>",
        RoleName: data.Role.RoleName,
      };
      iam.attachRolePolicy(policyParam, function (err, data) {
        if (err) {
          return err;
        } else {
          return data;
        }
      });
    }
  });
  return res;
};

AssumeRolePolicyDocument.json

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "<信頼元>": "<信頼元>"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

Lambda関数のポリシーはIAMFullAccessをアタッチしています。

お詫び

執筆用に書き直しているのでうまく動作しない箇所があるかもしれませんがご了承ください。