2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CircleCIでAWSへのアクセスにOpen ID Connect(OIDC)を使う

Last updated at Posted at 2023-06-25

はじめに

2023年1月にCircleCIでセキュリティインシデントが発生し、Environment Variableの変更を余儀なくされました。
https://circleci.com/blog/january-4-2023-security-alert/

手作業で結構辛かったので、OIDCを利用してAWSに接続するように変更したいと思います。

Circleで必要な情報を取得する

  • CircleCIのOrganization SettingsにあるOrganization IDをメモっておきます。

スクリーンショット 2023-06-25 15.35.27.png

Terraformでopenid_connectを作成する

必要なのは以下の3つです。

  • aws_iam_openid_connect_provider でOPENIDコネクトプロバイダーを作成する
  • aws_iam_roleでCircleCI側に設定するRoleを作成する
  • aws_iam_role_policy_attachmentaws_iam_role_policyでCircleCIで実行する内容をRoleに権限を追加する(今回だとECRにアップしたいので、AmazonEC2ContainerRegistryPowerUserとしている)
locals {
 circleci_organization_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
 circleci_thumbprint = "9e99a48a9960b14926bb7f3b02e22da2b0ab7280" # CircleCIはこれが固定値
}

resource "aws_iam_openid_connect_provider" "default" {
  url = "https://oidc.circleci.com/org/#{local.circleci_organization_id}"

  client_id_list  = [local.circle_organization_id]
  thumbprint_list = [local.circleci_thumbprint]
}

resource "aws_iam_role" "default" {
  name        = "circleci_role"
  description = "CircleCI identify Provider Role"
  assume_role_policy = <<EOF
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::${data.aws_caller_identity.self.account_id}:oidc-provider/oidc.circleci.com/org/${local.circleci_organization_id}"
            },
            "Action": "sts:AssumeRoleWithWebIdentity"
        }
    ]
}
EOF
}

resource "aws_iam_role_policy_attachment" "ecr_power_user" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPowerUser"
  role       = aws_iam_role.default.name
}

CircleCI側の設定

  • 注意点しては、aws-cliのバージョンが4.0.0以上にする必要があります。
orbs:
  aws-cli: circleci/aws-cli@4.0.0

jobs:
  build:
    steps:
      - aws-cli/setup:
        role_arn: arn:aws:iam::${AWS_ACCOUNT_ID}:role/circleci_role

AWSに作成されるIAM

IDプロバイダ

スクリーンショット 2023-06-25 15.58.59.png

IAMロール

スクリーンショット 2023-06-25 16.01.31.png

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?