Upgrade to Pro — share decks privately, control downloads, hide ads and more …

IAM周りの権限を持たない開発部隊がCodePipelineにCDKを導入するためにしたこと/...

 IAM周りの権限を持たない開発部隊がCodePipelineにCDKを導入するためにしたこと/CdkConJp2023

AWS CDK Conference Japan 2023での登壇資料です

Avatar for yskst96

yskst96

May 21, 2023

Other Decks in Programming

Transcript

  1. 佐田 裕輔 デジタルイノベーション開発部 シニアスペシャリスト 好きなAWSサービス ・Lambda ・CloudFormation/CDK ・App Runner(L2 Constructがずっとalphaで悲しい)

    意気込み CFP採択されていたことにずっと気づかず、3日前に気付いたときは死ぬかと思いました。 こういう登壇は初めてなので緊張していますがよろしくお願いいたします。 CDKは業務で使い始めて1年弱ぐらいです。
  2. 弊社について お客様接点 データ 統合/活用 契約管理 System of Engagement SoE SoR

    SoI System of Record System of Insight 3領域でAWSを活用中 •業務内容 東京海上グループの 戦略を担うシステム会社 東京海上グループ情報システムの 企画・提案・設計・開発・保守・運用・ システム活用支援 •設立 年 月 年 月 東京海上、日動火災の システムグループ3社が合併して 東京海上日動システムズ(株)が発足 ✓デジタル系・お客様 接点強化アプリ ✓クラウドネイティブ ✓ データレイク&分析環境 ✓既存VMのLift & Shift ✓IaaS中心 佐田はココ
  3. SoEの組織構成 インフラ管理チーム アプリ開発チーム ✓AWSアカウント払い出し ✓ IAMやCLIキーなど権限まわりの管理 ✓その他開発チームが勝手にいじると マズい系リソース(e.g S3バケット) の管理

    ✓払い出されたAWSアカウント上で のびのびとスクラム開発する ✓IAMロールやS3バケットなどは 基本的にインフラ管理チームが 事前に定義したものを使う 佐田はコッチ 時代はDevOpsや! とはいっても金融系である以上最低限の権限分離は必須
  4. パイプライン概要(before CDK) AWS CloudFormation Create/Execute Changeset AWS CodeBuild Assets AWS

    CodePipeline > git push branchXX > sam package AWS CodeCommit Cfn template(yaml) Deploy CodePipelineRole CodeBuildRole Src code SAMのAsset用 S3 AWS SAM templateを利用
  5. AWS CodePipeline > sam package > git push branchXX AWS

    CodeBuild パイプライン概要(before CDK) AWS CloudFormation Create/Execute Changeset Src code AWS CodeCommit Cfn template(yaml) Deploy CodePipelineRole CodeBuildRole Assets SAMのAsset用 S3 各種リソースの更新権限 はインフラ管理チームが 事前作成した 2Roleに集約 Asset用のS3バケットと KMS Keyは インフラ管理チーム が事前作成したものを使う
  6. なんかエラーになった よし帰るか! 開発チーム > cdk bootstrap --profile app-A Environment aws://XXXXXXXXXX/ap-northeast-1

    failed bootstrapping: Error: The stack named CDKToolkit failed creation, it may need to be manually deleted from the AWS console: ROLLBACK_COMPLETE: API: s3:CreateBucket Access Denied, API: iam:CreateRole User: arn:aws:sts::XXXXXXXXXX:assumed- role/DeveloperRole/YusukeSata is not authorized to perform: iam:CreateRole on resource:… …以下エラーメッセージが続く…
  7. CDK Bootstrap 公式リファレンス https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/bootstrapping.html ブートストラップは、AWS CDKアプリケーションを環境にデプロイする前にリソースを プロビジョニングするプロセスです。 これらのリソースには、ファイルを保存するための Amazon S3

    バケットや、デプロイの 実行に必要なアクセス権限を付与する IAM ロールが含まれます。 一方で… 開発チーム用のプロファイル(=IAM Role)にはS3やIAMのcreate権限が与えられていない!
  8. CDK Bootstrap cdk bootstrapのデフォルトの挙動として実行時に以下のリソースを作成する Cfnテンプレートが実行されることになっている Bootstrap時に実行されるテンプレートはcdk bootstrap --show-templateで確認できる Amazon S3

    bucket AWS KMS key IAM roles Amazon ECR SSM parameter CDKによってデプロイ されるAssetの 一時置き場 ←のS3の暗号化キー CDKによって行われる 各種リソースの更新の 際にAssumeされるRole群 用途に応じて5 Role作成 される(多い) CDKによって デプロイされる DockerImageAsset の一時置き場 Bootstrap template のバージョンを保持する CDK v2からは「モダンテンプレート」と呼ばれるbootstrapping template仕様が標準となり これらリソースのカスタマイズが可能になった。
  9. AWS CodePipeline > git push branchXX > sam package AWS

    CodeBuild パイプライン概要(before CDK) AWS CloudFormation Create/Execute Changeset Src code AWS CodeCommit Cfn template(yaml) Deploy CodePipelineRole CodeBuildRole Assets SAMのAsset用 S3 各種リソースの更新権限 はインフラ管理チームが 事前作成した 2Roleに集約 Asset用のS3バケッと KMS Keyは インフラ管理チームが 事前作成したものを使う そもそも… Bootstrapで用意してもらわなくても インフラ管理チームが事前定義したリソース↑があるので それそのまま使ってホシイ。特にIAM Role
  10. 実はCDKには何種類かのStack Synthesizerが実装されており デフォルトで利用されるのはDefaultStackSynthesizer DefaultStackSynthesizerを使用する場合、最初にAWS環境を ブートストラップする必要があります。 CdkのGithubのwiki「Security And Safety Dev Guide」[1]より抜粋

    いろいろ調べた結果 synthesize時にBootstrapリソースに依存するのは DefaultStackSynthesizerの仕様だったっぽい DefaultStackSynthesizer [1] https://github.com/aws/aws-cdk/wiki/Security-And-Safety-Dev-Guide#defaultstacksynthesizer
  11. パイプライン概要(After CDK) AWS CloudFormation Create/Execute Changeset AWS CodeBuild Assets AWS

    CodePipeline > git push branchXX > cdk synth AWS CodeCommit Cfn template(yaml) Deploy CodePipelineRole CodeBuildRole Src code CDKのAsset用 S3 ココだけ変わった