2017-08-21 1 views
1

この要件はペンテストから出てきました。私はラムダ関数 "add_address"とロール "account_management_role"を持っています。与えられたラムダ関数によって仮定できるようにするには?

私は "account_management_role"を "add_address"ラムダ関数によってのみ仮定したいと思っています。私は他のラムダ関数がこの役割を果たすことを望んでいません。

IAMの役割の「信頼関係」でこの項目を追加しようとしました。これはうまくいかなかった。

これをどのように動作させるか考えている人はいますか?

{ 
    "Statement": [ 
    { 
     "Effect": "Allow", 
     "Principal": { 
     "Service": "lambda.amazonaws.com" 
     }, 
     "Action": "sts:AssumeRole", 
     "Condition": { 
     "ArnEquals": { 
      "aws:SourceArn": "<ARN of lambda function>" 
     } 
     } 
    } 
    ] 
} 

答えて

1

@nagalakshmiがサポートされていません。

AWSラムダアクションの最初の文付与の権限(ラムダ:CreateFunction)アマゾンリソース名を使用して、リソースの

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "CreateFunctionPermissions", 
      "Effect": "Allow", 
      "Action": [ 
       "lambda:CreateFunction" 
      ], 
      "Resource": "*" 
     }, 
     { 
      "Sid": "PermissionToPassAnyRole", 
      "Effect": "Allow", 
      "Action": [ 
       "iam:PassRole" 
      ], 
      "Resource": "arn:aws:iam::account-id:role/*" 
     } 
    ] 
} 

AWSのドキュメントからのポリシーには、二つの文を持っています(ARN)をラムダ関数に使用します。 現在、AWS Lambdaはリソースレベルでこの特定のアクションの権限をサポートしていません。したがって、ポリシーはリソース値としてワイルドカード文字(*)を指定します。


2番目のステートメントは、IAMロールのIAMアクション(iam:PassRole)に対するアクセス許可を付与します。リソース値の末尾にあるワイルドカード文字()は、ステートメントが任意のIAMロールでiam:PassRoleアクションの許可を許可することを意味します。この権限を特定のロールに制限するには、リソースARNのワイルドカード文字()を特定のロール名に置き換えます。

上記の文章では、現在、リソースレベルで権限をサポートしていないと述べています。

機能リクエストに含まれている可能性があります。

+0

が理にかなっています。これが今私たちがやっていることです。役割を想定できるユーザーを制限する条件を追加して、期待どおりに機能しないように見えます。 –

0

作成さロールXラムダ関数を機能するために取り付けられています。その後、私はエラー

下になった同じ役割Xに新しいラムダ関数Bを作成する「[設定]タブには、保存に失敗した理由:あなたの役割は、準備ができていない、またはラムダによって仮定することはできないまでお待ちください。もう一度やり直してください。 "

以下は、同じ信頼関係ポリシーです。 ラムダARNをよくご確認ください。

{ 
     "Version": "2012-10-17", 
     "Statement": [ 
     { 
      "Effect": "Allow", 
      "Principal": { 
      "Service": "lambda.amazonaws.com" 
      }, 
      "Action": "sts:AssumeRole", 
      "Condition": { 
      "ArnEquals": { 
       "aws:SourceArn": "arn:aws:lambda:us-east-1:xxxxxxxxx:function:lambdatest" 
      } 
      } 
     } 
     ] 
    } 
+0

ラムダ関数AもロールXを引き継ぐことができませんでした。同じエラーが発生しました。理由:あなたの役割は準備ができていないか、ラムダが引き受けることはできませんので、1分ほど待ってからもう一度やり直してください。数時間待ってから動作を停止します。 –

0

これはバグです。 AWSサポートチームで作成したチケットの返信です。 は、役割を引き受けることができるユーザーを制限する唯一の方法は、それはBLOCKQUOTE 変更ユーザーレベルのアクセスを通じて

を制限しているように、私は先に行って、あなたは、単一のラムダ関数内で達成しようとしている制限をしようとしましたが、私たちができなかったルックスそれが適切に機能するようにする。私たちは結果を確実にするために一連のテストを行いました。役割を引き受ける条件として特定の機能を指定できなかったため、テストは失敗しました。これは、最初の役割の前提が、呼び出す関数を探すことなく、ラムダサービス自体によって実行されるためです。これを発見するには、 'IfExists'修飾子を 'StringLike'に追加します。これは、AssumeRoleリクエストでこの特定の特性をチェックするようIAMに指示しますが、存在しない場合は条件を無視して続行します。この関数は特定の条件セットでは機能せず、正確なARNが提供されても、それでも失敗します。しかし、IfExistsを追加した後、その関数は機能しました...しかし、その役割を利用しようとした別の無関係の関数もそうでした。これは、Lambdaサービスが役割を担う前に、Lambda関数ARNがチェックされていないことを意味します。 Blockquote 関数を呼び出す時点で、AWSラムダサービスを暗黙的に信頼して、役割を引き受け、記述されているとおりに関数を実行します。したがって、あなたの信頼関係は何を修正すべきではありません。むしろ、特定の機能が持つアクセスを制限したい場合は、適切なiam:PassRole権限を持つエンティティによってロールが渡されるため、呼び出すIAMエンティティを制限して、特定のロールをLambdaサービスに渡す必要があります。 Lambdaはその関数を呼び出すために使用します。特定の役割にPassRoleのみロールのセット::次のドキュメントには、IAMを制限する方法の例を示し、彼らは明らかにそれを言及最初の段落内の指定されたリンクhttp://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.htmlからhttp://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html

+0

こんにちはnagalakshmi昨日私はIAMを使用して試した:passroleしかし、あなたのユースケースでは動作しません。ここで解決策を見つけたら –

関連する問題