2016-08-29 6 views
0

私は、Googleで認証されたCognito認証プロバイダを使用してAndroidから直接ラムダを呼び出しています。私がその資格証明プロバイダを使用することによって得られる役割は、私がラムダを呼び出すことを可能にします。クラウドウォッチのログでは、ラムダが実際にラムダハンドラに渡されたコンテキスト変数でユーザーのCognito IDを受け取ることがわかります。ラムダは、このID変数を使用して、Cognito ID変数によって指定された特定のS3ユーザーフォルダへのラムダのアクセスを制限する役割を引き受けます。AWSラムダは一時的なアクセス権を取得するときにCognitoポリシー変数を使用しますか?

{ 
    "Effect":"Allow", 
    "Action":[ 
     "s3:GetObject", 
     "s3:PutObject", 
     "s3:PutObjectAcl", 
     "s3:DeleteObject" 
    ], 
    "Resource":[ 
     "arn:aws:s3:::BUCKET_NAME/users/${c­ognito-identity.amazonaws.com:sub}/"­, 
     "arn:aws:s3:::BUCKET_NAME/users/${c­ognito-identity.amazonaws.com:sub}/*"  ­ 
    ] 
}, 
{ 
    "Effect":"Allow", 
    "Action":[ 
     "s3:ListBucket", 
     "s3:ListObjects" 
    ], 
    "Resource":[ 
     "arn:aws:s3:::BUCKET_NAME" 
    ], 
    "Condition":{ 
     "StringLike":{ 
      "s3:prefix":[ 
       "users/${cognito-identity.amazonaws­.com:sub}/", 
       "users/${cognito-identity.amazonaws­.com:sub}/*" 
      ] 
     } 
    } 
} 

ただし、ラムダはこれらの環境変数の特定の制限を継承していないようです。動作するようにラムダコードのために、私はこのような制約を緩める必要があります。

{ 
    "Effect":"Allow", 
    "Action":[ 
     "s3:GetObject", 
     "s3:PutObject", 
     "s3:PutObjectAcl", 
     "s3:DeleteObject" 
    ], 
    "Resource":[ 
     "arn:aws:s3:::BUCKET_NAME/users/*"  ­ 
    ] 
}, 
{ 
    "Effect":"Allow", 
    "Action":[ 
     "s3:ListBucket", 
     "s3:ListObjects" 
    ], 
    "Resource":[ 
     "arn:aws:s3:::BUCKET_NAME" 
    ], 
    "Condition":{ 
     "StringLike":{ 
      "s3:prefix":[ 
       "users/*" 

      ] 
     } 
    } 
} 

私はそれが役割を想定したラムダサービスに関係していると思います。 S3クライアントで直接役割を使用する場合、制限が機能するようです。クライアントは自分のフォルダにアクセスできますが、他の人はアクセスできません。しかし、ラムダが役割を引き受けた場合、ラムダは機能しません。ポリシーの制約を緩和する必要があります。間違ったことや誤解をしていますか?

答えて

0

私はこれを理解したと思います。私が間違っているなら私を訂正してください。私は2つの役割が必要なように見えます。ラムダが何をする必要があるかを決める一つの役割。 Lambdaサービスがこの役割を引き受けるときに、それらの資格情報にアクセスすることができないため、その特定の役割はCognitoログイン資格情報によって制限できません。セキュリティは、ラムダを呼び出す権限を持っているが、ラムダの役割のようにすべてのS3に完全にアクセスすることはできない2番目のロールから来ています。その役割は認証を必要とする可能性があります。正味の効果は、ラムダを呼び出すために認証を要求できることですが、ラムダコード自体では、使用すべきでないリソースにアクセスしないように注意する必要があります。 Cognitoの資格情報はラムダ機能に渡されます(認証されたロールで呼び出されたため)ので、作業中のリソース、つまりS3のユーザーフォルダをコンテキストから知ることができます。

関連する問題