LoginSignup
13
10

More than 5 years have passed since last update.

GCPサービスアカウントの鍵を安全に管理する

Posted at

以下の記事のメモ。
https://cloudplatform.googleblog.com/2017/07/help-keep-your-Google-Cloud-service-account-keys-safe.html

GCPは堅牢なサービスアカウントの鍵管理機能を提供している。それは認可された適切なエンティティのみが稼働中のGCPリソースにアクセスできるようにする。
アプリ全体がGCP上で稼働している場合、サービスアカウントの鍵管理はGCP側で自動で鍵ローテーションなどを行ってくれるため容易である。しかし多くのアプリは様々な環境で実行されているので、鍵を安全に管理することが必要である。

GCPの外にあるサービスアカウントを保護する

サービスアカウントを作成する時、最小権限の規則に従っているか確認する。これはGCP外に置く置かないに関わらず全てのケースで有効な手段である。
サービスアカウントのキーはダウンロードされると、GCPのコントロール外になるので、セキュリティリスクは高くなる。そのため鍵のローテーションなどをして管理しないといけない。

ベスト・プラクティス

  1. ローカル環境に鍵をダウロードするなら、その鍵はプロダクションリソースへのアクセス権が与えられてないことを確認してください
  2. 以下のメソッドを使って鍵をローテートする。
    • ServiceAccounts.keys.create()
    • Replace old key with new key
    • ServiceAccounts.keys.delete()
  3. 毎日の鍵ローテーション処理の実装し、開発者がCloudStorageから鍵ファイルをダウンロードできるようにする。
  4. serviceAccount.keys.list()もしくはLogs Viewerページを使って、サービスアカウントと鍵を監査する。
  5. Service Account ActorとService Account Userロールの権限を持つユーザを制限する。
  6. ローカルの開発環境のために、GOOGLE_APPLICATION_CREDENTIALSを設定する。
  7. 開発者が外部のソースコードリポジトリから鍵を取得するのを防ぐ。
  8. 定期的に外部リポジトリをスキャンし、鍵が置かれてたら是正処置を行う。

鍵のローテーション

Keyrotator(https://github.com/Googlecloudplatform/keyrotator) 
はシンプルなCLIツールでPythonで記述されている。adminインスタンス上でcronジョブとして実行し、夜中に新しい鍵をCloudStorageに配置し、開発者が朝方にその鍵をダウンロードして使用する。
鍵を含むバケットのアクセスコントロールは必須である。

  1. リソースをシェアするためのプロジェクトを作成
  2. バケットを作成
  3. 開発者用のグループを作成
  4. storage.objectViewerロールを開発者グループに割り当て、バケットを読めるようにする。

※より強いコントロールするときはCloud KMSを使用する。

外部のソースコードリポジトリに鍵がコミットされるのを防ぐ

外部のソースコードリポジトリに鍵を置く代わりの手段として、GCPではプライベートなGitリポジトリを提供している。
もしくはgit-secretsを使うことによって、鍵が外部リポジトリにアップロードされるのを防ぐことができる。

外部リポジトリをスキャンする

git-secretsを補完するツールとしてtrufflehogを使用する。trufflehogはリポジトリの履歴を検索し、鍵がアップロードされたか調べることができる。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10