[Cloud OnAir] Google Cloud でセキュアにアプリケーションを開発しよう 2019年3月7日 放送
- 2. Cloud OnAir
本日の放送の位置づけ
GCP インフラ / サービス自体のセキュリティ
組織として適切に運用するための
セキュリティ
各アプリケーション / データを
適切に開発・運用するためのセキュリティ
責任共有モデルにおける
境界線
個別プロジェクトチームと
全社クラウド管理者の
境界線
このセミナーの
注力ポイント
- 5. Google Cloud の
セキュリティ機能が評価され、
Forrester Research の
“Public Cloud Platform
Native Security, Q2 2018” レポートでリー
ダーに選出される
The Forrester Wave™: Public Cloud Platform Native Security Q2 2018. The
Forrester Wave™ is copyrighted by Forrester Research, Inc. Forrester and
Forrester Wave™ are trademarks of Forrester Research, Inc. The Forrester
Wave™ is a graphical representation of Forrester's call on a market and is
plotted using a detailed spreadsheet with exposed scores, weightings, and
comments. Forrester does not endorse any vendor, product, or service
depicted in the Forrester Wave. Information is based on best available
resources. Opinions reflect judgment at the time and are subject to change.
- 14. Cloud OnAir
Identity and Access Management (IAM)
誰が どういう操作を 何に対して どういう条件下で
Google アカウント
Google グループ
サービスアカウント
役割
組織 / フォルダ
プロジェクト
リソース
IP
時間
制御
内容
具体例
- 15. Cloud OnAir
IAM - グループに対して役割を割り当てる
ユーザ グループ 役割 リソース
プロジェクト A
プロジェクト B
インスタンス管理者
BigQuery ユーザ
太郎 データサイエンティスト
- 16. Cloud OnAir
IAM - サービスアカウント
● アプリケーションやサーバのための ID
● サービスアカウント自体もリソース
○ 人が 「サービスアカウントとして実行」
することもできる
● サービスアカウントによって使われる
キーは自動的に管理される
● ユーザがキーを作成し
ダウンロードすることも可能
○ その場合、キーの保存や
ローテーションなど、
適切な管理を徹底する https://cloud.google.com/iam/docs/understanding-service-accounts
- 17. Cloud OnAir
IAM - 役割と権限
権限の集合
compute.instances.delete
compute.instances.get
compute.instances.list
compute.instances.setMachineType
compute.instances.start
compute.instances.stop
役割
Instance Admin
命名規則
<サービス名>.<リソース>.<動詞>
API との関係
基本的にはメソッドと 1:1
- 18. Cloud OnAir
IAM - 3 種類の役割
Primitive roles
プロジェクト単位の権限セット
3 つのロール
1 サービス単位の権限セット
サービスごとに数はいろいろ
カスタムな権限セット
● オーナー
● 編集者
● 閲覧者
● <サービス名>管理者
● <サービス名>編集者
● <サービス名>閲覧者
など
● バケットの一覧は
取得できないが、特定の
バケットには書き込める
● GCE インスタンスは
作れるが外部IP は
付けられない
基本の役割 事前定義された役割 カスタムの役割
最小権限の原則: より細かい役割で必要最低限の権限のみ付与する
- 19. Cloud OnAir
リソース階層と IAM
● 上位で設定されたものは下位に継承される
● 権限委譲できる単位でフォルダを分ける
example.com
A 部 B 部
チーム Eチーム Dチーム C
Project HProject GProduct F
VM バケット データセット
組織
フォルダ
プロジェクト
リソース
- 20. Cloud OnAir
Cloud IAM Conditions Private Beta
● アクセスする際の属性が該当した時のみ
その役割が付与される
● Private Beta で設定可能な属性は下記
○ リソース属性
■ タイプ
● 例. google.cloud.compute.Instance
■ サービス
● 例. google.cloud.storage
■ 名前
● 例. projects/_/buckets/exampleco-site-assets-
○ リクエスト属性
■ 時間
■ 送信元 IP アドレス
https://cloud.google.com/iam/docs/conditions-overview
- 24. Cloud OnAir
Firewall Rules
● ファイアウォール (許可 / 不許可ルール)
● ステートフル (コネクション単位)
● 柔軟なグルーピング方式: タグ
● 分散: ホストでの実施 → 輻輳ポイントが無い
FWFW
Compute
Engine
Compute
Engine
Compute
Engine
Red タグ Blue タグ
まめ知識:ファイアウォールの
設定を変更しても、すでに存在する
接続は切断されません。
Cloud Firewall
Rules
Source:
● IP レンジ
● サブネット
● サービスアカウント
● タグ
Target:
● ネットワーク内
インスタンス
● サービスアカウント
● タグ
プロトコル、ポート
- 25. Cloud OnAir
Shielded VMs Beta
rootkit や bootkit なども防御する
セキュリティコントロールにより堅牢化された
仮想マシン
特権の昇格、リモート攻撃、悪意ある内部者などの
高度な脅威から VM を保護
セキュアで測定可能なブート、仮想 TPM(Trusted
Platform Module)、UEFI ファームウェア、および
完全性の監視により、ワークロードが信頼され、
検証可能であることを保証
改ざん防止のために証明書を使用し VM の完全性を
検証
- 26. Cloud OnAir
Container Optimized OS
● Google Compute Engine, Kubernetes Engine で利用可能なセキュア・軽量 OS
○ Chromium OS ベース
○ 最低限のプロセスのみ動作
○ ブート時、ブートイメージの改ざんチェック
○ 大部分が read only もしくは ephemeral fs
○ コンテナは sandbox で動作
○ AppArmor によるプロセス制限
○ サービス listen ポートの最小化
○ 自動 OS アップデート
- 27. Cloud OnAir
2019 年 2 月 11 日にコンテナランタイム “runc” に、
ホスト上の root 権限を取得できてしまう脆弱性が
見つかったが、Container Optimized OS では
この脆弱性による悪用は不可能だったため、
特別なアクションを必要としなかった。
コンテナランタイム “runc” の脆弱性 (CVE-2019-5736)
“Ubuntu ノードのみが影響を受けます。
COS ノードは影響を受けません。 ”
https://cloud.google.com/kubernetes-engine/docs/security-bulletins#february-11-2019-runc
- 28. Cloud OnAir
Container Registry 脆弱性スキャン Beta
Container Registry 脆弱性ス
キャンは、CI / CD
パイプラインの早い段階で
セキュリティ上の脆弱性を
特定
Ubuntu、Debian、Alpine のパッケージにある
脆弱性を特定
常時更新されるデータベースにより、スキャンが
常に最新であることを保証
検出可能な脆弱性を拡張するために、
既存のツールをプラグインすることが可能
- 29. Cloud OnAir
Binary Authorization Beta
Binary Authorization は、
信頼されたコンテナ
イメージのみを GKE 上に
デプロイすることを
保証するセキュリティ
コントロール機能
検証済みイメージのみが、ビルドリリース
プロセスと統合可能
Kubernetes Engine にデプロイする前に
シグネチャの検証を強制することが可能
開発中に、信頼された認証局により署名された
イメージが必要となる
- 30. Cloud OnAir
App Engine Standard 環境や、
Cloud Load Balancing (HTTPS) に
アクセスする際の認証・認可を
提供する。
認証情報を持たないユーザが
アクセスした際は、Google
アカウントのログイン画面が表示される。
当該ユーザが権限を持っていた場合に
リソースへのアクセスを許可する。
Identity-Aware Proxy (IAP)
- 31. Cloud OnAir
様々なサードパーティの Identity を
使った認証を、アプリケーションに簡単
に組み込むことができる。
広く使われている Firebase を
ベースに構築されており、
二要素認証や多くの認証手法
(Social, OIDC, SAML 等) と
Client / Server SDK を提供する。
CICP (Cloud Identity for Customers and Partners) Beta
Customer
and partner
user accounts
CICP
Your application
https://cloud.google.com/identity-cp/
- 32. Cloud OnAir
Cloud Armor
ユースケース
● インフラに対する DDoS 攻撃対策
● IP ブラックリスト/ホワイトリスト
● 地域 (Geo) ベースのアクセス制限 Beta
● SQLi / XSS 防御 Alpha
● カスタムルールの作成 Alpha
● Stackdriver による証跡
スケーラブルな DDoS 対策 / WAF
https://cloud.google.com/armor/
- 37. Cloud OnAir
VPC Service Controls Beta
GCP サービス内の
データ
境界線外の
VPC
境界線内の
VPC ネットワーク
VM to
GCP service
GCP service
to
GCP service
サービス境界線
● 権限があってもアクセスできない
サービス境界線を定義
● サービス境界線内では通常の
API アクセスが可能
● 境界線をまたぐ API コールを止め、
不正なデータの移動を防ぐ
○ 認証情報漏洩時の不正利用防止
○ 悪意ある内部ユーザのデータ
持ち出し防止
https://cloud.google.com/vpc-service-controls/
- 38. Cloud OnAir
Access Context Manager Beta
GCP サービス内の
データ
境界線内の
VPC ネットワーク
サービス境界線
細かなアクセス要件 (Access Level) を
設定することでサービス境界線を
またいだアクセスを許可できる。
Access Levels は Access Context
Manager で組織単位で設定可能
● デバイス、OS
● IP アドレス
● IAM ユーザ、サービスアカウント
Access Context Manager
Access Policy
Access Level
Access Level
AND
AND...
https://cloud.google.com/access-context-manager/docs/overview
- 39. Cloud OnAir
Google Cloud における暗号化
デフォルトで
全てのデータを暗号化
Google Cloud への接続は、
TLS 暗号化が必須 データはチャンクに
分割され、それぞれが
異なる暗号鍵で暗号化
データ暗号化キーは、
キー暗号化キーで
ラップ
暗号化されたチャンクと、
ラップされた暗号化キーは、Google
のストレージインフラ
全体に分散
データ暗号化キー
Data Encryption Key
(DEK)
キー暗号化キー
Key Encryption Key
(KEK)
- 40. Cloud OnAir
キー暗号化キー (KEK) のオプション
Customer-supplied encryption keys
(CSEK)
デフォルトの Google マネージドキー Customer-managed encryption keys
(CMEK)
Google による自動的な管理 きめ細やかなカスタマーによる管理
Key
Management Service (KMS)
何も設定しない場合に用いられる。
鍵は Google 内部で自動的に管理され、
リソースへのアクセス時には自動的かつ
透過的に暗号化・復号化が行われる。
Cloud KMS を使って鍵を生成する。
この鍵はカスタマーによって管理 (生成、
ローテーション、破棄など ) できる。
プロジェクトから独立しているため、
鍵の管理者と利用者を分離することが
可���。
API コール時にカスタマーの所有する
Base64 でエンコードされた AES-256 を
指定することができる。
指定された鍵は Google Cloud において
メモリ上で使われ、ストレージに
書き込まれることはない。
https://cloud.google.com/security/encryption-at-rest/
- 41. Cloud OnAir
VPC Flow Logs
● VPC 内部の通信フローのログを取得
○ Source / Destination IP, Port,
IANA Protocol Number
○ 各種メトリクス
○ 外部への通信もログ可能
■ VM - VM
■ VM - External
○ 5 秒間の統計値
○ 有効にしてもパフォーマンスへ
影響なし
https://cloud.google.com/vpc/docs/using-flow-logs
- 42. Cloud OnAir
以下の監査ログが Stackdriver Logging で参照可能
Cloud Audit Logging
Admin Activity
Logs
System Event Logs Data Access Logs Access Transparency
Logs
概要 リソースの
作成/削除/変更
設定の変更
Compute Engine の
システムベント
例. ライブマイグレーション
リソース情報の取得
データの読み書き
Google サポートや
エンジニアのアクセス
デフォルト オン オン オフ (除 BigQuery) オフ
保持期間 400 日 400 日 30 日 30 日
課金 無償 無償 有償 有償
利用可能 全ユーザ 全ユーザ 全ユーザ Enterprise サポート
4 以上の Development
/ Production roles
- 43. Cloud OnAir
監査ログの管理と保存
Google Cloud Storage (GCS) で保存
● 長期保存のため GCS へ
エクスポート可能
● バケットロック機能を使用して保持
ポリシーを設定し、削除や上書きを
防止
● 保持ポリシーのロックによって不変
ストレージを作成可能
一度ロックすると元に戻せません
https://cloud.google.com/storage/docs/bucket-lock
1 つのプロジェクトで集中管理
● 複数のプロジェクトがある時、ログ
を管理用のプロジェクトに
収集・監査
プロジェクト A
プロジェクト B
管理者プロジェクト
BigQuery
Cloud
Storage
- 44. Cloud OnAir
Access Transparency Logs
お客様のデータに
アクセスした手段や
理由を記録し表示
Google エンジニアによる
GCP 上の顧客データに対する
操作の記録を
企業のユーザ様へ
ほぼリアルタイムでアクセスできるよう
API や UI を提供します
Google Cloud では、契約上の義務を
履行するために必要な場合以外の
理由でお客様のデータに
アクセスすることはありません。 https://cloud.google.com/access-transparency/
- 47. Cloud OnAir
まとめ
Google Cloud セキュリティ
アプリケーション データインフラ権限管理
グループを使って
役割を管理する
必要最小限の権限を
割り当てる
あらゆるレイヤーにおいて、徹底的な防御がデフォルトで ON
責任共有モデル
セキュリティに関する
サービスを活用する
脆弱性の発見・対策
意図したアクセスに
限定する
データへのアクセスや
移動を適切に制限する
ポリシーに沿った
暗号化を選択する
ログを活用する
Cloud
IAM
Container
Registry
Cloud
Armor
Cloud Firewall
Rules
Identity-Aware
Proxy
Stackdriver
Key Management
Service
VPC Service
Controls