{"id":19935662,"url":"https://github.com/gameanalytics/data-export-s3-docs","last_synced_at":"2026-03-19T12:37:43.160Z","repository":{"id":42464666,"uuid":"397376167","full_name":"GameAnalytics/data-export-s3-docs","owner":"GameAnalytics","description":"Documentation and set of helpers on how to provision required AWS components and associated permissions for GameAnalytics export service.","archived":false,"fork":false,"pushed_at":"2022-04-04T19:00:39.000Z","size":95,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-10-23T09:39:18.327Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GameAnalytics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-08-17T19:56:08.000Z","updated_at":"2022-09-15T16:12:14.000Z","dependencies_parsed_at":"2022-09-19T08:51:15.132Z","dependency_job_id":null,"html_url":"https://github.com/GameAnalytics/data-export-s3-docs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/GameAnalytics/data-export-s3-docs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameAnalytics%2Fdata-export-s3-docs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameAnalytics%2Fdata-export-s3-docs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameAnalytics%2Fdata-export-s3-docs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameAnalytics%2Fdata-export-s3-docs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GameAnalytics","download_url":"https://codeload.github.com/GameAnalytics/data-export-s3-docs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GameAnalytics%2Fdata-export-s3-docs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29517617,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T18:37:19.720Z","status":"ssl_error","status_checked_at":"2026-02-16T18:36:46.920Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T23:21:15.752Z","updated_at":"2026-02-16T20:35:59.524Z","avatar_url":"https://github.com/GameAnalytics.png","language":null,"readme":"# GameAnalytics Export to AWS S3\n\nGameAnalytics Raw and Event exports allow user to receive data into provided AWS S3. This\ndocument provides a guidance on how to provision required AWS components along with\na set of permissions sufficient for the GameAnalytics export service.\n\n## Overview\n\nGameAnalytics export requires permissions to perform 's3:PutObject' and 's3:PutObjectAcl' actions to the bucket where the data is supposed to be stored. The export is performed under `arn:aws:iam::118928031713:role/live-export-job-batch-copy-role` role, which one could grant the required permissions using the following policy:\n\n``` json\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"AWS\": \"arn:aws:iam::118928031713:role/live-export-job-batch-copy-role\"\n      },\n      \"Action\": [\n        \"s3:PutObject\",\n        \"s3:PutObjectAcl\"\n      ],\n      \"Resource\": \"arn:aws:s3:::\u003cYOUR_BUCKET_NAME\u003e/*\"\n    }\n  ]\n}\n```\n\nWhere `YOUR_BUCKET_NAME` should be replaced with a name of the bucket to which the policy is attached.\n\nPlease ensure that the bucket has \"Object Ownership\" set to `Bucket owner preferred`:\n\n![](./pics/bucket-ownership-preferences.png)\n\n### Encryption\n\nIt is highly recommended to setup the destination bucket with a service side encryption enabled. The provided [cfn](./cfn) template ensures that the destination bucket uses `AWS:KMS` encryption by default.\n\nIf `AWS:KMS` default encryption is enabled, please make sure to grant GameAnalytics data role enough permissions to be able to use the key to write to the destination bucket via a [KMS key policy](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html):\n\n``` json\n{\n    \"Version\": \"2012-10-17\",\n    \"Id\": \"allow-ga-write\",\n    \"Statement\": [\n        {\n            \"Sid\": \"Enable IAM User Permissions\",\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"AWS\": \"arn:aws:iam::\u003cYOUR AWS ACCOUNT ID\u003e:root\"\n            },\n            \"Action\": \"kms:*\",\n            \"Resource\": \"*\"\n        },\n        {\n            \"Sid\": \"Allow GameAnalytics to write the data\",\n            \"Effect\": \"Allow\",\n            \"Principal\": {\n                \"AWS\": \"arn:aws:iam::118928031713:role/live-export-job-batch-copy-role\"\n            },\n            \"Action\": \"kms:GenerateDataKey\",\n            \"Resource\": \"*\"\n        }\n    ]\n}\n```\n\n## Helpers\n\nTo help you to provision all the required resources one can use pre-created AWS CloudFormation templates that you can find the [cfn](./cfn) directory.\n\n### Using AWS CLI tool\n\nPrerequisites:\n- AWS CLI ([installing the AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html))\n- This repository (clone it)\n- [JQ](https://stedolan.github.io/jq/download/)\n- AWS Account\n- Bucket where the CloudFormation templates will be uploaded\n\n1. Upload the CloudFormation templates to S3 bucket:\n   ```\n   aws s3 sync ./cfn s3://\u003cCFN_BUCKET_NAME\u003e/gameanalytics/export/cfn/\n   ```\n2. Create the stack using aws cli:\n   ```\n   aws cloudformation create-stack --stack-name gameanalytics-data-export \\\n       --template-url https://\u003cCFN_BUCKET_NAME\u003e.s3.amazonaws.com/gameanalytics/export/cfn/s3.yaml \\\n       --parameters \\\n           ParameterKey=S3PolicyStackTemplateURL,ParameterValue=https://\u003cCFN_BUCKET_NAME\u003e.s3.amazonaws.com/gameanalytics/export/cfn/s3-policy.yaml\n   ```\n3. Wait until the stack is created\n   ```\n   aws cloudformation describe-stacks --stack-name gameanalytics-data-export \\\n       | jq -r '.Stacks[].StackStatus'\n   ```\n   In case of successful creation of the stack you shoudl see `CREATE_COMPLETE`\n4. Get the bucket ARN to provide the GameAnalytics export service\n   ```\n   aws cloudformation describe-stacks --stack-name gameanalytics-data-export \\\n       | jq -r '.Stacks[].Outputs[].OutputValue'\n   ```\n   If the stack is created successfully you should be able to see ARN of the created bucket, which would be similar to `arn:aws:s3:::gameanalytics-data-export-s3bucket-81mhh0wqeskx`\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgameanalytics%2Fdata-export-s3-docs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgameanalytics%2Fdata-export-s3-docs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgameanalytics%2Fdata-export-s3-docs/lists"}