LoginSignup
0
0

CloudFromationでIAMユーザ作成時にアクセスキーをSecret Managerに保管してみた

Last updated at Posted at 2024-05-19

はじめに

アクセスキーを作成するとセキュリティが心配になりますよね。
数も増えると管理も大変になってしまいます。

そんな時は、「Secret Manager」を使いましょう!

今回は、CloudFormationでIAMユーザ作成→アクセスキー作成→Secret Managerに
保存まで自動化してみました。

テンプレート

AWSTemplateFormatVersion: 2010-09-09
Description: CreateIAMUser
Resources: 
  TestUser:
    Type: AWS::IAM::User
    Properties:
      UserName: TestUser
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AdministratorAccess

  AccessKey:
    Type: AWS::IAM::AccessKey
    Properties:
      Status: Active
      UserName: !Ref TestUser

  AccessKeySecret:
    Type: AWS::SecretsManager::Secret
    Properties:
      Name: !Sub ${TestUser}-credentials
      SecretString: '{"accessKeyId": {"Ref": "AccessKey"},"secretAccessKey": {"Fn::GetAtt": ["AccessKey", "SecretAccessKey"]}}'

解説が入らない方はここまででも大丈夫です。作成されたリソースの確認をしてみてください。
「TestUser」の部分は適宜変えていただいて問題ございません。

以下からテンプレートについて解説していきます。

#cloudformationテンプレートのバージョンを指定します
AWSTemplateFormatVersion: 2010-09-09

#テンプレートの説明を任意で入れます
Description: CreateIAMUser

#リソースの定義をします
Resources: 

    #作成する任意のリソース名をいれます
  TestUser:

    #作成するリソースのタイプを指定します
    Type: AWS::IAM::User

    #このプロパティの項目に基づいてリソースの作成をしていきます
    Properties:

        #IAMユーザの名前を指定します
      UserName: TestUser

      #作成するIAMユーザにアタッチするポリシーを指定します
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AdministratorAccess

    #作成するアクセスキーのリソース名です
  AccessKey:

    #作成するリソースのタイプを指定します
    Type: AWS::IAM::AccessKey

    #このプロパティに基づいてリソースの作成をしていきます
    Properties:

        #アクセスキーを有効な状態で作成します
      Status: Active

      #作成するアクセスキーと上記で作成したIAMユーザの関連付けをします
      UserName: !Ref TestUser

    #任意のシークレット名を指定します
  AccessKeySecret:

    #作成するリソースタイプの指定をします
    Type: AWS::SecretsManager::Secret

    #このプロパティに基づいてリソースの作成をしていきます
    Properties:

      #作成するシークレット名を指定します
      Name: !Sub ${TestUser}-credentials

      #作成したシークレットに格納する文字列を指定します。アクセスキーIDは指定した「Accesskey」(ポリシーの行の下)を参照し、
      #シークレットアクセスキーはGetAtt使用して「AccessKey」リソースの「secretAccessKey」属性を取得します。
      SecretString: '{"accessKeyId": {"Ref": "AccessKey"},"secretAccessKey": {"Fn::GetAtt": ["AccessKey", "SecretAccessKey"]}}'

参考にさせていただきました。
https://dev.classmethod.jp/articles/issuing-iam-access-keys-and-storing-them-in-secrets-manager-with-cloudformation/

お疲れ様でした。

0
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
0
0