1
1

More than 1 year has passed since last update.

GitHubからAWSにOIDC認証するときのIAM信頼ポリシーではStringLikeとStringEqualsに気をつける

Posted at

概要

今までGitHub ActionsでAWSにOpenID Connect認証する設定を2回して、2回ともハマった設定ミスを今後はもう繰り返さないためにメモ。

内容

設定の過程で、認証先のIAMロールに信頼ポリシーを設定する必要がある。
https://docs.github.com/en/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services#configuring-the-role-and-trust-policy

そのConditionに次のようなものを書いてしまうと失敗する。

"Condition": {
  "StringEquals": {
    "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
    "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:*"
  }
}

マネジメントコンソールから編集する場合は、ワイルドカードを使っているのにStringEqualsを使っていることに警告が出るが、Terraformを使っていたためになかなか気付けなかった。

なんでこんなことが起きてしまったかというと、最初に

"token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:ref:refs/heads/octo-branch"

のように具体的なブランチの指定をStringEqualsで書いたあとで(別の理由でうまくOIDC認証が成功せず、もしやここのミスじゃないかと思うなどして)ワイルドカードに書き換えたからである。本当は、ワイルドカードにするならStringLikeに変える必要がある:

"Condition": {
  "StringEquals": {
    "token.actions.githubusercontent.com:aud": "sts.amazonaws.com"
  },
  "StringLike": {
    "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:*"
  }
}

ちなみに

OIDC認証がうまく成功しなかった場合、GitHub Actionsの実行ログを見てもあまり情報が得られないことが多い。このときは、CloudTrailからAssumeRoleWithWebIdentityイベントの中身を見ると上記信頼ポリシーのaudやsubにあたる値も見ることができるため、これらの設定でミスっていないか、予期せぬ値がGitHub Actionsから渡っていないか調べることができる。

他にも、pull requestをトリガーにしたGitHub Actionsから来る場合には、subが repo:octo-org/octo-repo:pull_request になることもCloudTrailから分かる。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1