BioErrorLog Tech Blog

試行錯誤の記録

Amplifyプロジェクトのgitリポジトリを公開するときの注意点

AWS Amplifyプロジェクトのgitリポジトリをパブリックにするときのセキュリティ上の注意点についての備忘録です。

一言で言うと、team-provider-info.jsonをgit管理から外すべし、となります。


はじめに

おはよう。@bioerrorlogです。

最近、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管理に含まれるファイルを以下の手順で確認してみます。

  1. amplify add authamplify add apiでAPIとAuthを作成
  2. amplify pushでamplifyバックエンドを構築
  3. これら処理によって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プロジェクトを公開するときは、このことを留意したいと思います。


関連記事

www.bioerrorlog.work

www.bioerrorlog.work


参考

Security best practices for Amplify app in a public repo · Issue #1779 · aws-amplify/amplify-cli · GitHub

Amplify Framework Documentation