見出し画像

Appleアカウントにおける2FA必須化に伴う影響と対応

2021年2月からApp Store Connectにログインする場合、ロールに関係なく2FAが必要になるというアナウンスがAppleからありました。

[蛇足]
2019年2月にAppleアカウントの「Account Holder」ロールは2FA必須化されました。

急いでいる人のための結論

 - 前提:App Store Connect APIの利用で問題ないケースは、そちらを利用しましょう(fastlaneからも利用できます

 - App Store Connectにログインをすると2FAの設定を促す画面が出ているが2FAの設定をしなくてもログインはできる
-- ただし新規にAppleアカウントを作ろうとすると2FAが必須化されている
- しかし自動化においては上記の画面がでるため動かなくなっているケースがある
- Fastlaneでその2FAの設定を促す画面を回避する対応が最近入った
- ただしいつまで2FAの設定をせずともログインできるかは不明

影響範囲

この2FA必須化に伴う影響範囲としてどのようなものがあるでしょうか?

2019年2月の「Account Holder」ロールの2FA必須化で「Certificates, IDs & Profiles」に対しての自動化が厳しくなりました(個人開発者の場合)。

蛇足ですが、この時点ではApp Store Connect APIで上記の箇所に対しての操作はできない状態でした。

今回のケースでは「App Store Connect」でおこなっている自動化(アカウントのID/パスワードでログインしている場合)に関して影響をうけることになります。

例えば次のようなものです。

- App Store Connectへのファイルのアップロード
- App Store Connectのmetadata/スクリーンショットの更新
- dsymファイルのダウンロード

これらの操作をCI環境で実行していたケースは多いかと思います(拙書にもそのようなやり方を記載しています)。

これらが2FA必須化に伴い、CI環境で動かすことが困難になります。

考えられる対応策

ここまで(アナウンスされた内容に基づく)影響範囲を書いたわけですが、対応策として次が考えられます。

- App Store Connect APIの利用
- Fastlaneセッションの利用 / SMSサービスの利用
- 信頼できるデバイスの操作

App Store Connect API

App Store Connect APIを利用することで、App Store Connectへのファイルのアップロードもできますし、他の操作もできます。

今は利用申請をしてから使えるようになるまでに時間もかからないようですし、今後のことを考えるとこれを使ってカバーできるのであればそれが良いでしょう。

Bitriseのstepを使ってApp Store Connectへの操作をおこなっていた場合、そのstepでApp Store Connect APIの情報を設定するだけでまた利用できるようになります。

しかし、このAPIはまだ(期待をこめています)万能ではありません。
App Store Connect APIでは次の点が課題としてあります。

- App Store Connectからdsymファイルのダウンロードができない
- App単位で権限を絞ることができない

後者ですが、App Store Connectへのアカウントを追加する場合、次のように役割(ロール)と対象のAppを選択できます。

スクリーンショット 2021-02-08 10.21.33

しかし、App Store Connect APIは次のように役割しか選ぶことができません。

スクリーンショット 2021-02-08 10.21.47

つまり、App Store Connect APIを利用する場合はすべてのAppの情報を見たり操作することも出来てしまいます。
これが権限管理をする上でヘア厳しい場合もあるかと思います。


Fastlaneのセッションの利用 / SMSサービス(API)の利用

2FA設定済みのアカントでログインをして、そのセッションを利用できる間は利用するという手もあります。

Bitriseではそのセッションを扱うために次のような機能も提供しています。

ただし、これは定期的に更新する必要があります。

この定期更新の部分に対するアプローチとして、岸川さんがブログに公開してくれています。

この部分を自動化するためにSMSを受け取れるサービスを利用してログインをするという方法です。
(自動テストなどでも利用されている方もいるかと思います。

記事にもありますがAppleからのSMSを受信できるサービスは多くなかったという点は注意が必要です。
(追記)岸川さんのブログにも記載されていますが、Vonageは利用規約により認証に電話番号を利用することを禁止しているとのことなので、ここらへんの利用については注意が必要です。

信頼されたデバイスの操作

2FAで送られてくるメッセージは、信頼されたデバイス(例えばmacOSマシン)に通知させることもできます。

この通知を受け取って対応をすることもできなくはないと思います。
(が正直そのためにマシンを用意する必要もあり面倒ですね。

現時点(2021/2/6時点)の状況

ここまで説明してきましたが、2月になった現時点でどういう状況かというと2FA必須化とまではなっていません。

現在、2FAの設定をしていないAppleアカウントでログインをしようとすると、2FAの設定を促す画面が表示されます。

しかし、その画面で表示される「その他のオプション」から「アップグレードしない」を選ぶことで、2FAの設定しない状態でもログインをすることができます。

ではまだ自動化に問題はないのか?

ログイン後に上述した画面が表示されるためにその後の処理ができない状態になっています。

ログインすると、HTTPのステータスコードが412 を返すようになっているようです。

これはAppleのPrivacy Acknowledgementの画面が出るときと同じステータスコードのようで、OSS側の処理としてはログインしてAgreementする必要があるページが出ていると判断します。

しかし、実際は2FAの対応を促す画面が表示されています。
そのため、ここから先の処理ができない状態になっています。

上述した影響範囲以外に起きた影響

実は上述した影響範囲以外にも影響がありました。

それは、App Store以外からおこなうXcodeのインストールです。

App Storeには最新のXcodeがインストールできますが、古いのも含めインストールしたいケースはよくあります。

古いXcodeは次からダウンロードすることができます。
ただし、ここはAppleアカウントでのログインが必須な場所となります。
https://developer.apple.com/download/more/

ここでのログインも同様に2FAを促す画面が出るようになっています。
(App Store Connectへのログインと聞いていたので、ここに影響がでるとは思っていませんでしたが、同一の箇所を通っているようです。

蛇足ですが、次からのログインだと2FAを促す画面は出てきません。
https://www.apple.com/jp/shop/browse/account/home
ここでログインをおこない上記のダウンロードページに行くこともできます。

さて、このダウンロードページがこういう状況というのはどういった影響があるのでしょうか?

CI環境構築のために、次のようなOSSを利用しXcodeを自動インストールするケースはよくあります。

上述したようにXcodeのダウンロードができる場所はAppleアカウントでのログインが必要なため、これらのOSSではそのための処理がはいっています。

しかし、2FAを促す画面がでるようになっているためログインができずに、Xcodeのインストールができなくなっています。

(一時的だと思われる)あらたな対応策

現時点の既存のAppleアカウントでログインした状況は上述したとおりです。

そんな中、この「アップグレードしない」を選択し2FAの設定を促す画面を突破する対応策がFastlaneにはいりました。

最新のFastlaneでSPACESHIP_SKIP_2FA_UPGRADEの環境変数に1を設定すれば、まだ今まで通り利用することができます。
(App Store Connectを操作している場合、多くはFastlaneを利用しているかと思います。

ただしXcodeのインストールをおこなうxcodesに関してはFastlaneを利用しているわけではないので上記の対応策は関係ありません。

とはいえ、今のような状況がいつまで続くかは分かりません。

それまでの間にApp Store Connect APIですべてが解決できることを祈るばかりです。


追記(2021/02/07)

Twitterで教えてもらった内容として、新規アカウント作成時には2FA設定が必須となっている旨を追記しました。

追記(2021/02/23)

本文にも追記していますが、SMS APIサービスのVonageは利用規約として認証に電話番号を利用することを禁止しているとのことです。


この記事が気に入ったらサポートをしてみませんか?