みなさん、こんにちは。スカイゲートテクノロジズのサイバー事業部です。弊社のプロダクト開発では、AWSをはじめGCP(Google Cloud)やAzureをマルチクラウドで利用しています。GCPと言えば、Googleが培った分散コンピューティングとデータベースの機能を使え、最近はGKEを中心としたk8sによるマイクロサービスの構築の事例も増えているのではないかと思います。今日は、GCPを初めて触る方やスモールチームで運用されている方を対象に、GCPのセキュリティの「最低限これだけやっておこう!」の紹介です。<AWS編はこちら>%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fwww.skygate-tech.com%2Fblog%2Fbasic-aws-security-setting-jp%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2FZfdwshX%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3EGoogleアカウントを保護するAWSと異なり、Googleにはルートアカウントはありません。Googleは、ログインなどの認証と、実際にGoogle Cloudの利用を行う「プロジェクト」が分離しており、各Googleユーザーがプロジェクトに参加する、という形になっています。そのため、まず真っ先に行うべきは、Googleのアカウントの保護です。アカウントの多要素認証を有効にする。Googleの「マイアカウント」からアカウントのセキュリティを設定することができます。画面左の「セキュリティ」から「2段階認証プロセス」を選択し、有効にしてください。Googleアカウントでは、2つ目の認証要素として、Gmailなどのアプリで受信できる「Googleからのメッセージ」と「SMSによる音声またはテキストメッセージ」の2つの手段が用意されています。どちらも有効にしておくと良いでしょう。また、この画像内の画面の下にスクロールすると、さらなる追加要素を選ぶことができます。QRコードによるTOTPなどの2要素認証を使いたい場合には、「認証システム アプリ」を選びましょう。TOTPに対応したアプリを使ったワンタイムパスコードによる認証を追加することができます。認証アプリはMicrosoft Authenticator, IIJ SmartKey, Google Authenticatorなどがあります。既に社内でAzureなどを使われている場合にはMicrosoft Authenticatorが、そうでなければ機種変の際に簡単にデータ移行できるIIJ Smart Keyがおすすめです。App Store%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fapps.apple.com%2Fjp%2Fapp%2Fmicrosoft-authenticator%2Fid983156458%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2Fe418dZ6%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3E%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fapps.apple.com%2Fjp%2Fapp%2Fiij-smartkey%2Fid974476420%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2F4iMu97F%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3EGoogle Play%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dcom.azure.authenticator%26amp%3Bhl%3Den_US%26amp%3Bgl%3DUS%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2FNDK7bBc%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3E%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Djp.ad.iij.smartkey2%26amp%3Bhl%3Den_US%26amp%3Bgl%3DUS%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2FluJkmwy%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3E既にGoogle Workspaceを、OneLoginやOktaなどの外部のIdPと連携させ、SAMLによるSSOなどを有効にしている場合には、IdP側の2要素認証を有効にするのを忘れないようにしましょう。「組織」と「請求先アカウント」先ほど説明した通り、GCPは、アカウントとプロジェクトはそれぞれ独立した概念です。そして、AWSと異なり、プロジェクトと支払いも分離しています。プロジェクト毎に「請求先アカウント」と呼ばれる支払いと請求を管理するアカウントを紐付けなければなりません。そこで、これらを組織全体で管理できるよう「組織」を設定します。組織を設定すると、プロジェクトや請求先アカウントは、組織の下に入るようになります。IAMや一部のセキュリティ設定は組織から引き継がれるようになり、全体の統制が容易になります。プロジェクトや請求先アカウントを個人で作成して利用すると、例え組織の管理者であっても見ることはできません。請求管理も難しくなるので、組織の利用を前提にしましょう。組織を設定するには?Google Cloud Identityを利用します。Google Cloud Identityは、IDaaS(ID as a Service)の一種ですが、Google Workspaceのように特定のドメインに紐付いたGoogleアカウントをGCP上で管理できます。(IDaaSではあるのですが、実際には有料サービスを機能制限されたGoogle Workspaceのような使い方になります)既にGoogle Workspaceを使っている場合には、Cloud Identityを有効にできます。また、Google Cloud Identityは無料で使えますので、Google Workspaceを使っていない企業の場合には、そちらを選択することになります。GCPの画面を開いている状態で「IAMと管理」→「IDと組織」を選択することで、Cloud Identityに登録することができます。場合によっては「基盤の設定」という画面が表示されます。指示に従ってステップを進めてください。この画面に到達したら、Google Workspaceを使っている方は「現在〜」の選択肢を、そうでない方は「初めて利用する」を選んでください。ドメインの所有権などの確認を済ませると、GCPのプロジェクト選択画面に「組織」が表示されるようになります。請求先アカウントGCP上の「組織」をプロジェクトとして選択した状態で、「お支払い」を選ぶことで、組織内の請求先アカウントの作成や管理ができるようになります。1つの請求先アカウントで複数のプロジェクトを紐付けることができます。スカイゲートテクノロジズでは、会計上の原価と販管費(通信費)のどちらに該当するか、さらにその中でどの部門が利用しているかによって請求先アカウントを分割して複数のプロジェクトを紐付けています。さて、これで組織全体の管理ができるようになりました。IAMの管理続いて、IAMの管理です。前章で書いた「組織」の有効化に伴って、組織全体でIAMを統制することができます。また、グループ(Google Group)を用いることで、複数のIAMプリンシパル(ユーザーやグループのこと)を束ねて管理できます。注意すべきロールGCPにおいては、リソースよりもプロジェクトのパーミッション、プロジェクトよりも組織のパーミッションが優先されるピラミッドのような権限継承となっています。組織で強力な権限をつけてしまうと、全プロジェクトの全リソースにアクセス可能になりがちです。次のロールは特に注意してください。「オーナー」ロールは、最も強力なロールの1つです。AWSにおけるルートアカウントに匹敵します。必要最低限のメンバーに付与しましょう。「組織ポリシー管理者」「請求先アカウント管理者」も同様に強力なポリシーです。組織全体に影響を及ぼす「組織のポリシー」や請求先アカウントの管理が可能です。こちらも最低限にしましょう。「編集者(Editer)」は、ほとんどのリソースに対して変更権限を持っています。こちらも組織全体に付与することは慎重に検討してください。ほとんどのユースケースにおいて、不要なはずです。よく間違えるのが「閲覧者(Viewer)」と「参照者(Browser)」です。 「閲覧者」は安易に付与してはいけません!「閲覧者」は、ストレージやDBの中身を閲覧することが可能な強力な権限がついています。単純にプロジェクトの存在が見えるだけ、リソースの存在が見えるだけ、という権限は「参照者」になりますので、間違えないようにしましょう。なお、弊社では、全エンジニアメンバーに「参照者」が付与されていますが、それ以外はプロジェクト毎に設定されています。「ストレージ管理者(Storage Admin)」も言うまでもなくGCSのストレージの中身を全て制御できてしまう危険なロールです。GCSに関しては、AWSのAmazon S3と異なり、バケットポリシーのような柔軟な制御が難しいため、プロジェクト毎・リソース毎にアクセス可能なパーミッション( storage.objects.get )を付与していく方が望ましいでしょう。サービスアカウントキーは最低限にするサービスアカウントキーとは、AWSで言うIAMユーザのアクセスキーのようなものです。GCPは、各サービスはAPIとなっており、プロジェクト毎に有効にします。ほとんどのAPIは、サービスアカウントと呼ばれるIAMプリンシパルによって、IAMベースの制御ができます。サービスアカウントは、Googleアカウントのように振る舞います。サービスアカウントとしてAPIを叩くには、秘密鍵によって署名されたメッセージが必要です。そのため、サービスアカウントには、サービスアカウントキーと呼ばれる秘密鍵がJSONなどでダウンロードできるようになっています。このサービスアカウントキーは、Google Cloud SDK (gcloudコマンド)などにセットすることで、プログラムがサービスアカウントとしてAPIを叩けるようになるわけです。ただ、このサービスアカウントキーが漏洩すると、AWSにおけるアクセスキーの漏えいと同様に、GCPのリソースへの不正アクセスや不正利用の原因となってしまいます。GCPでもAWSのAssume RoleやSTSのように一時的な認証情報を払い出すことができますが、あまり便利ではありません。そのため、サービスアカウントキーの発行は最低限にしましょう。ローカルのgcloudコマンドやSDKを使う場合には、gcloud authコマンドやApplication Default Credentialを使うことができます。$ gcloud auth login $ gcloud auth application-default loginこれによって、ローカル開発時には個人の権限の範囲内でgcloudコマンドやSDKを使うことができます。いかがだったでしょうか?GCPは、サービス内部で複雑な権限処理や認証・認可が働いており、すぐには理解できない概念も多くあります。特に「組織」や「請求先アカウント」は初めてGCPを使うチームにとってはハマリどころかもしれません。まずは全ての管理のもとになる「組織」を抑え、セキュリティの基本になるIAMやサービスアカウントキーの管理などをしっかり取り組むのがGCPのセキュリティの最初のステップと言えます。ぜひこの記事を参考に、GCPのセキュリティを強化してください。わからないことがあったり、不安が残る場合は、弊社ではお客様のAWS環境のセキュリティハーデニングや運用支援などを実施しています。 以下からお気軽にご相談ください!%3Cdiv%20class%3D%22iframely-embed%22%3E%3Cdiv%20class%3D%22iframely-responsive%22%20style%3D%22height%3A%20140px%3B%20padding-bottom%3A%200%3B%22%3E%3Ca%20href%3D%22https%3A%2F%2Fwww.skygate-tech.com%2Fprofessional-service%2Fsre-cloud-security-dev-sec-ops%22%20data-iframely-url%3D%22%2F%2Fiframely.net%2FRAJV0IR%3Fcard%3Dsmall%22%3E%3C%2Fa%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cscript%20async%3D%22%22%20src%3D%22%2F%2Fiframely.net%2Fembed.js%22%3E%3C%2Fscript%3E