JenkinsからAssumeRoleを使って別AWSアカウントのCodeBuildプロジェクトを起動する。

AWS運用自動化サービス「Cloud Automator」

こんにちは。今期から技術1課に移動しました、岩本です。

弊社は、割と柔軟に他部署への転属希望が出しやすく、新しく所属した技術1課は、
よくあるインフラではなく、開発やデプロイメントなどを中心に扱う事が多い課です。
ここ最近は、JenkisnとCodeBuildと戯れる日々が続いています。

本題

やりたい事

  • AWSアカウントAにあるJenkinsサーバーから、AWSアカウントBにあるCodeBuildプロジェクトを実行したい。
  • CodeBuildプロジェクトの起動は、(セキュリティ的な観点から)クレデンシャルではなくAssumeRoleを利用したい。

手順

準備

AWS(IAM)の設定

  • AWSアカウントA(Jenkinsが稼働しているAWSアカウント)にて、IAMユーザーを作成し、シークレットキー/アクセスキーを生成します。
    • この際、該当IAMユーザーへの権限の付与は不要です。
  • AWSアカウントB(Codebuildが起動するAWSアカウント)にて、該当のCodebuildプロジェクトの実行権限を持ったRoleを作成し、アカウントAを信頼する様に設定します。
    • JenkinsからCodebuildへソースファイルの送信はS3を経由するため、特定のS3バケットへのアクセス権限も必要です。
    • 記載は以下の通り。
  • trust relationship

Jenkinsの設定

  • Jenkin画面より認証情報を開き、認証情報を登録します。
    • 種類:CodebuildCredensials
    • ID:Jenkin内で使用する名前(任意・ここではsample-idと設定)
    • アクセスキー:AWSアカウントAで作成したアクセスキー
    • シークレットキー:AWSアカウントAで作成したシークレットキー
    • 高度な設定/RoleArn:AWSアカウントBで作成したRoleのARN

JenkinsFile

  • Jenkinsfileには以下のように記載します。

まとめ

  • 上記の様に設置することで、一部でアクセスキー/シークレットキーの利用はありますが、
    比較的セキュアに認証情報の付与が行えます。ぜひご利用ください。
AWS運用自動化サービス「Cloud Automator」