HCP Terraformのdynamic credentials用のAWS IAM RoleをAWS CloudFormationで作成してみた

HCP Terraformのdynamic credentials用のAWS IAM RoleをAWS CloudFormationで作成してみた

Clock Icon2025.03.11

HCP TerraformはIAM Role経由で、AWS認証情報を取得することができます。

今回はHCP Terraform用のIAM RoleをCloudFormationを使って作成してみました。

CloudFormationテンプレート

AWSTemplateFormatVersion: '2010-09-09'
Description: 'HCP Terraform OIDC Provider and IAM Role'

Parameters:
  HCPTerraformOrgName:
    Type: String
    Description: 'HCP Terraform Organization Name'

Resources:
  HCPTerraformOIDCProvider:
    Type: 'AWS::IAM::OIDCProvider'
    Properties:
      Url: 'https://app.terraform.io'
      ClientIdList:
        - 'aws.workload.identity'

  HCPTerraformRole:
    Type: 'AWS::IAM::Role'
    Properties:
      RoleName: 'hcp-tf-role'
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Federated: !GetAtt HCPTerraformOIDCProvider.Arn
            Action: 'sts:AssumeRoleWithWebIdentity'
            Condition:
              StringEquals:
                'app.terraform.io:aud': 'aws.workload.identity'
              StringLike:
                'app.terraform.io:sub': !Sub 'organization:${HCPTerraformOrgName}:project:*:workspace:*:run_phase:*'

  HCPTerraformRolePolicyAttachment:
    Type: 'AWS::IAM::RolePolicy'
    Properties:
      PolicyName: 'AdministratorAccess'
      RoleName: !Ref HCPTerraformRole
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action: '*'
            Resource: '*'

Outputs:
  RoleArn:
    Description: 'ARN of the created IAM Role'
    Value: !GetAtt HCPTerraformRole.Arn

OIDC Providerでは、エンドポイント検証用のサムプリントが必要です。

今回のようにCloudFormationテンプレート上でサムプリントを明示的に指定しなくても、自動的に値が設定されます。

今回は、OIDC ProviderとIAM Roleを1つのテンプレートで定義しました。

1つのAWSアカウント上にIAM Roleを複数作るパターンもあると思います。

チーム構成や設計によっては、IAM RoleとOIDC Providerでスタックを分けたほうが管理はしやすいかもしれません。

AWS::IAM::RoleStringLikeの部分で、このIAM Roleを引き受けるProject・Workspace・Run Phaseも指定できます。

お好みで、この部分をParametersにしても良いかもしれませんね。

動作確認

CloudFormationテンプレートからスタックを作成するとIAM Roleが作成されます。

IAM RoleのARNをHCP Terraformにセットするため控えておいてください。(スタックのOutputsからも確認できます。)

以下を参考にProject・Workspace・Variable setsを作成します。

https://zenn.dev/chario/books/tfc-aws-introductory-book/viewer/
05_04_tfc_github_deploy

WorkspaceのVariablesに、IAM Role ARNを設定しました。

vscode-drop-1741653674795-kx0q7nel3zl.png

Plan・Applyが成功することも確認できました。

vscode-drop-1741653783866-fhlhykfs9i8.png

おわりに

CloudFormationでHCP Terraform用のIAM Roleを作成してみました。

今回のテンプレートにCloudFormation StackSetsを組み合わせて、マルチアカウント環境にIAM Roleを作成する記事を書いてみようと思います。

以上、AWS事業本部の佐藤(@chari7311)でした。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.