Slide 1

Slide 1 text

ビットバンク株式会社 仮想通貨取引所における AWSアカウント管理と踏み台サーバのあり方 石川 将吾
 JAWS DAYS 2020

Slide 2

Slide 2 text

© bitbank inc. 自己紹介 # 名前
 石川 将吾
 
 # 所属
 ビットバンク株式会社 AWSエンジニア
 
 # Twitter
 koarakko99
 
 
 2

Slide 3

Slide 3 text

© bitbank inc. 会社紹介 仮想通貨取引所(bitbank.cc)
 
 
 
 
 
 3

Slide 4

Slide 4 text

© bitbank inc. 今回話すこと ● AWSアカウント管理の取り組み
 ● まとめ
 ● 踏み台サーバの取り組み
 ● まとめ
 4

Slide 5

Slide 5 text

AWSアカウント管理の取り組み 5

Slide 6

Slide 6 text

© bitbank inc. 
 
 
 請求 & 管理アカウント
 bitbankのAWSアカウント構成 6 
 
 本番
 アカウント
 AWS Organization
 
 開発
 アカウント
 
 ステージング
 アカウント
 
 ログ管理
 アカウント
 
    統制
 アカウント
 踏み台


Slide 7

Slide 7 text

© bitbank inc. AWSアカウントを分けることのメリット AWS SSO(Single Sign-On)による権限割り当ての単純化
 ● アカウントごとにIAMユーザーを作らずに済む
 
 コスト管理の単純化
 ● タグ管理とかで細かく設定しないで済む
 
 プロダクトが閉塞した場合にはアカウントごと削除できる
 ● つまりリソースの消し忘れを無くせる
 
 7

Slide 8

Slide 8 text

© bitbank inc. AWSアカウントの権限構成 AWS SSOを採用
 ● IAMユーザを使わない
 ● 全アカウントはAWS SSOからログイン
 8

Slide 9

Slide 9 text

© bitbank inc. 承認ワークフローを用いた例 AWSアカウントにおいて作業や権限変更等に承認ワークフローを導入
 
 AWSアカウント作成時
 ● 「アカウント名」、「理由」
 
 AWSアカウント権限付与・削除
 ● 「対象アカウント」、「必要な権限」、「理由」
 
 SecurityGroupやRoute53など影響があるサービス
 ● 「対象リソース」、「理由」
 9

Slide 10

Slide 10 text

© bitbank inc. アカウント作成時の承認ワークフローと連携した活用例 承認ワークフローと連携
 ● 承認後にアカウントを自動作成
 
 さらにセキュリティサービスやエンタープライズサポートの有効を自動化
 ● CloudTrail やGuardDuty
 
 10

Slide 11

Slide 11 text

© bitbank inc. 定期的なアカウント権限の棚卸し 4半期ごとに権限を棚卸し
 ● 不要な権限が割り当てられていないか
 ● 不要な権限があれば削除を実施
 
 
 11

Slide 12

Slide 12 text

© bitbank inc. AWSアカウント管理のまとめ 12 ● AWSアカウントは環境・プロジェクトなどによってアカウントを分けている
 ● セキュリティサービスはアカウント作成時に自動で有効化
 ● 権限変更(付与/削除)などの変更作業については承認ワークフローによる承認を必 須としている


Slide 13

Slide 13 text

踏み台サーバの取り組み 13

Slide 14

Slide 14 text

© bitbank inc. Session ManagerでなくEC2を踏み台として採用 ● SSM Agentがインストールされていないサーバが多くあり、これからインストールす るのは現実的でなかった。
 
 ● 「誰が」接続したのか判別するのため設定が煩雑
 ○ Session Managerの場合、OSユーザを事前に用意が必要があり、運用担当者が代わるたびにOS ユーザの変更は現実的で無かった 
 
 ● ユーザ毎に接続先の権限管理が煩雑
 ○ AWS SSOでAWSアカウントを管理してるため、権限管理が煩雑になってしまう 
 
 
 14

Slide 15

Slide 15 text

© bitbank inc. 踏み台サーバの要件 要件
 ● セキュリティグループでの制限(インバウンド/アウトバウンド)
 ● サーバログイン時の認証と通知
 ● アプリケーションサーバへの接続できること
 ● 各種ログ保管
 ○ 作業ログ
 ○ サーバの稼動ログ
 
 
 
 15

Slide 16

Slide 16 text

© bitbank inc. 本番作業用
 ログ管理とモニタリング
 秘密鍵管理
 踏み台
 ユーザ認証
 踏み台サーバの全体構成図 16 EC2 EC2 DynamoDB Lambda Parameter Store ユーザ S3 CloudWatchLogs WorkSpaces Sumo Logic モニタリング
 担当者
 EC2(AD)

Slide 17

Slide 17 text

踏み台サーバの インバウンド・アウトバウンド 17

Slide 18

Slide 18 text

© bitbank inc. セキュリティグループの設定 セキュリティグループは最小限に制限
 
 インバウンド
 ● WorkSpacesからのみ(オフィスネットワークと分離するため)
 
 アウトバウンド
 ● SSH(22) アプリサーバ VPC Peeringを必須
 ● HTTPS(443) 
 
 
 18

Slide 19

Slide 19 text

踏み台サーバのログイン認証と通知 19

Slide 20

Slide 20 text

© bitbank inc. 踏み台ログイン認証 ログイン時の認証は次の通り
 
 ユーザー・パスワード認証
 ● 全てのユーザをAD連携
 ● ログイン可能なユーザを特定ADグループに制限
 
 MFA認証
 ● Google Authenticatorを利用した認証
 
 
 20

Slide 21

Slide 21 text

© bitbank inc. 踏み台ログイン通知 ログイン通知
 ● サーバログイン時にSlack通知
 ● ユーザはスタンプでリアクションする
 
 
 21 notify-login 1.ログイン
 2.通知
 3. リアクション


Slide 22

Slide 22 text

アプリケーションサーバへの接続方法の検討とその 仕組み 22

Slide 23

Slide 23 text

© bitbank inc. まずアプリケーションサーバにどのように繋ぐか 前提はLambdaやFargateを優先的に採用し、SSHできない環境にする
 ただし要件によっては、EC2レイヤーでのサーバが必要になってしまう
 
 アプリケーションサーバに接続する方法
 ● SSH秘密鍵で繋ぐ方法を採用した
 
 
 
 
  
 23

Slide 24

Slide 24 text

© bitbank inc. 秘密鍵を管理するうえで考慮したこと 鍵の権限を管理する仕組み
 ● 必要なユーザしか鍵を利用できないようにする
 
 鍵が流出する可能性を減らす権限設計
 ● 不必要なところからの読み取りを排除する
 
 恒常的に鍵を踏み台上に置かない仕組み
 ● 利用するときのみ鍵ある状態にする
 
  
 24

Slide 25

Slide 25 text

© bitbank inc. 鍵の権限を管理する仕組み Lambda
 ● 鍵配信のエンドポイントとして利用
 
 25 DynamoDB
 ● ユーザの鍵の権限管理するテーブル
 
 SSM(Parameter Store)
 ● 秘密鍵を格納


Slide 26

Slide 26 text

© bitbank inc. 秘密鍵の管理と配信の仕組み(流れ) 1. Lambdaを実行
 
 26 DynamoDB 1.実行 Parameter Store EC2 踏み台 2.ユーザの権限を 確認 3.鍵を取得 Lambda 2. DynamoDBでユーザの権限を確認
 3. SSMから鍵を取得
 user@ip-x-x-x-x .ssh]$ ls dev-test.pem dev-test-2.pem 4. 踏み台に秘密鍵を配信
 4.鍵を配信

Slide 27

Slide 27 text

© bitbank inc. 鍵が流出する可能性を減らす権限構成(1) 27 まず鍵の中身をユーザが読めてしまう
 ● sshする場合、chmod 400権限が必要
 ● この時点でユーザ自身に読み取り権限を付与してしまう
 
 sshで秘密鍵を利用する限り、このレイヤーでの対策はできない


Slide 28

Slide 28 text

© bitbank inc. 鍵が流出する可能性を減らす権限構成(2) 28 そこでSELinuxによるカーネルレベルでのアクセス制御
 ● 秘密鍵の読み取り権限をユーザなどから剥奪した
 ● ユーザがcat, echo, cpなどで鍵を読み取りできない
 ● アプリサーバへSSHはUnix権限は chmod 400 であるため可能
 ssh App user@ip-x-x-x-x tmp]$ cat ~/.ssh/test.pem cat: /home/user/.ssh/test.pem: Permission denied cat 踏み台
 アプリサーバ


Slide 29

Slide 29 text

© bitbank inc. 恒常的に鍵を踏み台上に置かない仕組み 29 ログイン時の鍵配信の仕組みに加えログアウトしたら鍵を自動削除
 ● 踏み台からユーザがログアウトしたら鍵を削除
 踏み台
 ログアウト
 鍵を削除
 UserCheck Daemon

Slide 30

Slide 30 text

ログ管理とモニタリング 30

Slide 31

Slide 31 text

© bitbank inc. 取得すべきログの要件 31 ● 本番作業の証跡となるログ
 ○ 事後モニタリングのため
 ● 踏み台サーバとアプリサーバへの接続ログ
 ○ 事後モニタリングのため
 ● サーバのメッセージログ
 ○ トラブルシューティング
 


Slide 32

Slide 32 text

© bitbank inc. 取得しているログの例 32 本番作業の事後モニタリングのため
 ● ユーザの打鍵したコマンドとその実行結果
 ● SSH接続と切断ログ
 
 サーバ障害時のトラブルシューティングのため
 ● サーバのメッセージログ
 
 
 


Slide 33

Slide 33 text

© bitbank inc. 打鍵ログはS3、CloudWatchで保管し、SumoLogicに連携している
 ログの保管期間は3年(監査などに対応するため)
 
 ログの連携方法と保管期間 33 打鍵ログ SSH切断/切断 ログ メッセージログ 打鍵ログ Sumo Logic CloudWatchLogs S3 踏み台
 モニタリング
 担当者
 etc ・
 ・
 ・


Slide 34

Slide 34 text

その他の OSレベルでの取り組み 34

Slide 35

Slide 35 text

© bitbank inc. 不要なコマンドの実行権限を排除 35 SELinuxのLevelを活用したユーザからコマンド実行権限を剥奪
 
 
 
 
 
 
 
 [[email protected] ~]$ ls -Z /usr/bin/make
 system_u:object_r:bin_t:s15 /usr/bin/make

Slide 36

Slide 36 text

© bitbank inc. ユーザ毎にホームディレクトリを分離 36 Chrootでユーザ毎のルートディレクトリを変更
 ● ユーザが他ユーザのホームディレクトリを覗けなくする
 
 
 chroot
 / /home /etc /user1 /home /user1 /bin /etc 
 
 chroot
 /user2 /home /user2 /bin /etc /bin

Slide 37

Slide 37 text

運用時のトラブル 37

Slide 38

Slide 38 text

© bitbank inc. Google AuthenticatorによるMFAがエラーになる 38 原因
 ● セキュリティグループでアウトバウンド制限していたため、NTPに接続を拒否してい た
 ● このため時間同期できずサーバ内の時間がズレてしまった
 
 対応
 ● Amazon Time Sync Serviceを使って時刻同期するようにした
 ● SGのアウトバウンドを開ける必要がないのがメリット
 
 


Slide 39

Slide 39 text

© bitbank inc. 踏み台のまとめ 39 ● 踏み台についてはEC2を採用
 ● 各アプリケーションサーバへの接続方法はSSH秘密鍵を利用
 ● 鍵の権限管理はLambda/Dynamo/SSMとカーネルレベルのSELinuxを利用
 ● 監査等に対応できるログを取得し、モニタリングを実施
 
 


Slide 40

Slide 40 text

© bitbank inc. エンジニア募集中です 40 ● AWSエンジニア
 ● SREエンジニア
 ● フロントエンドエンジニア
 ● バックエンドエンジニア
 ● データ基盤エンジニア 
 
 


Slide 41

Slide 41 text

41 ビットコインの技術で 世界中にあらゆる価値を流通させる