😄

OIDCを使用してAWSと連携する

2024/05/02に公開

OIDCを使用してAWSと連携する

OIDCとは

OIDCはOpenID Connectの略語で、認証を行うプロトコル。IDトークンを使用して、認証を行う。サービスが異なる場合でも、共通のIDとパスワードを取り扱うことができる

OIDCで対策できる理由

OAuth と OpenID Connect とは?の表、説明を使用させていただきます

発行されたIDトークンの情報

情報 説明
iss IDトークンの発行者
sub 対象者の情報
aud 利用者の情報

これを上記の例にしたがって置き換えた場合、

情報 説明
iss WebサイトB
sub ユーザー
aud WebサイトA

という情報を持つことになります。
このため、もし「WebサイトAに似せた詐欺サイト」からIDトークンを取得した場合、audが違う情報となる

情報 説明
iss WebサイトB
sub ユーザー
aud WebサイトAに似せた詐欺サイト

よってOAuthのリスクを回避できる可能性がでる

特徴

  • 従来のOpenID認証システムと比べて、導入がしやすい
  • IDトークンを使用した認証の利点として、ID、パスワードの管理が容易
  • IDトークンは共通のID・パスワードで複数のサービスを使用できるため、同時に複数アクセスが可能になる
  • ID発行許可は適切に行う必要がある

作業

1 IDプロバイダーの作成

  • サイドバーからIDプロバイダと書かれたボタンを見つけ、押す

  • プロバイダを追加というテキストのボタンを押すと、以下の写真のようなページに遷移する

  • プロバイダのタイプ

    • OpenID Connect
  • プロバイダのURL

  • 対象者

    • sts.amazonaws.com
  • タグ

    • つけてもつけなくてもよいと思います
      OIDCプロバイダ

入力し終えたら、プロバイダを追加ボタンを押す

2 IAMロールの作成

  • ロールを作成ボタンを押す
  • カスタム信頼ポリシーを選択し、JSONを入力
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::<AWSアカウントID>:oidc-provider/token.actions.githubusercontent.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
              // 特定のブランチを指定する場合はEquals
              "StringEquals": {
                  "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
                  "token.actions.githubusercontent.com:sub": "repo:<GitHubユーザー名>/<GitHubリポジトリ名>:ref:refs/heads/<ブランチ名>"
              },
              // リポジトリのブランチすべてを許可する場合
              "StringLike": {
                  "token.actions.githubusercontent.com:sub": "repo:<GitHubユーザー名>/<GitHubリポジトリ名>:*"
              }
            }
        }
    ]
}

3 IAMロールにポリシーをアタッチ

必要なポリシーを選択肢てアタッチします
IAM Policy

  • ロール名と任意で説明を入力
  • スクロールし、ロールを作成というボタンを押す
    Role Name

4 Github Actionsで使用する場合について

  • AWS 認証には aws-actions/configure-aws-credentials
  • role-to-assume
    • IAMロールのARNを指定
  • permission
    • id-token: writeを設定
name: ""

env:
  AWS_REGION : "ap-northeast-1"

permissions:
  id-token: write
  contents: write

jobs:
  login:
    runs-on: ubuntu-latest
    steps:
      - name: configure aws credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-region: ${{ env.AWS_REGION }}
          role-to-assume: ${{ secrets.AWS_ROLE_ARN }}

参考

GitHub Actions で OIDC を使用して AWS 認証を行う

OpenID Connect

GitHubで編集を提案

Discussion