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

コンテナからGCS(Google Cloud Storage)にアクセスする方法

概要

AWS Batchで起動したコンテナ上からGCS(Google Cloud Storage)にアクセスするためにやったことを書きます。
AWS Batchじゃなくても使えると思います。

仕組みは、AWS Parameter StoreにGCPのサービスアカウントキーをKMSで暗号化した状態で格納しておき、
コンテナ起動時にParameter Storeからdecryptして、gcloud authコマンドで認証する流れです。
それでは行ってみましょう。

事前準備

  • GCPでGCSにアクセス可能なサービスアカウントを作成、ダウンロードしておく。
  • gcloudコマンドがインストールされたコンテナを用意する。

手順

AWS KMSでキーを作成

KMSでParameter Storeで暗号化するために必要なキーを作成します。

# キーの作成
aws kms create-key --description <キーの説明> --region ap-northeast-1

# キーのエリアスを設定
aws kms create-alias --alias-name alias/<キーの名前> --target-key-id <キー作成時に出力されたKeyId>

Parameter Storeでサービスアカウントを格納

上記で作成したKMSのkey idを指定して、暗号化した状態でサービスアカウントキーをParameter Storeに格納します。

# パラメーターストアの作成
aws ssm put-parameter \
    --region ap-northeast-1 \
    --name <パラメーターの名前> \
    --type SecureString \
    --key-id alias/<キーの名前> \
    --value "$(cat <サービスアカウントキーのファイル>)"

IAMの権限付与

(AWS Batchを利用していれば)ジョブロールに割り当てるIAM Roleに以下のPolicyを付与します。

  • AmazonSSMFullAccess
  • 以下のインラインポリシーを作成し、割り当て
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "<KMSのARNを入れてください>"
            ]
        }
    ]
}

認証処理

今回はこちらの記事を参考に、DockerのENTRYPOINTで初期化用のスクリプト(fetch_and_run.sh)を実行させます。この初期化用スクリプトの中で gcloud auth を実行させました。

実際の認証処理は以下のようにしました。
aws ssm get-parameters で取得したサービスアカウントを /tmp/credentials.json に出力し、それを使って gcloud auth で認証しています。

# fetch_and_run.sh 
aws ssm get-parameters --name ${SSM_PARAMETER_NAME} --with-decryption --region ap-northeast-1 --output json | jq -r '.Parameters[].Value' > /tmp/credentials.json
gcloud auth activate-service-account --key-file=/tmp/credentials.json

まとめ

Parameter Storeって便利。

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