web-dev-qa-db-ja.com

CloudFormationは実行を許可されていません:リソースでiam:PassRole

これは、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

誰か助けてもらえますか?

4
Second Of Two

ユーザー: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(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に割り当てたい他のすべての権限にこれを適用できます。

7
Second Of Two

あなたの状況で何が起こったのか具体的には言えませんが、エラーメッセージは、CloudFormationがリソースのデプロイに使用したロール/ユーザーに適切なiam:PassRole権限がなかったことを意味します。

iam:PassRole権限は、リソースにロールを割り当てるときに使用されます。たとえば、Amazon EC2インスタンスがIAMロールで起動される場合、インスタンスを起動するエンティティには、使用するIAMロールを指定するためのアクセス許可が必要です。これはユーザーが過度の権限を取得するのを防ぐためです。たとえば、管理者以外のユーザーは、権限のない追加の権限にアクセスできるため、管理者の役割でインスタンスを起動することはできません。

テンプレートの場合、CloudFormationが関数を作成し、その関数にFnRole権限を割り当てているように見えます。ただし、CloudFormationテンプレートこのロールを関数に割り当てる権限が与えられていません

CloudFormationテンプレートは、起動されると、スタックを作成しているユーザーとしてリソースをプロビジョニングするか、スタックの起動時に指定されたIAMロールを使用してプロビジョニングします。 FnRoleを使用するには、iam:PassRole権限が必要なのはそのユーザー/ロールです。

11
John Rotenstein

ロールの名前を次から変更した場合:RoleName: 'arn:aws:iam::579913947261:role/FnRole'

CodeStar-$ {ProjectId}のプレフィックスを含めるには、CodeStarWorker-AppConfig-CloudFormationロールのIAMポリシーを変更せずに、ロールを作成/更新/などできます。例えばRoleName: !Sub 'CodeStar-${ProjectId}-[FunctionName]'

私はここに完全な説明を投稿しました CodeStarプロジェクトのCloudFormationテンプレートでLambdaのIAMロールを変更しますか?

0
AlexB