IAMとして許可されたAPIゲートウェイエンドポイントをセットアップしました。AWS Cognito生成された資格情報がAPIゲートウェイで受け付けられない
まず、自分のユーザーの資格情報(キー、シークレット)を使用してリソースにアクセスしようとしました。
次に、Cognitoにアイデンティティプールを設定しました。プールでは、認証されたアクセスと認証されていないアクセスの両方が可能です。 私はPHP SDKを使用して認証情報を生成しています
$id = $cognitoClient->getId([
'AccountId' => 'xxx',
'IdentityPoolId' => 'xxx',
]);
$credentials = $cognitoClient->getCredentialsForIdentity([
'IdentityId' => $id->get('IdentityId')
])->get('Credentials');
これは、認証情報を生成することができる - AccessKeyId
、SecretKey
とSessionToken
が返されています。
私が認証されていないアクセスを添付しました役割は、このように定義されています
信頼関係:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "xxx"
}
}
}
]
}
インラインポリシー:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "cognito-sync:*",
"Resource": [
"arn:aws:cognito-sync:us-east-1:123456789012:identitypool/${cognito-identity.amazonaws.com:aud}/identity/${cognito-identity.amazonaws.com:sub}/*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "cognito-sync:*",
"Resource": [
"arn:aws:cognito-sync:us-east-1:xxxxx:identitypool/*"
]
}
]
}
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"apigateway:*"
],
"Resource": [
"*"
]
}
]
}
私は任意の管理ポリシーを添付していません役割を持って
PHP SDKを使用してクレデンシャルを生成した後、私はリソースにアクセスするためにpostmanを使用します(私はアカウントクレジットを使っている間も郵便配達員を使いました)。この呼び出しは次のエラーを与える:
{"message":"The security token included in the request is invalid."}
私はここで間違って起こっているかを判断することができません。
それは私の推測になるだろう。 Postmanが一時的な資格情報をサポートしているかどうかはわかりませんが、Cognitoや任意のセッション資格情報を使用する場合は、リクエストでSessionTokenを送信する必要があります。 SDKがあなたのために働いてくれてうれしいです! –