🐙
Github Actions で boto3 を呼ぶ
やりたいこと
Github Actions 内で boto3 を使用したファイルが実行できるようにする
この際 AWS への認証方法は OIDC を使用するものとする
いきなり結論
Github Actions 内 boto3 を呼び出すファイルが実行される step の環境変数(env)に "AWS_ROLE_ARN: <使用するロールのARN>" を設定する
例:
name: test-github-actions
on: [push]
jobs:
run-boto3:
runs-on: ubuntu-latest
steps:
- run: python ./use_boto3.py
env:
AWS_ROLE_ARN: arn:aws:iam::<アカウントID>:role/<Role名>
過程
Github Actions で boto3 を読み込むファイルを実行すると以下のエラーが出力された
Traceback (most recent call last):
File
client = boto3.client('logs', region_name=region)
File "/usr/local/lib/python3.8/dist-packages/boto3/__init__.py", line 92, in client
return _get_default_session().client(*args, **kwargs)
File "/usr/local/lib/python3.8/dist-packages/boto3/session.py", line 299, in client
return self._session.create_client(
File "/usr/local/lib/python3.8/dist-packages/botocore/session.py", line 957, in create_client
credentials = self.get_credentials()
File "/usr/local/lib/python3.8/dist-packages/botocore/session.py", line 513, in get_credentials
self._credentials = self._components.get_component(
File "/usr/local/lib/python3.8/dist-packages/botocore/credentials.py", line 2038, in load_credentials
creds = provider.load()
File "/usr/local/lib/python3.8/dist-packages/botocore/credentials.py", line 1734, in load
return self._assume_role_with_web_identity()
File "/usr/local/lib/python3.8/dist-packages/botocore/credentials.py", line 1771, in _assume_role_with_web_identity
raise InvalidConfigError(error_msg=error_msg)
botocore.exceptions.InvalidConfigError: The provided profile or the current environment is configured to assume role with web identity but has no role ARN configured. Ensure that the profile has the role_arnconfiguration set or the AWS_ROLE_ARN env var is set.
Error: Process completed with exit code 1.
Pick up
OIDC を使うときは環境変数に "AWS_ROLE_ARN" を使ってねと言われている
botocore.exceptions.InvalidConfigError: The provided profile or the current environment is configured to assume role with web identity but has no role ARN configured. Ensure that the profile has the role_arnconfiguration set or the AWS_ROLE_ARN env var is set.
一応 botocore のリポジトリも確認
_assume_role_with_web_identity() が呼ばれてそこから環境変数 AWS_ROLE_ARN の値をチェックしている
※ここでロール ARN の指定がなかったり取得できないとエラーを出力するようになっている
この辺がロール ARN の取得関連の処理
Discussion