2

AWS CodeStar 프로젝트의 CloudFormation 템플릿에서 람다 함수의 IAM 역할을 어떻게 변경합니까?CodeStar 프로젝트의 CloudFormation 템플릿에서 람다에 대한 IAM 역할 변경?

AWS CodeStar 프로젝트 (웹 서비스, 람다 기반, Node.js)를 만들었습니다. 나는 다른 AWS 리소스에 액세스 할 수있는 람다 함수에 대한 정책을 추가 할 필요가 있기 때문에 나는 내 자신의 역할이 역할을 대신하고 싶습니다 지금

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 CodeStar는 다음 CloudFormation을 생성합니다. 나중에 람다 호출을 트리거 스케줄러를 추가하기 때문에 동시에 나는 또한, 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 정책 (다른 문 사이, 자세한 내용은 링크를 참조)과 관련된 : CodeStarWorkerCloudFormationRolePolicy라는 이름의 인라인 정책이있는 CodeStarWorker-[projectId]-CloudFormation 역할도있다

{ 
    "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-*" 
    ] 
}, 

다음과 같은 구성 : I 프로젝트를 만든 이후

{ 
    "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