- 
									タグ
									タグ
- アーキテクト
 - アジャイル開発
 - アプリ開発
 - インシデントレスポンス
 - イベントレポート
 - カスタマーストーリー
 - カルチャー
 - 官民学・業界連携
 - 企業市民活動
 - クラウド
 - クラウドインテグレーション
 - クラブ活動
 - コーポレート
 - 広報・マーケティング
 - 攻撃者グループ
 - 子育て、生活
 - サイバー救急センター
 - サイバー救急センターレポート
 - サイバー攻撃
 - サイバー犯罪
 - サイバー・グリッド・ジャパン
 - サプライチェーンリスク
 - システム開発
 - 趣味
 - 障がい者採用
 - 初心者向け
 - 白浜シンポジウム
 - 情シス向け
 - 情報モラル
 - 情報漏えい対策
 - 人材開発・教育
 - 診断30周年
 - スレットインテリジェンス
 - すごうで
 - セキュリティ
 - セキュリティ診断
 - セキュリティ診断レポート
 - 脆弱性
 - 脆弱性管理
 - ゼロトラスト
 - 対談
 - ダイバーシティ
 - テレワーク
 - データベース
 - デジタルアイデンティティ
 - 働き方改革
 - 標的型攻撃
 - プラス・セキュリティ人材
 - モバイルアプリ
 - ライター紹介
 - ラックセキュリティアカデミー
 - ランサムウェア
 - リモートデスクトップ
 - 1on1
 - AI
 - ASM
 - CIS Controls
 - CODE BLUE
 - CTF
 - CYBER GRID JOURNAL
 - CYBER GRID VIEW
 - DevSecOps
 - DX
 - EC
 - EDR
 - FalconNest
 - IoT
 - IR
 - JSOC
 - JSOC INSIGHT
 - LAC Security Insight
 - NDR
 - OWASP
 - SASE
 - Tech Crawling
 - XDR
 
 
近年のマルチクラウド化に伴い、分析したいデータが分散配置され、お困りではないでしょうか?
クラウドベンダが増加し、様々な環境でシステムが構築されています。各クラウドベンダによって特徴があるため、より最適化されたシステムを構築するには、複数のクラウドベンダのサービスを組み合わせたシステムが求められます。
今回はマルチクラウド環境で分散するデータに対して一元的に分析を行うための機能を利用した際に、設定した内容と途中躓いたエラーについて共有します。
今回検証を行う環境ではシステムの主要部分はAWS上で稼働していると想定し、データはAWS上に配置しています。データの管理にはデータ分析基盤に秀でているGoogle Cloudを利用します。利用するサービスとしては、Google CloudのDWH(データウェアハウス)として多くの方が利用するBigQueryのサービス「BigQuery Omni」を利用します。概要図は以下になります。
  BigQuery Omniの概要
BigQuery OmniはGoogle Cloudのサービスの1つです。BigQuery Omniでは、Amazon Simple Storage Service(Amazon S3)やAzure Blob Storage上にデータを保存したままデータ分析できるため、BigQueryのインタフェースから統合的なデータ管理が可能です。
データ分析の際にGoogle Cloud上にデータを転送する必要はなく、またクエリの結果を直接外部ストレージに書き込むことも可能です。クラウド間でデータのコピーは行われないため、データ移動にかかる料金を抑え、管理のしやすさやセキュリティ面でも利点があります。
※ BigQuery Omni の概要 | Google Cloud
AWS側での操作
BigQuery OmniでS3上のデータ分析を行うにあたり、AWS側で必要な作業は以下の通りです。
- Step1. Amazon S3バケットを作成し、データを格納
 - Step2. IAMポリシーとIAMロールの作成
 
Step1. Amazon S3バケットを作成し、データを格納
Amazon S3バケットの作成
CloudFormationにてS3バケットを作成します。
バケット作成時に注意が必要なAWSリージョンは、2023年12月現在BigQuery Omniにて下記の通り対応しています。
| AWSリージョン名 | AWSリージョン名 | AWS リージョン  | 
        BigQuery リージョン  | 
      
|---|---|---|---|
| AWS - US East (北バージニア)  | 
        aws-us-east-1 | us-east4 | |
| AWS 米国西部 (オレゴン)  | 
        aws-us-west-2 | us-west1 | |
| AWS - アジア太平洋(ソウル) | aws-ap-northeast-2 | asia-northeast3 | |
| AWS - ヨーロッパ (アイルランド)  | 
        aws-eu-west-1 | europe-west1 | 
今回は「米国東部(バージニア北部)us-east-1」リージョンにS3バケットを作成します。
(!)CloudFormationでS3バケット作成した際のトラブル
CloudFormationスタックは作成するリソースと同じリージョンを指定する必要があります。「us-east-1」リージョンにスタックを作成する予定でしたが、間違えて「ap-northeast-1」リージョンに作成してしまったため、削除し再度同名バケットを作成しようとしたところ下記エラーがでました。
A conflicting conditional operation is currently in progress against this resource. Please try again.
  エラーの原因はバケット削除リクエスト後に削除キューには入りますが、すぐに完全削除されないためです。
  2時間ほど経過してから同名バケットの作成を試みたところ、作成できました。
CloudFormationでS3とIAMのリソース作成用スタックを作成します。CloudFormationのパラメータは以下の通りです。
| 項目 | 項目 | 値 | 備考 | 
|---|---|---|---|
| スタック名 | lacw-S3-IAM | 任意の値 | |
| リージョン | us-east-1 | 作成するリソースと 同じリージョンを指定  | 
      
#-------------------------------------------------
# S3
#-------------------------------------------------
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties: 
      AccessControl: Private
      BucketEncryption:
        ServerSideEncryptionConfiguration:
          - ServerSideEncryptionByDefault:
              SSEAlgorithm: AES256
      BucketName: lacw-bucket
      LifecycleConfiguration:
        Rules:
        - Id: AutoDelete
          Status: Enabled
          AbortIncompleteMultipartUpload:
            DaysAfterInitiation: 7
          ExpirationInDays: 365
          NoncurrentVersionExpiration:
            NoncurrentDays: 7
      VersioningConfiguration:
        Status: Suspended
  データ配置
用意したデータをS3バケットに格納します。今回はCSVで作成したデータを配置しました。
Step2. IAMポリシーとIAMロールの作成
CloudFormationにてIAMロールを作成します。
最大セッション時間は12時間としています。ポリシーは、先ほど作成したバケット内のオブジェクトの閲覧、取得を許可しています。
「accounts.google.com:aud」パラメータにはのちに作成する「BigQuery Google ID」を指定します。
accounts.google.com:aud: !Sub ${BigQueryID}
#-------------------------------------------------
# IAM Role
#-------------------------------------------------
# S3 access Role
  S3AccessRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: lacw-googlecloud-connect-role
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Federated: accounts.google.com
            Action:
              - sts:AssumeRoleWithWebIdentity
            Condition:
              StringEquals:
                accounts.google.com:aud: !Sub ${BigQueryID} 
      MaxSessionDuration: 43200
      Policies:
        - PolicyName: lacw-s3-access-policy
          PolicyDocument:
            Version: "2012-10-17"
            Statement:
              - Effect: Allow
                Action:
                  - s3:ListBucket
                Resource: "arn:aws:s3:::lacw-bucket"
              - Effect: Allow
                Action:
                  - s3:GetObject
                Resource: "arn:aws:s3:::lacw-bucket/*"
  IAMロール作成後、Google Cloud側での接続で必要となるIAMロールARNを控えておきます。
arn:aws:iam::{AWSアカウントID}:role/lacw-googlecloud-connect-role
  Google Cloud側での操作
BigQuery OmniでS3上のデータ分析を行うにあたり、Google Cloud側で必要な作業は以下の通りです。
- Step1. 外部データソースの作成
 - Step2. データセットの作成
 - Step3. テーブルの作成
 - Step4. クエリの実行
 
Step1. 外部データソースの作成
「外部データソースの作成」では「BigQuery Omni経由」を指定し、AWS側で作成したS3にアクセスするためのロールを指定します。またリージョンはAWSと合わせる必要があります。
| 項目 | 項目 | 値 | 備考 | 
|---|---|---|---|
| 接続タイプ | AWS上のBigLake(BigQuery Omni経由) | ||
| 接続ID | aws-lacw-s3 | 任意の値 | |
| リージョン | aws-us-east-1 | S3のリージョンに合わせる必要あり | |
| AWSロール ID  | 
        arn:aws:iam::******** | AWSで作成したロールを指定 | 
    Step2. データセットの作成
「データセットの作成」は以下のように行います。
| 項目 | 項目 | 値 | 備考 | 
|---|---|---|---|
| データセット ID  | 
        test_dataset | 任意の値 | |
| ロケーションタイプ | リージョン(aws-us-east-1) | S3のリージョンに合わせる | 
    (!)データセット作成時のトラブル
データセット作成時の入力内容は少ないですが、検証時はここでエラーがでました。
データセットを作成できませんでした aws-us-east-1 violates constraint constraints/gcp.resourceLocations on the resource projects/gcp-lac-project-0015/datasets/test
  エラーの原因としてはGoogle Cloud側の組織ポリシーでした。リソースのロケーション制限により利用可能なリージョンが制限されています。BigQuery Omniを利用できるリージョンは普段利用していないリージョンであり、今回利用した環境ではそのリージョンの利用が許可されていませんでした。対応としてはロケーション制限のポリシーで許可リストに追加することで解決しました。
※ リソース ロケーションの制限 | Resource Manager のドキュメント | Google Cloud
Step3. テーブルの作成
「テーブルの作成」では再度AWSに合わせた設定を行います。
「テーブルの作成元」で「Amazon S3」を選択し、「S3パス」では実際に分析を行いたいCSVファイルのパスを指定します。
  外部テーブルの接続IDではStep1で作成した外部データソースを指定します。
| 項目 | 項目 | 値 | 備考 | 
|---|---|---|---|
| テーブルの作成元 | Amazon S3 | ||
| S3パスを選択 | s3://******** | AWS上から取得したパスを指定 | |
| ファイル形式 | CSV | ||
| データセット | test-dataset | Step2で作成したデータセットを指定 | |
| テーブル | test-table | 任意の値 | |
| テーブルタイプ | 外部テーブル | ||
| 接続ID | Aws-us-east-1.aws-lacw-s3 | Step1で作成した外部接続を選択 | |
| スキーマ | 自動検出 | 
    (!)テーブル作成時のトラブル
テーブルの作成作業でエラーが発生しました。
権限がありません。管理者にお問い合わせください。元のエラー メッセージ: テーブルを作成できませんでした: Access Denied: Dataset gcp-lac-project-0015:test_dataset: Permission bigquery.tables.create denied on dataset gcp-lac-project-0015:test_dataset (or it may not exist).
  内容としてはテーブルを作成しようとしているアカウントでBigQueryに関するロールが付与されていなかったため発生したエラーです。今回は作業していたアカウントに対して「BigQuery Admin」のロールを付与して対応しました。
Step4. クエリの実行
実際にクエリを実行してみます。単純なSelect文ですが実行すればS3上に保存したCSVのデータを取得できました。
また今回取り扱ったデータには日本語が含まれているのですが、文字化けが発生しました。扱っていたファイルがsjisで作成されていたため、UTF-8に変換してS3上にアップロードし直すことで、文字化けは解決して漢字も正しく表示されるようになりました。
    スキーマの自動検出を有効化したことで、IntやDate型について自動的に判定されました。誤判定される場合は手動で定義する必要があります。
    別のデータファイルを元に分析したい場合はStep3とStep4を再度行えば複数のテーブルに対してクエリ実行が可能です。
利用料金
BigQuery Omniは以前までは「定額」プランでしか利用できませんでした。利用するには通常のオンデマンドの料金とは別に時間単位で課金が発生するBigQuery Reservationsのスロット購入が必要だったため、少し敷居が高かったように感じます。
しかし2023年12月現在、BigQuery Omniはオンデマンドの料金プランをサポートしています。そのため今回の検証のような少量のデータ処理ではBigQuery Reservationsのスロット購入する必要はなく、BigQueryの利用全体を通じても無料で検証できました。
おわりに
今回の記事では、BigQuery Omniを使ってS3にあるデータをBigQueryに外部テーブルとして表示できました。私自身はAWSしか触ったことがなかったのですが、Google Cloud側の操作も難航することなく検証を進められました。
普段はAWS、Azureしか使用することがないといった方も、BigQueryを使ってデータ分析をしてみてはいかがでしょうか。
プロフィール
      CCoE部AWS推進チーム
      CCoE部AWS推進チームではAWSの各サービスを最大限活用するために日々技術検証や教育プログラムの検討を行っております。その活動のなかで得られた有益な情報を外部へ発信していきます。
タグ
- アーキテクト
 - アジャイル開発
 - アプリ開発
 - インシデントレスポンス
 - イベントレポート
 - カスタマーストーリー
 - カルチャー
 - 官民学・業界連携
 - 企業市民活動
 - クラウド
 - クラウドインテグレーション
 - クラブ活動
 - コーポレート
 - 広報・マーケティング
 - 攻撃者グループ
 - もっと見る +
 - 子育て、生活
 - サイバー救急センター
 - サイバー救急センターレポート
 - サイバー攻撃
 - サイバー犯罪
 - サイバー・グリッド・ジャパン
 - サプライチェーンリスク
 - システム開発
 - 趣味
 - 障がい者採用
 - 初心者向け
 - 白浜シンポジウム
 - 情シス向け
 - 情報モラル
 - 情報漏えい対策
 - 人材開発・教育
 - 診断30周年
 - スレットインテリジェンス
 - すごうで
 - セキュリティ
 - セキュリティ診断
 - セキュリティ診断レポート
 - 脆弱性
 - 脆弱性管理
 - ゼロトラスト
 - 対談
 - ダイバーシティ
 - テレワーク
 - データベース
 - デジタルアイデンティティ
 - 働き方改革
 - 標的型攻撃
 - プラス・セキュリティ人材
 - モバイルアプリ
 - ライター紹介
 - ラックセキュリティアカデミー
 - ランサムウェア
 - リモートデスクトップ
 - 1on1
 - AI
 - ASM
 - CIS Controls
 - CODE BLUE
 - CTF
 - CYBER GRID JOURNAL
 - CYBER GRID VIEW
 - DevSecOps
 - DX
 - EC
 - EDR
 - FalconNest
 - IoT
 - IR
 - JSOC
 - JSOC INSIGHT
 - LAC Security Insight
 - NDR
 - OWASP
 - SASE
 - Tech Crawling
 - XDR
 







