首页 > 解决方案 > 如何使用 aws CDK 授予对 Elastic beanstalk 的特定/完全访问权限?

问题描述

我创建了 aws 管道,以使用 CDK 打字稿代码将我的 dot net 框架应用程序部署到弹性 beanstalk。

但是在部署步骤中失败并出现以下错误

权限不足 提供的角色没有 elasticbeanstalk:CreateApplicationVersion 权限

我不确定如何使用 aws cdk 分配权限。

我应该如何在下面的代码中添加权限

下面是我的部署阶段代码


const appName = "SampleDotNetMVCWebApp";
const newRole = new iam.Role(this, "Role", {
  assumedBy: new iam.ServicePrincipal("elasticbeanstalk.amazonaws.com")
});

newRole.addToPolicy(
  new iam.PolicyStatement({
    resources: ["*"],
    actions: ["elasticbeanstalk:CreateApplicationVersion"]
  })
);

const app = new elasticbeanstalk.CfnApplication(this, "EBApplication", {
  applicationName: appName
});

const elbEnv = new elasticbeanstalk.CfnEnvironment(this, "Environment", {
  environmentName: "SampleMVCEBEnvironment",
  applicationName: appName,
  platformArn: platform,
  solutionStackName: "64bit Windows Server 2012 R2 v2.5.0 running IIS 8.5"
});

pipeline.addStage({
  stageName: "Deploy",
  actions: [   
    new ElasticBeanStalkDeployAction({
      actionName: "DeployToEB",
      applicationName: appName,
      environmentName: "SampleMVCEBEnvironment",
      input: cdkBuildOutput,
      role: newRole
    })
  ]
});

注意:在上面的代码中,aws 管道操作“ElasticBeanStalkDeployAction”是自定义操作,因为 aws cdk 尚未发布此部署到 eb 操作功能。您可以在此处查看 IAction 实施的问题和代码 https://github.com/aws/aws-cdk/issues/2516

标签: amazon-web-servicesamazon-elastic-beanstalkaws-cdk

解决方案


您需要添加权限ElasticBeanStalkDeployAction才能创建CreateApplicationVersion、使用.addToPolicy

这些策略将使用角色创建,而添加的策略 addToPolicy是使用单独的 CloudFormation 资源添加的(允许绕过可能引入的循环依赖关系)。

   const elasticBeanStalkDeployAction =  new ElasticBeanStalkDeployAction({
      actionName: 'DeployToEB',
      applicationName: appName,
      environmentName: 'SampleMVCEBEnvironment',
      input: cdkBuildOutput 
    })


    elasticBeanStalkDeployAction.addToRolePolicy(new PolicyStatement({
      effect: Effect.ALLOW,
      resources: ['*'],
      actions: ['elasticbeanstalk:*']
    }));

稍后,使用您创建的对象并将其传递给操作:

pipeline.addStage({
  stageName: 'Deploy',
actions: [elasticBeanStalkDeployAction]
});

推荐阅读