[小ネタ] CodeBuild に割り当てた IAM Role のクレデンシャルを取得する
ども、藤本です。
AWS の操作を行う時、各種サービスに対する利用権限を持つ IAMユーザーや IAMロールの認証情報(クレデンシャル)が必要となります。AWS の公式 SDK、ライブラリや、AWS を意識したライブラリは特に意識することなく、OS 環境変数やクレデンシャルファイル、インスタンスメタデータから優先順位に従ってクレデンシャルを取得します。しかし、中には明示的にアクセスキー、シークレットキー、IAM Roleの場合はセッショントークンを与える必要があるライブラリもあります。
そんなライブラリを使う機会があり、かつ、ユニットテストを行うためにそんなライブラリを CodeBuild 上で使いたかったのですが、CodeBuild 上のクレデンシャル取得方法を調べたのでその備忘録です。
結論
ECS のタスクロールのクレデンシャル取得と同じでした。
Shell(curl
コマンド)
curl 169.254.170.2${AWS_CONTAINER_CREDENTIALS_RELATIVE_URI}
JSON 形式で返ってくるので、各種情報を取り出すには jq を使うと簡単です。例えばアクセスキーを取得する場合。
curl 169.254.170.2${AWS_CONTAINER_CREDENTIALS_RELATIVE_URI} |jq -r .AccessKeyId
Python(botocore)
from botocore.utils import ContainerMetadataFetcher import os uri = os.environ.get('AWS_CONTAINER_CREDENTIALS_RELATIVE_URI')) credential = ContainerMetadataFetcher().retrieve_uri(uri) ### credential は dict で返ってくる。アクセスキーを取得する場合 access_key = credential.get('AccessKeyId')
まとめ
もっと AWS のクレデンシャルの取り扱いが普及し、明示的に与えずともいい感じに取ってくれるといいのですが、、、どなたかのお役に立てば幸いです。