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
詳細を教えてください。私はサービスの役割をどのように修正すべきか理解していませんか?私は本当に 'aws-codestar-service-role'を持っています(私の編集を参照)。' ProjectWorkerRoles'Sidの一部として設定された 'iam:CreateRole'(と' iam:DeleteRole')あなたの答えに示唆されているように。 – matsev
こんにちはmatsev、CodeStarによって作成されたProjectWorkerのIAMロールは、ポリシーがすでにPassRoleを持っているため、CreateまたはDeleteのロールアクションを継承しませんが、渡されないため、上記の提案は役に立ちません。あなたの編集内容に基づいて、AWSでサポートチケットを提示することをお勧めします(申し訳ありません)。 – NHol