2

AWS CodeStarプロジェクトのCloudFormationテンプレートでラムダ関数のIAMロールを変更するにはどうすればよいですか?CodeStarプロジェクトのCloudFormationテンプレートでラムダのIAM役割を変更しますか?

私はAWS CodeStarプロジェクト(Webサービス、Lambdaベース、Node.js)を作成しました。デフォルトでは、AWS CodeStarは以下のCloudFormation生成します

AWSTemplateFormatVersion: 2010-09-09 
Transform: 
- AWS::Serverless-2016-10-31 
- AWS::CodeStar 

Parameters: 
    ProjectId: 
    Type: String 
    Description: AWS CodeStar projectID used to associate new resources to team members 

Resources: 
    HelloWorld: 
    Type: AWS::Serverless::Function 
    Properties: 
     Handler: index.handler 
     Runtime: nodejs4.3 
     Role: 
     Fn::ImportValue: 
      !Join ['-', [!Ref 'ProjectId', !Ref 'AWS::Region', 'LambdaTrustRole']] 
     Events: 
     GetEvent: 
      Type: Api 
      Properties: 
      Path:/
      Method: get 
     PostEvent: 
      Type: Api 
      Properties: 
      Path:/
      Method: post 

を今、私は他のAWSのリソースにアクセスするためにラムダ関数のポリシーを追加する必要があるため、自分の役割をこの役割を交換したいと思います。私は後でラムダの呼び出しをトリガするために、スケジューラが追加されますので、同時に私はまた、APIゲートウェイを削除した:私はコミットするとき、しかし

AWSTemplateFormatVersion: 2010-09-09 
Transform: 
- AWS::Serverless-2016-10-31 
- AWS::CodeStar 

Parameters: 
    ProjectId: 
    Type: String 
    Description: AWS CodeStar projectID used to associate new resources to team members 

Resources: 
    HelloWorld: 
    Type: AWS::Serverless::Function 
    Properties: 
     Handler: index.handler 
     Runtime: nodejs4.3 
     Role: !Ref HelloWorldLambdaRole 

    HelloWorldLambdaRole: 
    Type: AWS::IAM::Role 
    Properties: 
     AssumeRolePolicyDocument: 
     Version: 2012-10-17 
     Statement: 
      - Effect: Allow 
      Principal: 
       Service: 
       - lambda.amazonaws.com 
      Action: 
       - sts:AssumeRole 
     ManagedPolicyArns: 
     - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole 

をし、これらの変更をプッシュし、AWS CodePipelineはCloudFormationテンプレートの更新に失敗します:

CREATE_FAILED AWS::IAM::Role EchoLambdaRole API: iam:CreateRole User: arn:aws:sts::[accountId]:assumed-role/CodeStarWorker-[projectId]-CloudFormation/AWSCloudFormation is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::[accountId]:role/awscodestar-[projectId]-lambda-HelloWorldLambdaRole-ABCDEF123456 

は、このフィードバックに基づいて、私はCodeStarWorker-[projectId]-CloudFormation/AWSCloudFormation役割がIAMロールを作成することが承認されていないと結論付けています。しかし、この役割は私のCloudFormationテンプレートから隠されています。私はそれがCodeStarによって自動的にセットアップされるものであると理解しています。 AWSアカウントの管理者として、関連するポリシーを編集するだけで済みますが、IMHOはこの問題を解決する方法ではありません。


編集:

私は自分のアカウントでIAMの設定を確認しています。 aws-codestar-service-roleは(他の文の中で、詳細については、リンクを参照)が作成されていて、それが次の文を持っているAWSCodeStarServiceRoleポリシーに関連付けられている:

{ 
    "Sid": "ProjectWorkerRoles", 
    "Effect": "Allow", 
    "Action": [ 
    "iam:AttachRolePolicy", 
    "iam:CreateRole", 
    "iam:DeleteRole", 
    "iam:DeleteRolePolicy", 
    "iam:DetachRolePolicy", 
    "iam:GetRole", 
    "iam:PassRole", 
    "iam:PutRolePolicy", 
    "iam:SetDefaultPolicyVersion", 
    "iam:CreatePolicy", 
    "iam:DeletePolicy", 
    "iam:AddRoleToInstanceProfile", 
    "iam:CreateInstanceProfile", 
    "iam:DeleteInstanceProfile", 
    "iam:RemoveRoleFromInstanceProfile" 
    ], 
    "Resource": [ 
    "arn:aws:iam::*:role/CodeStarWorker*", 
    "arn:aws:iam::*:policy/CodeStarWorker*", 
    "arn:aws:iam::*:instance-profile/awscodestar-*" 
    ] 
}, 

CodeStarWorkerCloudFormationRolePolicyという名前のインラインポリシーを持っているCodeStarWorker-[projectId]-CloudFormation役割もあり、次の構成で:私はプロジェクトを作成しているので

{ 
    "Statement": [ 
     { 
      "Action": [ 
       "s3:PutObject", 
       "s3:GetObject", 
       "s3:GetObjectVersion" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::aws-chargeodestar-eu-west-1-[accountId]-[projectId]-pipeline", 
       "arn:aws:s3:::aws-codestar-eu-west-1-[accountId]-[projectId]-pipeline/*" 
      ], 
      "Effect": "Allow" 
     }, 
     { 
      "Action": [ 
       "codestar:SyncResources", 
       "lambda:CreateFunction", 
       "lambda:DeleteFunction", 
       "lambda:AddPermission", 
       "lambda:UpdateFunction", 
       "lambda:UpdateFunctionCode", 
       "lambda:GetFunctionConfiguration", 
       "lambda:UpdateFunctionConfiguration", 
       "lambda:RemovePermission", 
       "apigateway:*", 
       "dynamodb:CreateTable", 
       "dynamodb:DeleteTable", 
       "dynamodb:DescribeTable", 
       "kinesis:CreateStream", 
       "kinesis:DeleteStream", 
       "kinesis:DescribeStream", 
       "sns:CreateTopic", 
       "sns:DeleteTopic", 
       "sns:ListTopics", 
       "sns:GetTopicAttributes", 
       "sns:SetTopicAttributes", 
       "s3:CreateBucket", 
       "s3:DeleteBucket" 
      ], 
      "Resource": "*", 
      "Effect": "Allow" 
     }, 
     { 
      "Action": [ 
       "iam:PassRole" 
      ], 
      "Resource": [ 
       "arn:aws:iam::[accountId]:role/CodeStarWorker-[projectId]-Lambda" 
      ], 
      "Effect": "Allow" 
     }, 
     { 
      "Action": [ 
       "cloudformation:CreateChangeSet" 
      ], 
      "Resource": [ 
       "arn:aws:cloudformation:eu-west-1:aws:transform/Serverless-2016-10-31", 
       "arn:aws:cloudformation:eu-west-1:aws:transform/CodeStar" 
      ], 
      "Effect": "Allow" 
     } 
    ] 
} 

CodeStar_[projectId]_Ownerポリシーは、直接私のユーザーに添付されています。


編集2:

私自身の勧告にもかかわらず、私は、次のポリシーステートメントを追加することにより、CodeStarWorker-[projectId]-CloudFormation役割のインライン化CodeStarWorkerCloudFormationRolePolicyを更新しようとしました:

{ 
    "Action": [ 
     "iam:AttachRolePolicy", 
     "iam:CreateRole", 
     "iam:DeleteRole", 
     "iam:DetachRolePolicy", 
     "iam:GetRole", 
     "iam:PassRole" 
    ], 
    "Resource": [ 
     "arn:aws:iam::699602212296:role/awscodestar-[projectId]-*" 
    ], 
    "Effect": "Allow" 
} 

しかし、これが原因CloudFormationの次のエラー:

CREATE_FAILED AWS::CodeStar::SyncResources SyncResources123456789012 com.amazon.coral.service.InternalFailure 

答えて

1

CodeStarサービスは、aws-codestar-service-roleというサービスロールを使用します。プロジェクトの動的ワーカーロールがIAMロール作成アクションを継承できる場合は、このサービスロールを修正することができます。そうしないと、CodeStarが変更を上書きする可能性があります。

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "ProjectStack", 
     "Effect": "Allow", 
     "Action": [ 
     "cloudformation:*Stack*", 
     "cloudformation:GetTemplate" 
     ], 
     "Resource": [ 
     "arn:aws:cloudformation:*:*:stack/awscodestar-*", 
     "arn:aws:cloudformation:*:*:stack/awseb-*" 
     ] 
    }, 
    { 
     "Sid": "ProjectStackTemplate", 
     "Effect": "Allow", 
     "Action": [ 
     "cloudformation:GetTemplateSummary", 
     "cloudformation:DescribeChangeSet" 
     ], 
     "Resource": "*" 
    }, 
    { 
     "Sid": "ProjectQuickstarts", 
     "Effect": "Allow", 
     "Action": [ 
     "s3:GetObject" 
     ], 
     "Resource": [ 
     "arn:aws:s3:::awscodestar-*/*" 
     ] 
    }, 
    { 
     "Sid": "ProjectS3Buckets", 
     "Effect": "Allow", 
     "Action": [ 
     "s3:*" 
     ], 
     "Resource": [ 
     "arn:aws:s3:::aws-codestar-*", 
     "arn:aws:s3:::aws-codestar-*/*", 
     "arn:aws:s3:::elasticbeanstalk-*", 
     "arn:aws:s3:::elasticbeanstalk-*/*" 
     ] 
    }, 
    { 
     "Sid": "ProjectServices", 
     "Effect": "Allow", 
     "Action": [ 
     "codestar:*Project", 
     "codestar:*Resource*", 
     "codestar:List*", 
     "codestar:Describe*", 
     "codestar:Get*", 
     "codestar:AssociateTeamMember", 
     "codecommit:*", 
     "codepipeline:*", 
     "codedeploy:*", 
     "codebuild:*", 
     "ec2:RunInstances", 
     "autoscaling:*", 
     "cloudwatch:Put*", 
     "ec2:*", 
     "elasticbeanstalk:*", 
     "elasticloadbalancing:*", 
     "iam:ListRoles", 
     "logs:*", 
     "sns:*" 
     ], 
     "Resource": "*" 
    }, 
    { 
     "Sid": "ProjectWorkerRoles", 
     "Effect": "Allow", 
     "Action": [ 
     "iam:AttachRolePolicy", 
     "iam:CreateRole", 
     "iam:DeleteRole", 
     "iam:DeleteRolePolicy", 
     "iam:DetachRolePolicy", 
     "iam:GetRole", 
     "iam:PassRole", 
     "iam:PutRolePolicy", 
     "iam:SetDefaultPolicyVersion", 
     "iam:CreatePolicy", 
     "iam:DeletePolicy", 
     "iam:AddRoleToInstanceProfile", 
     "iam:CreateInstanceProfile", 
     "iam:DeleteInstanceProfile", 
     "iam:RemoveRoleFromInstanceProfile" 
     ], 
     "Resource": [ 
     "arn:aws:iam::*:role/CodeStarWorker*", 
     "arn:aws:iam::*:policy/CodeStarWorker*", 
     "arn:aws:iam::*:instance-profile/awscodestar-*" 
     ] 
    }, 
    { 
     "Sid": "ProjectTeamMembers", 
     "Effect": "Allow", 
     "Action": [ 
     "iam:AttachUserPolicy", 
     "iam:DetachUserPolicy" 
     ], 
     "Resource": "*", 
     "Condition": { 
     "ArnEquals": { 
      "iam:PolicyArn": [ 
      "arn:aws:iam::*:policy/CodeStar_*" 
      ] 
     } 
     } 
    }, 
    { 
     "Sid": "ProjectRoles", 
     "Effect": "Allow", 
     "Action": [ 
     "iam:CreatePolicy", 
     "iam:DeletePolicy", 
     "iam:CreatePolicyVersion", 
     "iam:DeletePolicyVersion", 
     "iam:ListEntitiesForPolicy", 
     "iam:ListPolicyVersions" 
     ], 
     "Resource": [ 
     "arn:aws:iam::*:policy/CodeStar_*" 
     ] 
    }, 
    { 
     "Sid": "InspectServiceRole", 
     "Effect": "Allow", 
     "Action": [ 
     "iam:ListAttachedRolePolicies" 
     ], 
     "Resource": [ 
     "arn:aws:iam::*:role/aws-codestar-service-role" 
     ] 
    } 
    ] 
} 

またhttp://docs.aws.amazon.com/codestar/latest/userguide/access-permissions.htmlを見ていますが、それは比較的新しいですが、推測していることと、ドキュメントはあなたのユースケースをカバーしていないとして。

+0

詳細を教えてください。私はサービスの役割をどのように修正すべきか理解していませんか?私は本当に 'aws-codestar-service-role'を持っています(私の編集を参照)。' ProjectWorkerRoles'Sidの一部として設定された 'iam:CreateRole'(と' iam:DeleteRole')あなたの答えに示唆されているように。 – matsev

+0

こんにちはmatsev、CodeStarによって作成されたProjectWorkerのIAMロールは、ポリシーがすでにPassRoleを持っているため、CreateまたはDeleteのロールアクションを継承しませんが、渡されないため、上記の提案は役に立ちません。あなたの編集内容に基づいて、AWSでサポートチケットを提示することをお勧めします(申し訳ありません)。 – NHol

関連する問題