AWS Amplifyプロジェクトのgitリポジトリをパブリックにするときのセキュリティ上の注意点についての備忘録です。
一言で言うと、team-provider-info.json
をgit管理から外すべし、となります。
はじめに
最近、Amplifyをよく使います。
主にReact + Amplifyの組み合わせで開発していますが、APIの作成やCognito連携、Hosting環境やCI/CDパイプライン立ち上げなどが極めて容易にできるため、とても有用なサービスだと感じています。
ここでふと、AmplifyプロジェクトをGitHubなどで公開しようと思ったとき、リポジトリをそのままpushしていいものだろうかと不安になりました。
もともとAmplifyによって.gitignore
が追記され、いくつかのファイルが除外されてはいますが、全世界にgitを公開する場合には、それだけでは不十分なのではないか?ということです。
今回は、Amplifyリポジトリを公開する際にgitから除外すべきファイルを調べました。
作業環境
Amplify CLIバージョン
$ amplify --version 4.21.0
Amplifyプロジェクト環境: Javascript / React
$ amplify init Note: It is recommended to run this command from the root of your app directory ? Enter a name for the project amplify ? Enter a name for the environment dev ? Choose your default editor: None ? Choose the type of app that you're building javascript Please tell us about your project ? What javascript framework are you using react ? Source Directory Path: src ? Distribution Directory Path: build ? Build Command: npm run-script build ? Start Command: npm run-script start
Amplifyプロジェクトのgitリポジトリを公開するときの注意点
Amplifyの.gitignoreファイル
まず、Amplifyによって生成される.gitignore
を確認します。
ここに記載されたファイルはgit管理されないので、機密な情報が含まれていても問題ありません。
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. # dependencies /node_modules /.pnp .pnp.js # testing /coverage # production /build # misc .DS_Store .env.local .env.development.local .env.test.local .env.production.local npm-debug.log* yarn-debug.log* yarn-error.log* #amplify amplify/\#current-cloud-backend amplify/.config/local-* amplify/mock-data amplify/backend/amplify-meta.json amplify/backend/awscloudformation build/ dist/ node_modules/ aws-exports.js awsconfiguration.json amplifyconfiguration.json amplify-build-config.json amplify-gradle-config.json amplifytools.xcconfig
amplify-meta.json
など、アカウント情報が記載されたファイルがgit管理から排除されているのが確認できます。
git管理されるAmplify関連ファイル
次に、git管理に含まれるファイルを以下の手順で確認してみます。
amplify add auth
とamplify add api
でAPIとAuthを作成amplify push
でamplifyバックエンドを構築- これら処理によってgit管理に追加されたファイルを確認
結果、次のファイルがgitに追加されました。
new file: .graphqlconfig.yml new file: amplify/.config/project-config.json new file: amplify/backend/api/amplify/parameters.json new file: amplify/backend/api/amplify/schema.graphql new file: amplify/backend/api/amplify/stacks/CustomResources.json new file: amplify/backend/api/amplify/transform.conf.json new file: amplify/backend/auth/amplifyc38b6d9a/amplifyc38b6d9a-cloudformation-template.yml new file: amplify/backend/auth/amplifyc38b6d9a/parameters.json new file: amplify/backend/backend-config.json new file: amplify/team-provider-info.json new file: src/graphql/mutations.js new file: src/graphql/queries.js new file: src/graphql/schema.json new file: src/graphql/subscriptions.js
これらファイルを上から確認していきます。
.graphqlconfig.yml
GraphQLのスキーマファイルのパスなどを記載amplify/.config/project-config.json
プロジェクト名やビルドコマンドなどを記載amplify/backend/api/amplify/parameters.json
API設定や認証用Cognito情報などを記載amplify/backend/api/amplify/schema.graphql
GraphQLスキーマを定義amplify/backend/api/amplify/stacks/CustomResources.json
CloudFormationテンプレートファイルamplify/backend/api/amplify/transform.conf.json
何かの設定が記載:
{ "Version": 5, "ElasticsearchWarning": true }
amplify/backend/auth/amplifyc38b6d9a/amplifyc38b6d9a-cloudformation-template.yml
CloudFormationテンプレートファイルamplify/backend/auth/amplifyc38b6d9a/parameters.json
Auth用の各設定が記載amplify/backend/backend-config.json
作成したバックエンドカテゴリ情報が記載amplify/team-provider-info.json
各リソースのARNなどが記載src/graphql/*
GraphQLのquery/mutation/subscription定義
ここで、amplify/team-provider-info.json
にリソースのARNなどが記載されている点には注意が必要でしょう。
Secret Keyなどが直接書かれているわけではありませんが、AWS Account IdやAmplifyAppIdなどが記載されています。
gitを公開する際は、amplify/team-provider-info.json
は、除いた方が良いでしょう。
結論: team-provider-info.jsonはgit管理から外すべし
以上、ここまで見てきたように、全世界にgitを公開する場合にはteam-provider-info.json
を外すべきかと思います。
Issueでの議論でも、Amplifyの中の人が次のように発言しています。
The purpose of this file is basically sharing it within your team-members on the same project and want to update/use the same AWS Infrastructure tied to an environment. If you're open-sourcing your project you can totally get rid of this file (or make it a part of .gitignore).
意訳すると、次のような感じでしょうか。
「このファイル(team-provider-info.json
)の基本的な役割は、プロジェクトのチームメンバーとバックエンド環境を連携させることです。
もしプロジェクトをオープンソース化するなら、このファイルは削除するか.gitignore
に含めるといいでしょう。」
この先Amplifyプロジェクトを公開するときは、このことを留意したいと思います。
[関連記事]