😄
OIDCを使用してAWSと連携する
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
-
タグ
- つけてもつけなくてもよいと思います
- つけてもつけなくてもよいと思います
入力し終えたら、プロバイダを追加ボタンを押す
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ロールにポリシーをアタッチ
必要なポリシーを選択肢てアタッチします
- ロール名と任意で説明を入力
- スクロールし、ロールを作成というボタンを押す
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 }}
Discussion