🐙

Github Actions で boto3 を呼ぶ

2023/09/27に公開

やりたいこと

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 の指定がなかったり取得できないとエラーを出力するようになっている
https://github.com/boto/botocore/blob/11ea35e64951d627bd7d075e2fbc31ec2fa599f6/botocore/credentials.py#L1757-L1771

この辺がロール ARN の取得関連の処理
https://github.com/boto/botocore/blob/11ea35e64951d627bd7d075e2fbc31ec2fa599f6/botocore/credentials.py#L1708-L1755

Discussion