2016-07-07 6 views
0

APIゲートウェイのエンドポイントに異なる権限を持つ複数のユーザーグループ(Cognitoに独自のIDプールがあります)があります。 IAMロールを使用してアクセス権を管理します。たとえば、私は1つのIDプールのこのポリシーを持っている:AWG CognitoとAPIゲートウェイを使用したきめ細かなアクセス管理

{ 
    "Sid": "Stmt1467885818000", 
    "Effect": "Allow", 
    "Action": [ 
     "apigateway:Invoke" 
    ], 
    "Resource": [ 
     "arn:aws:execute-api:eu-central-1:891841139854:api-id/*/*/usergroup/*" 
    ] 
} 

は今、私は1人の個々のアイデンティティベースのアクセスルールを、持っていると思います。その理由は、リソースを "オン"する(またはリソースへのアクセスを許可されているとしてリストされている)ユーザーだけが変更できるリソースがあるからです。

どうにかしてIAMでこれを行うことはできますか? 私の考えでは、このようなものです:

"Resource": [ 
     "arn:aws:execute-api:eu-central-1:891841139854:api-id/*/*/<my-user-name>/*" 
    ] 

だから、与えられたユーザーが右にを持っていることを確認することができ、すべてのユーザーが唯一の彼のユーザ名(およびこのユーザ名とエンドポイントは、よりラムダに転送することができ、この方法では、アクションを実行します)。

これは可能ですか?どうすれば細かいアクセスを設定できますか?

+0

APIゲートウェイではどのインテグレーションを使用していますか? HTTPプロキシ、ラムダ機能、またはAWSサービスプロキシ? –

+0

異なるもの。しかしほとんどがラムダ。 – Nathan

答えて

0

IAM conditionsを使用してユーザーの身元を確認できます。より多くの例を見るためにthis blog postを見てください。これは次のようになります:

{ 
    "Effect": "Allow", 
    "Action": [ 
     "apigateway:Invoke" 
    ], 
    "Resource": [ 
     "arn:aws:execute-api:eu-central-1:891841139854:api-id/*/*/<my-user-name>/*" 
    ], 
    "Condition": { 
     "StringEquals": { 
      "cognito-identity.amazonaws.com:aud": "us-east-1:<identity-pool-id>", 
      "cognito-identity.amazonaws.com:sub": "us-east-1:<identity-id>" 
     } 
    } 
} 

しかし、私は別の方法を実行することをお勧めします。

APIゲートウェイの統合構成では、pass the Cognito pool and identity to the lambdaを使用できます。ラムダでは、発信者の身元を知ることができます(また、ユーザーIDの詳細については、Cognito APIを参照してください)。

GET /user/me/my-resourceのようなエンドポイントを作成でき、は、APIゲートウェイ呼び出し元のCognito IDに応じてアクションを実行します。 Cognito IDプールのIDごとにxエンドポイントとポリシーを作成する必要はありません。

関連する問題