インフラ

CDK「aws-cdk-github-oidc」を使ってGithubActionsで引き受けれるIAMロールを作る

こんにちは、ちゃりおです。

先日、OIDCを使ってGithubActionsにIAMロールを渡してAWS上の操作ができるようになりました。

https://github.blog/changelog/2021-10-27-github-actions-secure-cloud-deployments-with-openid-connect/

今までは、IAMのアクセスキーを使ってGithubActionsにセットする必要がありました。
しかし、IAMのアクセスキーの管理など手間が発生していました。

今回のアップデートで、IAMのアクセスキーを発行することなく一時的なクレデンシャルを使ってAWSの操作ができるようになりました。

この機能かなり便利ですよね。
CDK書くのが面倒で、なにか楽な方法ないかと思っていたら以下のツイートが流れてきました。

CDKのConsructHubに「aws-cdk-github-oidc」という便利そうなものがあった!

ブログにしてみます。

デモ

とりあえず、pahudnetさんのスクショの通りやってみます。

# CDK
import * as cdk from '@aws-cdk/core';
import { CfnOutput } from '@aws-cdk/core';
import { Bucket } from '@aws-cdk/aws-s3';
import { GithubActionsIdentityProvider, GithubActionsRole } from 'aws-cdk-github-oidc';


export class CdkGithubOidcSampleStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    const provider = new GithubActionsIdentityProvider(this, "Provider")

    const role = new GithubActionsRole(this, "UploadRole", {
      provider,
      owner: "msato0731",
      repo: "cdk-github-oidc-demo",
    })
    new CfnOutput(this, "RoleArnOutputs", { value: role.roleArn })
    const bucket = Bucket.fromBucketName(this, "Bucket", "cdk-github-oidc-demo")
    bucket.grantReadWrite(role)
  }
}

providerとroleのところが簡単にかけますね。

#GithubActions
name: demo
on:
  workflow_dispatch:
jobs:
  deploy:
    name: Upload to Amazon S3
    runs-on: ubuntu-latest
    permissions:
      id-token: write # needed to interact with GitHub's OIDC Token endpoint.
      contents: read
    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@master
      with:
        role-to-assume: 
        aws-region: ap-northeast-1 

    - name: Sync files to S3
      run: |
        aws s3 sync . s3://cdk-github-oidc-demo

成功することを確認できました。

作成されるリソースを見てみる

GithubのIDプロパイダが作成されました。

信頼関係のところも、自分ではownerとrepoしか書きませんでしたが、自動的に入れてくれています。

既存のProviderを割り当てる

Providerはアカウントに一つしか作れないため、既存のProviderを使いたいときがあると思います。
以下のようにfromAccountを使えば可能です。

const provider = GithubActionsIdentityProvider.fromAccount(this, 'GithubProvider');

参考

Configuring OpenID Connect in Amazon Web Services

Amzonで「AWS」の本を見てみる

楽天で「AWS」の本をみてみる!!

cdk
CDKでECSデプロイメントサーキットブレイカーの有効化時のサービス置き換えを回避するこんにちは、ちゃりおです。 CDKを使ってECSを運用しています。 運用中のECSサービスのデプロイメントサーキットブレイカーを有効化...
ECR
ecr-deploymentを使ってCDKでECRの名前を指定してdocker pushするこんにちは、ちゃりおです。 CDKで作成したECRに対して、Dockerイメージをpushすることがよくあります。 CDKでECRを作...
Github Actionsを使ってCDKを自動デプロイするこんにちは、ちゃりおです。 CDK手動反映だと反映漏れが発生することもあり、今回はGithub Actionsを使ってCDKを自動デプ...