コンテンツにスキップ

Amazon S3

Amazon S3は、Amazon Web Servicesが提供する高度にスケーラブルなストレージシステムです。

BrazeとAmazon S3の連携には、2つの統合戦略があります。

  • Currentsを活用すると、他のプラットフォーム、ツール、ロケーションに接続するまでデータを保存できます。
  • ダッシュボードのデータエクスポート(CSVエクスポートやエンゲージメントレポートなど)を使用します。

前提条件

新しいS3バケットを作成する

アプリ用のバケットを作成するには、以下の手順を実行します。

  1. Amazon S3コンソールを開き、手順に従ってサインインするか、AWSアカウントを作成します。
  2. サインイン後、Storage & Content DeliveryカテゴリーからS3を選択します。
  3. 次の画面でCreate Bucketを選択します。
  4. プロンプトが表示されたら、バケットを作成し、AWSリージョンを選択します。

Brazeのダッシュボードでは、リージョンを選択または設定することはできません。AWSリージョンは、AWSコンソールでバケットを作成した場所によって決まります。この連携では指定したバケット名にデータが送信され、AWSがリクエストをバケットのリージョンに自動的にルーティングします。コネクターが意図しないリージョン (たとえば、eu-central-1ではなくeu-west-1) に接続しようとする場合は、AWSで目的のリージョンにS3バケットを作成するか、既存のバケットを使用してください。Braze側で変更する必要はありません。

連携

BrazeにはAmazon S3との連携方法が2つあります。1つはBraze Currents用、もう1つはすべてのダッシュボードデータのエクスポート (CSVエクスポートやエンゲージメントレポートなど) 用です。どちらの連携も、2種類の認証または認可方式に対応しています。

AWSシークレットキー認証方式

この認証方式では、シークレットキーとアクセスキーIDが生成されます。これにより、BrazeはAWSアカウントのユーザーとして認証され、バケットにデータを書き込めるようになります。

ステップ1: ユーザーを作成する

アクセスキーIDとシークレットアクセスキーを取得するには、AWSでIAMユーザーと管理者グループを作成します。

ステップ2: 認証情報を取得する

新しいユーザーを作成したら、Show User Security Credentials を選択して、アクセスキーIDとシークレットアクセスキーを表示します。これらの認証情報は後でBrazeダッシュボードに入力する必要があるため、どこかにメモしておくか、Download Credentials ボタンを選択してください。

アクセスキーIDとシークレットアクセスキーが表示されたAWS IAMユーザーのセキュリティ認証情報ページ。

ステップ3: ポリシーを作成する

Policies > Get Started > Create Policy に移動して、ユーザーに権限を追加します。次に、Create Your Own Policy を選択します。これにより付与される権限は限定されるため、Brazeは指定したバケットにのみアクセスできます。

S3連携用のポリシーオプションが表示されたAWS IAMのポリシー作成画面。

任意のポリシー名を指定し、Policy Document セクションに次のコードスニペットを入力します。INSERTBUCKETNAME は必ずご自身のバケット名に置き換えてください。これらの権限がないと、連携は認証情報のチェックに失敗し、作成されません。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:ListBucket", "s3:GetBucketLocation"],
            "Resource": ["arn:aws:s3:::INSERTBUCKETNAME"]
        },
        {
            "Effect": "Allow",
            "Action": ["s3:PutObject", "s3:GetObject"],
            "Resource": ["arn:aws:s3:::INSERTBUCKETNAME/*"]
        }
    ]
}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:ListBucket", "s3:GetBucketLocation"],
            "Resource": ["arn:aws:s3:::INSERTBUCKETNAME"]
        },
        {
            "Effect": "Allow",
            "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
            "Resource": ["arn:aws:s3:::INSERTBUCKETNAME*", "arn:aws:s3:::INSERTBUCKETNAME/", "arn:aws:s3:::INSERTBUCKETNAME"]
        }
    ]
}

ステップ4: ポリシーをアタッチする

新しいポリシーを作成したら、Users に移動して対象のユーザーを選択します。Permissions タブで Attach Policy を選択し、作成した新しいポリシーを選択します。これで、AWS認証情報をBrazeアカウントにリンクする準備が整いました。

Attach Policyアクションが選択されたAWS IAMユーザーの権限タブ。

ステップ5: BrazeをAWSにリンクする

Brazeで、パートナー連携 > Currents に移動します。

次に、新しいCurrentを作成、Amazon S3データエクスポートの順に選択します。

Currentに名前を付けます。認証情報セクションで AWS Secret Access Key が選択されていることを確認し、S3アクセスID、AWSシークレットアクセスキー、AWS S3バケット名を所定のフィールドに入力します。

連携エラー通知の連絡先メールアドレスを入力します。認証情報の問題や接続の問題など、連携でエラーが発生した場合、Brazeはこのアドレスに通知を送信します。適切な担当者がアラートを受け取れるようにするため、配布リストまたはグループメールアドレスを使用してください。

AWSシークレットキーの認証情報フィールドが表示された、Amazon S3用のBrazeの新しいCurrent作成フォーム。

必要に応じて、次のカスタマイズを追加することもできます。

  • フォルダーパス: デフォルトは currents です。このフォルダーが存在しない場合は、Brazeが自動的に作成します。
  • サーバー側、保存時のAES-256暗号化: デフォルトはオフで、x-amz-server-side-encryption ヘッダーが含まれます。

Currentを起動を選択して続行します。

認証情報が正常に検証されたかどうかが通知で表示されます。これで、AWS S3がBraze Currents用に設定されました。

Brazeで、パートナー連携 > テクノロジーパートナーに移動し、Amazon S3 を選択します。

AWS認証情報ページで AWS Secret Access Key が選択されていることを確認し、AWSアクセスID、AWSシークレットアクセスキー、AWS S3バケット名を所定のフィールドに入力します。シークレットキーを入力したら、まず 認証情報をテスト を選択して認証情報が機能することを確認し、成功したら 保存 を選択します。

テストと保存のアクションが表示された、BrazeのAmazon S3テクノロジーパートナー認証情報ページ。

認証情報が正常に検証されたかどうかが通知で表示されます。これで、AWS S3がBrazeアカウントに連携されました。

AWSロールARN認証方式

この認証方式では、ロールのAmazonリソースネーム (ARN) を生成します。このARNにより、BrazeのAmazonアカウントは、バケットへのデータ書き込み用に作成したロールのメンバーとして認証できるようになります。

ステップ1: ポリシーを作成する

まず、アカウント管理者としてAWSマネジメントコンソールにサインインします。AWSコンソールのIAMセクションに移動し、ナビゲーションバーでPoliciesを選択してから、Create Policyを選択します。

Create Policyボタンが選択されたAWS IAMのポリシーページ。

JSONタブを開き、以下のコードスニペットをPolicy Documentセクションに入力します。INSERTBUCKETNAMEは必ずご自身のバケット名に置き換えてください。入力が終わったら、Review Policyを選択します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:ListBucket", "s3:GetBucketLocation"],
            "Resource": ["arn:aws:s3:::INSERTBUCKETNAME"]
        },
        {
            "Effect": "Allow",
            "Action": ["s3:PutObject", "s3:GetObject"],
            "Resource": ["arn:aws:s3:::INSERTBUCKETNAME/*"]
        }
    ]
}
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": ["s3:ListBucket", "s3:GetBucketLocation"],
            "Resource": ["arn:aws:s3:::INSERTBUCKETNAME"]
        },
        {
            "Effect": "Allow",
            "Action": ["s3:PutObject", "s3:GetObject","s3:DeleteObject"],
            "Resource": ["arn:aws:s3:::INSERTBUCKETNAME/*"]
        }
    ]
}

次に、ポリシーに名前と説明を付けて、Create Policyを選択します。

ポリシー名と説明の入力フィールドがあるAWS IAMのポリシー確認ステップ。

新しく作成したS3ポリシーが表示されたAWS IAMのポリシー一覧。

ステップ2: ロールを作成する

コンソールの同じIAMセクションで、Roles > Create Roleを選択します。

Create Roleボタンが選択されたAWS IAMのロールページ。

BrazeアカウントからBrazeのアカウントIDとexternal IDを取得します。

  • Currents: Brazeでパートナー連携 > Currentsに移動します。次に、新しいCurrentを作成を選択し、Amazon S3データエクスポートを選択します。ここで、ロールの作成に必要な識別子を確認できます。
  • ダッシュボードデータのエクスポート: Brazeでパートナー連携 > テクノロジーパートナーに移動し、Amazon S3を選択します。ここで、ロールの作成に必要な識別子を確認できます。(メッセージのアーカイブのみを設定する場合は、ここでロールを作成してください。)

AWSコンソールに戻り、信頼されたエンティティのタイプとしてAnother AWS Accountを選択します。BrazeのアカウントIDを入力し、Require external IDチェックボックスをオンにして、Brazeのexternal IDを入力します。完了したらNextを選択します。

S3の「Create Role」ページ。ロール名、ロールの説明、信頼されたエンティティ、ポリシー、アクセス許可の境界のフィールドがあります。

ステップ3: ポリシーをアタッチする

次に、先ほど作成したポリシーをロールにアタッチします。検索バーでポリシーを検索し、ポリシーの横にチェックを入れてアタッチします。完了したらNextを選択します。

作成したポリシーをロールにアタッチする画面

ロールに名前と説明を付けて、Create Roleを選択します。

ロール名と説明を入力する画面

新しく作成したロールが一覧に表示されます。

ステップ4: Braze AWSにリンクする

AWSコンソールで、新しく作成したロールを一覧から探します。名前を選択すると、そのロールの詳細が開きます。

新しく作成したロールのAWS IAMロール詳細ページ。

ロールの概要ページの上部にあるRole ARNをメモしておきます。

Role ARNの値が表示されたAWS IAMのロール概要。

Brazeアカウントに戻り、指定されたフィールドにロールARNをコピーします。

Brazeでパートナー連携 > Currentsに移動します。次に、新しいCurrentを作成を選択し、Amazon S3データエクスポートを選択します。

AWS Role ARNとバケットのフィールドがあるBraze CurrentsのAmazon S3設定画面。

Currentに名前を付けます。次に、認証情報セクションでAWS Role ARNが選択されていることを確認し、指定されたフィールドにロールARNとAWS S3バケット名を入力します。

連携エラー通知の連絡先メールアドレスを入力します。認証情報の問題や接続の問題など、連携でエラーが発生した場合、Brazeはこのアドレスに通知を送信します。適切な担当者がアラートを受け取れるようにするため、配布リストまたはグループメールアドレスを使用してください。

必要に応じて、以下のカスタマイズを追加することもできます。

  • フォルダーパス (デフォルトはcurrents)
  • サーバー側の保存時AES-256暗号化 (デフォルトはOFF) - x-amz-server-side-encryptionヘッダーが含まれます

Currentを起動を選択して続行します。認証情報が正常に検証されたかどうかが通知で表示されます。これで、Braze Currents用のAWS S3の設定は完了です。

Brazeで連携の下にあるテクノロジーパートナーページに移動し、Amazon S3を選択します。

AWS Role ARNの認証情報が選択されたBrazeのAmazon S3テクノロジーパートナーページ。

AWS認証情報ページで、AWS Role ARNのラジオボタンが選択されていることを確認し、指定されたフィールドにロールARNとAWS S3バケット名を入力します。まず認証情報をテストを選択して認証情報が正しく機能することを確認し、成功したら保存を選択します。

認証情報が正常に検証されたかどうかが通知でお知らせされます。これで、AWS S3がBrazeアカウントに連携されました。

ロールARN方式のセキュリティに関する考慮事項

ステップ2でAnother AWS Accountを選択してBrazeのアカウントIDを入力すると、AWSはPrincipalがBraze AWSアカウントのルート (arn:aws:iam::<BRAZE_ACCOUNT_ID>:root) である信頼ポリシーを作成します。セキュリティチームがこの信頼ポリシーを確認する場合は、以下の点に注意してください。

  • Brazeは共有のIAMユーザーを使用してお客様のロールを引き受けます。
  • external IDは必須です。プリンシパルを特定のIAMユーザーに限定する場合も含め、信頼ポリシーにはsts:ExternalIdの条件を残しておいてください。
  • プリンシパルを特定のIAMユーザーに限定できます。セキュリティポリシーでアカウントルートの信頼が許可されていない場合は、PrincipalをBraze IAMユーザーのARNに置き換えることができます。ご利用のリージョンのARNを取得するには、Brazeサポートにお問い合わせください。
  • Braze IAMユーザーは変更される可能性があります。プリンシパルは通常は安定していますが、将来Brazeが変更する場合があります。信頼ポリシーを特定のIAMユーザーに限定していて、そのユーザーが変更された場合、信頼ポリシーを更新するまでBrazeはお客様のロールを引き受けられません。
  • プリンシパルは製品によって異なります。Currentsとダッシュボードデータのエクスポートでは、同じBraze IAMユーザーを使用します。クラウドデータ取り込みは別のAWSアカウントの別のプリンシパルを使用するため、その信頼ポリシーは個別に設定してください。

Currents用のAmazon S3認証情報の更新

既存のBraze Currentsコネクタで、統合を停止したり、すでにバケットにエクスポートされたデータを失ったりすることなく、Amazon S3認証情報を更新できます。

認証情報を更新する場合、またはAWS Secret Access KeyとAWS Role ARNを切り替える場合は、この記事の前半で説明した選択した方式のIAMおよびAWS側のステップ(ポリシー、ユーザーまたはロール、必要に応じて識別子)を完了してください。

AWSで認証情報の準備が完了したら、Brazeでパートナー連携 > Currentsに移動し、リストからAmazon S3コネクタを見つけてEditを選択し、Credentialsを更新してUpdate Currentを選択します。Brazeは入力された認証情報を検証します。コネクタは引き続き実行され、バケット内のデータは引き続き利用可能です。詳細については、Currentsの設定でのCurrentsの更新を参照してください。

Message Archivingバケットの切り替え

新しいS3バケットまたはIAMロールに切り替えている間も、Message Archivingは動作し続けます。Brazeは認証情報のテストに合格した後でのみ新しい設定を保存するため、アーカイブ先は常に正常に動作する宛先に向けられます。

変更はすぐには反映されません。保存後しばらくの間、Brazeが以前の設定を引き続き使用する場合があります。

  • 以前のバケットが、一部のアーカイブされたメッセージを引き続き受信する場合があります (すでに進行中だった送信からのメッセージなど)。
  • 以前のIAMロール (ロールベースの認証を使用していて、ロールARNを変更した場合) が、新しいバケットへの書き込みに引き続き使用される場合があります。

移行が完了したことを確認するため、新しいバケットに新しいアーカイブが数分間届くようになるまでは、以前のバケットまたはロールへのアクセスを削除しないでください。ロールARNを変更する場合は、それまでの間、以前のロールも新しいバケットに書き込めるようにしてください。そうしないと、切り替え中にアーカイブされたメッセージが保存されない可能性があり、再試行も行われません。

CurrentsがS3にファイルをアップロードする仕組み

Currentsは、各AvroファイルがAvro書き込みしきい値に達するとそのファイルを閉じます。その後、Amazon S3マルチパートアップロードを使用して、完成したファイルを5 MB単位のパートでバケットにアップロードします。マルチパートアップロードは書き込みしきい値とは別の処理で、通常はファイルが閉じられてから数秒以内に完了します。

Amazon S3は、進行中のマルチパートアップロードをオブジェクトとして公開しません。Currentsのファイルは、アップロードが完了して初めてListObjectsV2およびGetObjectから参照できるようになります。そのため、標準のS3 APIを通じてバケットを読み取るダウンストリームのプロセスが、アップロード途中のファイルを参照することはありません。

エクスポートの動作

クラウドデータストレージソリューションを連携しているユーザーが、API、ダッシュボードレポート、またはCSVレポートをエクスポートすると、次のようになります。

  • すべてのAPIエクスポートでは、レスポンス本文にダウンロードURLが含まれないため、データストレージから取得する必要があります。
  • すべてのダッシュボードレポートとCSVレポートは、ダウンロード用にユーザーのメールに送信され(ストレージ権限は不要)、データストレージにバックアップされます。

Unable to connect to S3, please validate that your credentials are correct エラー

CSVエクスポートのダウンロード時にこのエラーが表示された場合は、テクノロジーパートナーページでAmazon S3連携を開き、認証情報をテストを選択します。結果には、検証に失敗した内容が表示されます。たとえば、キーにGetObject権限がない場合、Brazeはダウンロードリンクを生成できません。

Brazeの連携で設定したS3バケットとオブジェクトパスに対して、連携ユーザーまたはロールがs3:GetObjectを呼び出せるように、IAMポリシーを更新してください。その他のエクスポートの問題については、エクスポートのトラブルシューティングを参照してください。

複数のコネクター

S3バケットに送信するCurrentsコネクターを複数作成する場合は、同じ認証情報を使用できますが、コネクターごとに異なるフォルダーパスを指定する必要があります。これらのコネクターは同じワークスペース内に作成することも、複数のワークスペースに分けて作成することもできます。また、連携ごとに個別のポリシーを作成するか、両方の連携をカバーする1つのポリシーを作成するかを選択できます。

Currentsとデータエクスポートの両方で同じS3バケットを使用する予定の場合は、連携ごとに必要な権限が異なるため、2つの別々のポリシーを作成する必要があります。

トラブルシューティング

エラー: アカウントに PutObject アクセス権がない

ダッシュボードデータのエクスポート用にAmazon S3の認証情報を保存する際に次のエラーが表示される場合は、権限またはサーバー側の暗号化設定が正しくない可能性があります。

S3 Credentials are invalid because this account does not have 'PutObject access'. Please check the permissions and ensure that this key has access to 'PutObject' in the 'CUSTOMER-BUCKET-HERE' bucket.

この問題を解決するには、以下の点を確認してください。

バケットポリシーが正しくない

Amazon S3 連携で説明している正しい権限を持つポリシーを作成したことを確認してください (ご利用の認証方法に対応した Dashboard Data Export ポリシーを使用します)。

サーバー側の暗号化

User: arn:aws:sts::XXX:assumed-role/braze-iam-role/braze is not authorized to perform: kms:GenerateDataKey on resource: arn:aws:XXX because no identity-based policy allows the kms:GenerateDataKey action

Brazeサポートから、またはAWSのログでこのエラーメッセージを受け取った場合、S3 バケットはAWS Key Management Service (SSE-KMS) 暗号化で構成されています。BrazeはCurrentsまたはダッシュボードデータのエクスポートでSSE-KMSをサポートしていません。この問題を解決するには、S3 バケットでSSE-KMSを無効にしてください。

その他の権限を確認する

s3:GetBucketLocation や s3:PutObject など、必要な権限があることを確認してください。

New Stuff!