Help us understand the problem. What is going on with this article?

WerckerでIP制限をかけたs3のバケットからkeystoreを取得しassembleReleaseを実行する

More than 1 year has passed since last update.

この記事はAndroidのCI環境をCircleCIからWerckerにした話に関連した投稿です。

AndroidアプリのCI/CDをどう行うのかを考えるとkeystoreやkey.p12などのファイルを何処に置くか?が問題になることがあります。Androidプロジェクトのリポジトリに含めてしまう事もできますが、セキュリティの観点からできるだけ避けたいです。

今回試してみたのは、keystoreなどのファイルをIP制限をかけたs3のバケットに置き、それをWerckerから取得する方法です。

keystoreをs3から取得し./gradlew assembleReleaseを実行するwercker.ymlを作成してAndroidプロジェクトのビルドを実行してみます。

s3のバケットにIP制限をかける

IP制限のかけかたはこちらの記事が参考になります。実際にAWS Policy Generatorで作成したポリシーは以下のようになり、IPアドレス192.168.1.1からのアクセスのみを受けつけます。

{
    "Version": "2012-10-17",
    "Id": "Policy***********",
    "Statement": [
        {
            "Sid": "Stmt**********",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::android/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "192.168.1.1"
                    ]
                }
            }
        }
    ]
}

Werckerが使用するIPアドレスをWhitelistとして登録

Werckerのコンテナが使用するIPのリストは以下のページから確認できます。

IPリストは以下のファイルを参照することで確認できます。WerckerがDockerコンテナを利用位してる関係上、このドキュメントに記載されているIPアドレスは予告なしに変更される可能性があります。

このIPリストをポリシーに追加し、バケットのバケットポリシーの編集をクリックすると開くバケットポリシーエディタに貼り付けて保存します。

{
    "Version": "2012-10-17",
    "Id": "Policy***********",
    "Statement": [
        {
            "Sid": "Stmt**********",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::android/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "54.197.9.30",
                        "54.82.165.74",
                        "54.175.16.217",
                        "52.91.36.246",
                        "52.23.225.139",
                        "54.174.181.26",
                        "54.174.253.237",
                        "52.90.118.64",
                        "54.89.129.133",
                        "52.90.236.213",
                        "52.23.211.102",
                        "54.236.255.39",
                        "54.237.192.172",
                        "54.173.172.47",
                        "52.87.170.39"
                    ]
                }
            }
        }
    ]
}

s3からkeystoreを取得しassembleReleaseを実行するwercker.ymlの作成

これでIP制限をかけたs3にkeystoreを置いておけばWerckerのビルド環境から取得することができます。実際にkeystoreを取得してビルドすることが可能か確認するために以下のようなwercker.ymlを用意します。kestoreのパスはWerckerの環境変数に登録しておきます。boxにはAndroidのビルドが可能なDocker Imageとして予め用意したhorie1024/wercker-android-buildを使用しています。

box: horie1024/wercker-android-build:0.1
build:
  steps:
    - script:
        name: fetch file from s3
        code: |
          wget <s3に配置したkeystoreのパス> -P app/
    - script:
        name: assembleRelese
        code: |
          ./gradlew assembleRelease

このwercker.ymlで定義した処理の流れは以下のようになります。

  1. wgetでs3からkeystoreを取得
  2. assembleReleaseを実行

アプリ側のbuild.gradleには署名の設定を以下のように設定しておきます。

android {
    signingConfigs {
        release {
            storeFile file('keystore')
            storePassword YOUR_STORE_PASSWORD
            keyAlias YOUR_KEY_ALIAS
            keyPassword YOUR_KEY_PASSWORD
        }
    }
}

Androidプロジェクトのビルド

wercker.yamlをAndroidプロジェクトのトップに置きGitHubにプッシュするとWerckerでビルドが開始されます。そして以下のようにkeystoreがs3からダウンロード後Androidプロジェクトに配置され、./gradlew assembleReleaseでのビルドも問題なく実行できました。

wercker_android_1.png

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away