# Meta DPA

Meta社のデータ保護評価の一環として、Shisho Cloudを使用したクラウドセキュリティポスチャ管理の実装に関する証拠を収集する必要がある場合があります。

このドキュメントでは、Meta社のデータ保護評価のために、クラウドセキュリティ監査の証拠を収集する方法を説明します。

:::note

このドキュメントは、Meta社によって公式に承認されたものではありません。Meta社のデータ保護評価の準備をする際には、このドキュメントを参照として使用してください。
これは、クラウドデータ保護のためにShisho Cloudがどのように機能するかを評価者に説明する際に役立つ場合があります。

:::

## 概要

以下のステップ(A)～(F)に従うことで、Shisho Cloudを使用したクラウドセキュリティポスチャ管理の実装に関する基本的な情報を確認できます。

```bash
$ EXPORT ORG_ID=flatt-security

# (A) すべてのリソースレビューが有効になっていることを表示する
####################
$ shishoctl workflow list --org $ORG_ID | jq -r

# (B) ワークフローが適切に実行されていることを示す
####################
$ shishoctl run list --org $ORG_ID | jq -r

# (C) プラットフォームデータを処理するための、Shisho Cloudとクラウドアカウント間の連携が現在利用可能であることを示す
####################
$ shishoctl integration aws list --org $ORG_ID | jq -r
$ shishoctl integration googlecloud list --org $ORG_ID | jq -r

# (D) プラットフォームデータを処理するクラウドアカウントがカバーされていることを示す
####################
$ shishoctl cloud-account list --org $ORG_ID | jq -r

# (E) これまでに確認されたリソースの数とセキュリティの状況を示す
####################
$ shishoctl finding aggregate per-resource-kind --org $ORG_ID | wc -l
# 補足: 特定のフレームワーク/ベンチマーク、例えばCISベンチマークに対するコンプライアンスレポートのみを表示したい場合は、代わりに以下のコマンドを実行できます。
$ shishoctl finding aggregate per-annotation-value "decision.api.shisho.dev:aws/cis-benchmark/v1.5.0" --org $ORG_ID | wc -l
$ shishoctl finding aggregate per-annotation-value "decision.api.shisho.dev:googlecloud/cis-benchmark/v1.3.0" --org $ORG_ID | wc -l

# (F) アクティブなクリティカル重大度の指摘事項がないことを示す。同様のコマンドを実行して、高重大度の指摘事項（SeverityHigh）を収集することもできます。
####################
$ shishoctl finding aggregate per-resource-kind --org $ORG_ID | jq -r '.entries[] | select(.highestSeverity == "SeverityCritical")'
# 補足: 特定のフレームワーク/ベンチマーク、例えばCISベンチマークに対するコンプライアンスレポートのみを表示したい場合は、代わりに以下のコマンドを実行できます。
$ shishoctl finding aggregate per-annotation-value "decision.api.shisho.dev:aws/cis-benchmark/v1.5.0" --org $ORG_ID | jq -r '.entries[] | select(.highestSeverity == "SeverityCritical")'
$ shishoctl finding aggregate per-annotation-value "decision.api.shisho.dev:googlecloud/cis-benchmark/v1.3.0" --org $ORG_ID | jq -r '.entries[] | select(.highestSeverity == "SeverityCritical")'
```

## 詳細

### (A) 有効化されたワークフローの一覧

以下のコマンドを実行すると、有効化されたワークフローの一覧が表示されます。

```bash
# (A) すべてのリソースレビューが有効になっていることを表示する
####################
$ shishoctl workflow list --org $ORG_ID | jq -r
```

出力例は以下のとおりです。

```json
[
  {
    "id": "notification-security",
    "snapshotID": "WS01H1SGHWKRKCWNPRNMXAQX16BP",
    "manifest": {
      "id": "notification-security",
      "version": "0.1.0",
      "name": "Prebundle: Notify important security events"
    }
  },
  // 省略...
```

[flatt-security/shisho-cloud-managed-workflows](https://github.com/flatt-security/shisho-cloud-managed-workflows) には、デフォルトで有効になっているワークフローのセットが含まれています。
CIS ベンチマーク、AWS Foundational Security Best Practices、Google Cloud Security Command Center (SCC) の指摘事項などに対応するワークフローが含まれています。

DPA の評価者は、評価の範囲を理解するために、この情報が役立つ場合があります。上記の GitHub リポジトリ内の各ワークフローには、ほとんどの組織のセキュリティ体制で必要とされるワークフローのセットである、プリバンドルワークフローが含まれています。
["prebundle-aws-config"](https://github.com/flatt-security/shisho-cloud-managed-workflows/blob/a3f9b6208b493ca176e2ec0761dad044eedb7dbb/workflows/cis-benchmark/aws-v1.5.0/config/manifest.yaml#L3) のようなリポジトリ内のすべての manifest ID がコマンド出力に存在する場合、すべてのプリバンドルワークフローが有効になっていることを示す証拠となります。

### (B) 最近のワークフローの実行

以下のコマンドを実行すると、最近のワークフローの実行結果が表示されます。

```bash
# (B) ワークフローが適切に実行されていることを示す
####################
$ shishoctl run list --org $ORG_ID | jq -r
```

出力例は以下のとおりです。

```json
[
  {
    "id": "WH01HCTCWPCPNW318JG0RSJ62PTD",
    "workflowId": "new-workflow-2",
    "workflowSnapshotId": "WS01HARP70FMPK8DWV32Y1NZ84A1",
    "startedAt": "2023-10-15T19:27:01Z",
    "runningState": "SCompleted",
    "cause": "IScheduled"
  },
  // 省略...
```

DPA の評価者は、ワークフローが適切に実行されていることを確認するために、この情報が役立つ場合があります。コマンド出力でワークフローが適切に実行されていることが報告され、その他の連携状況にも問題がない場合、クラウドセキュリティの状況を評価するのに十分なデータが収集され、積極的にレビューされていることを示す証拠となります。

### (C) 連携の健全性

以下のコマンドを実行すると、プラットフォームデータを処理するための、Shisho Cloudとクラウドアカウント間の連携の状態が表示されます。

```bash
# (C) プラットフォームデータを処理するための、Shisho Cloudとクラウドアカウント間の連携が現在利用可能であることを示す
####################
$ shishoctl integration aws list --org $ORG_ID | jq -r
$ shishoctl integration googlecloud list --org $ORG_ID | jq -r
```

出力例は以下のとおりです。

```json
[
  {
    "federationId": "AWSOIDC01GXBAY25BGGK741PTHH66HA9S",
    "availability": {
      "available": true,
      "unavailableReason": null
    },
    "body": {
      "__typename": "AWSRoleOIDCFederationBody",
      "roleArn": "arn:aws:iam::065248681517:role/shisho-cloud-integration",
      "type": "SINGLE_ACCOUNT"
    }
  },
  // 省略...
```

DPA の評価者は、`availability` フィールドを確認することで、プラットフォームデータを処理するための、Shisho Cloud とクラウドアカウント間の連携が適切に機能していることを理解できます。

### (D) 連携済みのスコープ

以下のコマンドを実行すると、これまでに確認されたクラウドアカウント（Google Cloud プロジェクト、AWS アカウントなど）が表示されます。

```bash
# (D) プラットフォームデータを処理するクラウドアカウントがカバーされていることを示す
####################
$ shishoctl cloud-account list --org $ORG_ID | jq -r
```

出力例は以下のとおりです。

```json
{
  "pageInfo": {
    "totalEntries": 240
  },
  "entries": [
    {
      "id": "aws-account|779392188153",
      "displayName": "779392188153",
      "highestSeverity": "SeverityCritical",
      "actionNeededDecisions": 124,
      "__typename": "AWSAccountResource"
    },
  // 省略...
```

DPA の評価者は、評価の範囲を理解するために、この情報が役立つ場合があります。アカウント一覧には、プラットフォームデータを処理するためのアカウントが含まれている必要があります。

### (E) リソースタイプごと、またはコンプライアンス項目ごとの指摘事項

以下のコマンドを実行すると、これまでに確認されたリソースの数とセキュリティの状況が表示されます。

```bash
# (E) これまでに確認されたリソースの数とセキュリティの状況を示す
####################
$ shishoctl finding aggregate per-resource-kind --org $ORG_ID | wc -l
# 補足: 特定のフレームワーク/ベンチマーク、例えばCISベンチマークに対するコンプライアンスレポートのみを表示したい場合は、代わりに以下のコマンドを実行できます。
$ shishoctl finding aggregate per-annotation-value "decision.api.shisho.dev:aws/cis-benchmark/v1.5.0" --org $ORG_ID | wc -l
$ shishoctl finding aggregate per-annotation-value "decision.api.shisho.dev:googlecloud/cis-benchmark/v1.3.0" --org $ORG_ID | wc -l
```

最初のコマンド `shishoctl finding aggregate per-resource-kind --org $ORG_ID` は、これまでに確認されたリソースの数とセキュリティの状況を表示します。例えば、以下のように表示されます。

```json
{
  "entries": [
    {
      "kind": "aws-account",
      "count": 4,
      "decisions": 123,
      "decisionGroups": 31,
      "allowedDecisions": 24,
      "deniedDecisions": 99,
      "neededActions": 85,
      "highestSeverity": "SeverityHigh"
    },
    {
      "kind": "aws-cloudfront-distribution",
      "count": 6,
      "decisions": 36,
      "decisionGroups": 6,
      "allowedDecisions": 15,
      "deniedDecisions": 21,
      "neededActions": 20,
      "highestSeverity": "SeverityCritical"
    },
    // 省略...
```

各フィールドは、以下の情報を示しています。

- `kind`: リソースタイプ
- `count`: スキャンされたリソースの総数 (リソースタイプごと)
- `decisions`: Shisho Cloud における当該リソースタイプに対する*判定*の数。
  - ここでの*判定*とは、当該リソースが特定のコンプライアンス項目に準拠しているかどうかを表すものです。
  - 簡単に言うと、*判定*とは*1 つのリソースを 1 つの観点からレビューした結果*と考えることができます。例えば、ある S3 リソースが 2 つの CIS ベンチマーク項目でレビューされた場合、その S3 リソースには 2 つの判定が存在します。
- `decisionGroups`: 当該リソースタイプに対する*判定グループ*の数。
  - ここでの*判定グループ*とは、判定をそのタイプで集約したものです。
  - 簡単に言うと、*判定グループ*とは*レビューのポイント*と考えることができます。例えば、いくつかの S3 リソースが 2 つの CIS ベンチマーク項目でレビューされた場合、リソースタイプ S3 に対して 2 つの判定グループがカウントされます。
- `allowedDecisions`: 当該リソースタイプに対する*許可*判定の数。
  - 許可判定とは、リソースが特定のコンプライアンス項目に準拠していることを表す判定です。
- `deniedDecisions`: 当該リソースタイプに対する拒否判定の数。
  - 拒否判定とは、リソースが特定のコンプライアンス項目に準拠*していない*ことを表す判定です。
  - この値が 0 より大きい場合、一部のリソースが一部のコンプライアンス項目に準拠していないことを意味します。ただし、必ずしも注意が必要な指摘事項があることを意味するわけではありません。詳細については、`neededActions` および `highestSeverity` を参照してください。
- `neededActions`: 当該リソースタイプに対する必要なアクションの数。
  - Shisho Cloud のユーザーは、クラウドセキュリティの状況に関係のない指摘事項を承認することができます。例えば、S3 バケットが意図的に公開されている場合、ユーザーは S3 バケットが公開されているという指摘事項を正当に承認することができます。
  - 必要なアクションの数は、拒否され、**かつ**承認されていない判定の数です。
  - この値が 0 より大きい場合、注意が必要な指摘事項があることを意味します。
- `highestSeverity`: 当該リソースタイプに対する必要なアクションの中で最も高い重要度。

### (F) リソースタイプごと、またはコンプライアンス項目ごとの必要なアクション

以下のコマンドを実行して出力が返された場合、注意が必要な指摘事項があることを意味します。
そうでない場合は、注意が必要な指摘事項がないことを意味します。

```bash
# (F) アクティブなクリティカル重大度の指摘事項がないことを示す。同様のコマンドを実行して、高重大度の指摘事項（SeverityHigh）を収集することもできます。
####################
$ shishoctl finding aggregate per-resource-kind --org $ORG_ID | jq -r '.entries[] | select(.highestSeverity == "SeverityCritical")'
# 補足: 特定のフレームワーク/ベンチマーク、例えばCISベンチマークに対するコンプライアンスレポートのみを表示したい場合は、代わりに以下のコマンドを実行できます。
$ shishoctl finding aggregate per-annotation-value "decision.api.shisho.dev:aws/cis-benchmark/v1.5.0" --org $ORG_ID | jq -r '.entries[] | select(.highestSeverity == "SeverityCritical")'
$ shishoctl finding aggregate per-annotation-value "decision.api.shisho.dev:googlecloud/cis-benchmark/v1.3.0" --org $ORG_ID | jq -r '.entries[] | select(.highestSeverity == "SeverityCritical")'
```

## 他のツールとの比較

### SecurityHub のエビデンス

Meta DPA では、SecurityHub を使用したクラウドセキュリティ監視の実装に関する証拠を収集するための手順例として、以下のようなものが挙げられています。

```bash
# (1) AWS Foundational Security Best Practices が有効になっていることを表示する
$ aws securityhub get-enabled-standards
{
    "StandardsSubscriptions": [
        {
            "StandardsSubscriptionArn": "arn:aws:securityhub:us-west-1:043954759379:subscription/aws-foundational-security-best-practices/v/1.0.0",
            "StandardsArn": "arn:aws:securityhub:us-west-1::standards/aws-foundational-security-best-practices/v/1.0.0",
            "StandardsStatus": "READY"
        }
    ]
}

# (2) プラットフォームデータを処理するために使用される代表的なリージョンに対してアグリゲーターが設定されていることを表示する
$ aws securityhub list-finding-aggregators

$ aws securityhub get-finding-aggregator --finding-aggregator-arn '{REPLACE-WITH-FINDING-AGGREGATOR-ARN}'

# (3) アクティブな指摘事項を取得し、出力の行数をカウントすることで、ルールセットが実行されていることを示す
$ aws securityhub get-findings --query 'Findings[?RecordState==`ACTIVE`]' --filters '{"GeneratorId":[{"Value": "aws-foundational-security","Comparison":"PREFIX"}]}' --output text | wc -l

# (4) アクティブなクリティカル重大度の指摘事項がないことを示す
$ aws securityhub get-findings --query 'Findings[?Severity.Label==`CRITICAL`] | [?RecordState==`ACTIVE`] | [*][Title, GeneratorId]' --filters '{"GeneratorId":[{"Value": "aws-foundational-security","Comparison":"PREFIX"}]}'
```

各手順は、上記の手順に対応しています。詳細を以下に示します。

- (1) は (A) に対応しています。
- (2) は (B)、(C)、(D) に対応しています。
- (3) は (E) に対応しています。
- (4) は (F) に対応しています。

### ScoutSuite のエビデンス

Meta DPA では、ScoutSuite を使用したクラウドセキュリティ監視の実装に関する証拠として、以下のような出力例が挙げられています。

```json
{
  "last_run": {
    "ruleset_about": "This ruleset consists of numerous rules that are considered standard by NCC Group. The rules enabled range from violations of well-known security best practices to gaps resulting from less-known security implications of provider-specific mechanisms. Additional rules exist, some of them requiring extra-parameters to be configured, and some of them being applicable to a limited number of users.",
    "ruleset_name": "default",
    "run_parameters": {
      "excluded_regions": [],
      "regions": [],
      "services": [],
      "skipped_services": []
    },
    "summary": {
      "acm": {
        "checked_items": 4,
        "flagged_items": 2,
        "max_level": "warning",
        "resources_count": 2,
        "rules_count": 2
      },
      // ... 省略 ...
    }
    "time": "2022-08-22 11:42:25-0400",
    "version": "5.11.0"
  }
}
```

各フィールドは、上記の手順に対応しています。詳細を以下に示します。

- `ruleset_name` は (A) に対応しており、`ruleset_about` は [flatt-security/shisho-cloud-managed-workflows](https://github.com/flatt-security/shisho-cloud-managed-workflows) 内の Markdown ドキュメントに対応しています。
- `run_parameters` は、Shisho Cloud ユーザーがワークフローをカスタマイズしている場合は `shishoctl workflow describe <ワークフロー名>` の出力に対応します。そうでない場合は、[flatt-security/shisho-cloud-managed-workflows](https://github.com/flatt-security/shisho-cloud-managed-workflows) の内容に対応します。
- `summary.<service_name>.checked_items` は、(E) の `decisions` に対応しています。
- `summary.<service_name>.flagged_items` は、(E) の `allowedDecisions`、`deniedDecisions`、`neededActions` に対応しています。最も近いのは、注意が必要な指摘事項の数を表す `neededActions` です。
- `summary.<service_name>.resources_count` は、(E) の `count` に対応しています。
- `summary.<service_name>.rules_count` は、(E) の `decisionGroups` に対応しています。
- `summary.<service_name>.max_level` は、(E) の `highestSeverity` に対応しています。
- `time` は (B) に対応しています。
