[小ネタ]GitHub ActionsでAssumeRoleするOIDCプロバイダのIssuerURLとオーディエンスの指定が変更されました

2021.10.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

9月に話題となったGitHub ActionsでAWS Credentials が不要でAssumeRoleできるようになりましたが、OIDCプロバイダのIssuerURLが変更になりました。

突然の実行エラー

当初は以下のCloudFormationテンプレートでIAMロールを作成して10/8くらいまで動いていました。

AWSTemplateFormatVersion: "2010-09-09"

Parameters:
  RepoName:
    Type: String
    Default: example-nakahara/cfn-cicd

Resources:
  Role:
    Type: AWS::IAM::Role
    Properties:
      RoleName: github-actions-role
      ManagedPolicyArns: [arn:aws:iam::aws:policy/ReadOnlyAccess]
      AssumeRolePolicyDocument:
        Statement:
          - Effect: Allow
            Action: sts:AssumeRoleWithWebIdentity
            Principal:
              Federated: !Ref GithubOidc
            Condition:
              StringLike:
                token.actions.githubusercontent.com:sub: !Sub repo:${RepoName}:*

  GithubOidc:
    Type: AWS::IAM::OIDCProvider
    Properties:
      Url: https://token.actions.githubusercontent.com
      ClientIdList: [sigstore]
      ThumbprintList: [a031c46782e6e6c662c2c87c76da9aa62ccabd8e]

Outputs:
  Role:
    Value: !GetAtt Role.Arn

週明け10/11にGitHubActionsを実行したところ、 could not establish AWS credentials; please run 'aws configure' or choose a profile とエラーがでて実行できなくなりました。 AWSから公式アナウンスされている機能では無いので原因がわからずにSNSを調べていると、GitHubの中の人のツイートを見つけました。

OIDCプロバイダのIssuerURLが変更されたこと、オーディエンスの指定がリポジトリのオーナーURLとなったようです。↑のCloudFormationテンプレートを参考にしたサイトも変更されていました。(ありがとう!)

Parameters:
  GithubOrg:
    Type: String
    Default: example-nakahara
  FullRepoName:
    Type: String
    Default: example-nakahara/cfn-cicd

Resources:
  Role:
    Type: AWS::IAM::Role
    Properties:
      RoleName: github-actions-role
      ManagedPolicyArns: [arn:aws:iam::aws:policy/ReadOnlyAccess]
      AssumeRolePolicyDocument:
        Statement:
          - Effect: Allow
            Action: sts:AssumeRoleWithWebIdentity
            Principal:
              Federated: !Ref GithubOidc
            Condition:
              StringLike:
                token.actions.githubusercontent.com:sub: !Sub repo:${FullRepoName}:*

  GithubOidc:
    Type: AWS::IAM::OIDCProvider
    Properties:
      Url: https://token.actions.githubusercontent.com
      ThumbprintList: [a031c46782e6e6c662c2c87c76da9aa62ccabd8e]
      ClientIdList: 
        - !Sub https://github.com/${GithubOrg}

Outputs:
  Role:
    Value: !GetAtt Role.Arn

Parametersと AWS::IAM::OIDCProvider のClientIdListがリポジトリのオーナーURLに変わってますね。

まとめ

ブログ執筆時点でも、AWSから公式アナウンスされていない無い機能なのでまだまだ変更があるかもしれないということも考慮して利用しましょう。