kakakakakku blog

Weekly Tech Blog: Keep on Learning!

CDK で IAM OIDC ID プロバイダーを設定するときは OidcProviderNative を使おう

AWS CDK で IAM OIDC ID プロバイダーを設定するときに OpenIdConnectProvider を使うと内部的に AWS Lambda 関数(カスタムリソース)もデプロイされる仕組みになっている💡とは言えデプロイのために AWS Lambda 関数が増えるのは避けたいな〜(ちょっと嫌だな〜)という気持ちもあったりする.

docs.aws.amazon.com

👾 oidc.ts (OpenIdConnectProvider)

サンプルとして GitHub Actions で使う IAM OIDC ID プロバイダーを設定する場合は以下のようなコードになる.

import {
    Stack,
    StackProps,
    aws_iam
} from 'aws-cdk-lib'
import { Construct } from 'constructs'

export class OidcStack extends Stack {
    constructor(scope: Construct, id: string, props?: StackProps) {
        super(scope, id, props)

        new aws_iam.OpenIdConnectProvider(this, 'GitHubActions', {
            url: 'https://token.actions.githubusercontent.com',
            clientIds: ['sts.amazonaws.com'],
        })
    }
}

OidcStack-CustomAWSCDKOpenIdConnectProviderCustomR-xxxxx という AWS Lambda 関数がデプロイされていた.

実際にデプロイされた AWS Lambda 関数(カスタムリソース)

OidcProviderNative とは

AWS CDK v2.200.0 で新しく OidcProviderNative が追加された❗️

github.com

これは AWS CloudFormation の AWS::IAM::OIDCProvider にマッピングされるため AWS Lambda 関数(カスタムリソース)はデプロイされず,シンプルになる👏

docs.aws.amazon.com

👾 oidc.ts (OidcProviderNative)

コードは OpenIdConnectProvider とほとんど同じで OK👌

import {
    Stack,
    StackProps,
    aws_iam
} from 'aws-cdk-lib'
import { Construct } from 'constructs'

export class OidcStack extends Stack {
    constructor(scope: Construct, id: string, props?: StackProps) {
        super(scope, id, props)

        new aws_iam.OidcProviderNative(this, 'GitHubActions', {
            url: 'https://token.actions.githubusercontent.com',
            clientIds: ['sts.amazonaws.com'],
        })
    }
}

デプロイ確認

期待通りにデプロイできた👌

OidcProviderNative でデプロイできた

まとめ

今後新しく IAM OIDC ID プロバイダーを設定するときは OidcProviderNative を使おう〜💪

関連記事

kakakakakku.hatenablog.com