これは、Cloud9のtemplate.yml
のコードの一部です。
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs6.10
CodeUri: .
Description: Updates records in the AppConfig table.
MemorySize: 128
Timeout: 3
Role: 'arn:aws:iam::579913947261:role/FnRole'
Events:
Api1:
Type: Api
Properties:
Cloud9で変更をコミットすると、ExecuteChangeSet
の試行中にCodePipelineのデプロイ段階でデプロイが失敗します。私はこのエラーを受け取ります:
CloudFormationは実行を許可されていません:リソースでiam:PassRole
誰か助けてもらえますか?
ユーザー:arn:aws:sts :: 156478935478:assumed-role/CodeStarWorker-AppConfig-CloudFormation/AWSCloudFormationは実行を許可されていません:iam:PassRole on resource:arn:aws:iam :: 156478935478:role/service-role/FnRole (サービス:AWSLambda;ステータスコード:403;エラーコード:AccessDeniedException;リクエストID:129f601b-a425-11e8-9659-410b0cc8f4f9)
このログから、スタック(iam:PassRole
)のCloudFormationロールに割り当てる必要があるポリシー(CodeStarWorker-AppConfig-CloudFormation
)を確認できます。
あなたがすべき:
IAM > Roles
CodeStarWorker-AppConfig-CloudFormation
Permissions
に移動しますCodeStarWorkerCloudFormationRolePolicy
を見つけて展開し、Edit policy
に移動しますarn:aws:iam::579913947261:role/FnRole
)を追加します。そのセクションがない場合は、これをコピーして貼り付けますが、Resources
の下に自分のARNを使用します。ポリシー:
{
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::156478935478:role/CodeStarWorker-AppConfig-Lambda",
"arn:aws:iam::579913947261:role/FnRole"
],
"Effect": "Allow"
}
すべてのリソース("Resource": "*"
)にその権限を割り当てたい場合は、以下のセクションを探し、アクションの下で、割り当てる権限を追加します。
"Resource": "*",
"Effect": "Allow"
リソースのCloudFormationに割り当てたい他のすべての権限にこれを適用できます。
あなたの状況で何が起こったのか具体的には言えませんが、エラーメッセージは、CloudFormationがリソースのデプロイに使用したロール/ユーザーに適切なiam:PassRole
権限がなかったことを意味します。
iam:PassRole
権限は、リソースにロールを割り当てるときに使用されます。たとえば、Amazon EC2インスタンスがIAMロールで起動される場合、インスタンスを起動するエンティティには、使用するIAMロールを指定するためのアクセス許可が必要です。これはユーザーが過度の権限を取得するのを防ぐためです。たとえば、管理者以外のユーザーは、権限のない追加の権限にアクセスできるため、管理者の役割でインスタンスを起動することはできません。
テンプレートの場合、CloudFormationが関数を作成し、その関数にFnRole
権限を割り当てているように見えます。ただし、CloudFormationテンプレートこのロールを関数に割り当てる権限が与えられていません。
CloudFormationテンプレートは、起動されると、スタックを作成しているユーザーとしてリソースをプロビジョニングするか、スタックの起動時に指定されたIAMロールを使用してプロビジョニングします。 FnRole
を使用するには、iam:PassRole
権限が必要なのはそのユーザー/ロールです。
ロールの名前を次から変更した場合:RoleName: 'arn:aws:iam::579913947261:role/FnRole'
CodeStar-$ {ProjectId}のプレフィックスを含めるには、CodeStarWorker-AppConfig-CloudFormation
ロールのIAMポリシーを変更せずに、ロールを作成/更新/などできます。例えばRoleName: !Sub 'CodeStar-${ProjectId}-[FunctionName]'
私はここに完全な説明を投稿しました CodeStarプロジェクトのCloudFormationテンプレートでLambdaのIAMロールを変更しますか?