AWS Cognito ユーザープールID、クライアントIDが漏洩したときの影響


影響範囲

↑こちらの記事に以下の質問と回答を見つけた。(2017/05/17)

Q8: UserPoolIdとClientIdが漏れたときの影響範囲について教えてください。

A8: UserPoolIdとClientIdを知ったクライアントがSignUpを実行できるようになります。しかし、一般的にConsumer向けのモバイルアプリやWebサービスはそもそもエンドユーザに新規ユーザ登録等の操作を許すことが多いため、Cognito Your User Poolsで構築したサービスに誰でもユーザ登録ができること自体は通常特に問題にはなりません。もし第三者によるユーザ登録操作を制限したいのであれば、ユーザ登録用のAPIを用意してクライアントからはそのAPIにアクセスするようにし、API内でAdminCreateUserなどを使ってユーザ登録を代行する方法などが考えられます。

テスト

1000人登録できるかテストしてみた。

for (i = 0; i < 1000; i++) {
  const userData = {
    userName: 'dummy-user-' + i,
    password: 'Ab12345!',
    email: '[email protected]'
  };
  const poolData = {
    UserPoolId: 'ap-northeast-1_XXXXXX',
    ClientId: 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
  }
  let attributeList = [];
  const dataEmail = {
      Name : 'email',
      Value : userData.email
  };
  const attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail);
  attributeList.push(attributeEmail);
  const userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);

  let cognitoUser;
  userPool.signUp(userData.userName, userData.password, attributeList, null, function(err, result){
      if (err) {
          alert(err);
          return;
      }
      cognitoUser = result.user;
      console.log('user name is ' + cognitoUser.getUsername());
  });
}

アラートが出た。

OKを連打していると新しいアラートが出た。

後はこの2つのアラートの繰り返しだった。

↓なぜか最初の555人は失敗していた。

結果

登録できたユーザー数:133
(dummy-user-556 ~ dummy-user-688)

参考記事