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

【AWS x Git】CloudformationのGit同期機能で気をつけるべき注意点2点

Posted at

概要

AWS CloudformationのGit同期機能を実施しました。
差分確認や履歴保持にはとても良いですが、いくつか注意点もあるなと感じたので紹介します。

注意点

設定手順などは公式ドキュメントや他の方の記事をご参照ください。

個人的に感じた注意点は以下の2点。

①手入力のパラメータを持つテンプレートが管理できない
②CloudformationのIAMロール権限が大きくなりがち

①手入力のパラメータを持つテンプレートが管理できない

例えば、以下のようなYAMLをGit同期してみます。

sample-template.yaml
AWSTemplateFormatVersion: 2010-09-09
Parameters:
  RoleName:
    Type: String
    NoEcho: true

Resources:
  CloudWatchEventsRoleSample:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - 
            Effect: Allow
            Principal:
              Service:
                - events.amazonaws.com
            Action:
              - sts:AssumeRole
      Path: "/"
      RoleName: !Ref RoleName
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonEC2FullAccess

すると、同期時に以下のエラー。
RoleNameに値がないといわれています。
これは、AWSマネジメントコンソールのCFスタック更新画面から更新する場合は、手入力でパラメータを設定できますが、Git同期機能ではできないため。

Failed to create changeset. Couldn't call cloudformation for stack: sample-template and changeset: cloudformation-auto-sync-xxxxxx because of a validation error. The error was Parameters: [RoleName] must have values (Service: AmazonCloudFormation; Status Code: 400; Error Code: ValidationError; Request ID: xxxxxx; Proxy: null)

では、一度UIからアップロードして手動で値を手入力した後にgit同期機能に変更したらどうなるのか?

ひょっとして手動設定した際の機密ワードが裏で残ってて、git同期した時も引き継がれたりしないかな?という淡い期待を胸にいざ実行。以下はGit同期の際に必要となるスタックデプロイファイルというものです(Git同期時に自動で作成され、AWS botからPullRequestが飛んできます)。

template-file-path: sample_app/sample-template.yaml
parameters:
  RoleName: '****'
tags: {}

エラーでした笑

Resource handler returned message: "The specified value for roleName is invalid. It must contain only alphanumeric characters and/or the following: +=,.@_- (Service: Iam, Status Code: 400, Request ID: xxxxx)" (RequestToken: xxxxx, HandlerErrorCode: GeneralServiceException)

'****'という名前としてCfnに渡されてしまっています。
文字列として不適切なものが渡されているというエラーになってしまいました。それはそうか。

うーむ、とはいえ、DBの大事なパスワード情報とか、Githubに永遠に残すのはなんか嫌だなというのはありますよね...。
他のテンプレートは全てgitなのに一部だけgit連携しない、という状態になるとそれはそれで後々面倒になるなぁとも思います。

この点は、Git同期機能に完全移行!とはならない点だなと思いました。

②CloudformationのIAMロール権限が大きくなりがち

Git同期のIAMロールは公式ドキュメントにも記載あるので、そちら参考にすれば簡単です。

ただし、Cloudformation自体のIAMロールが少し面倒です。
というのも、今までAdministratorAccessロールをもつIAMユーザーでアップロードや編集できていたものが、今後はCloudformation自体が実行する必要があるためです。

そのため、STSだけではなくiam:GetRoleなどなど必要になったりで、権限が大きくなりがちだなと思いました。
基本的に権限周りは最小限にするのが鉄則。アクセスが自由なロールを不用意に使い回してしまうリスクは許容できたとしても、顧客によってはその説明・説得が必要となることもあるのでやや面倒かもです。社内システムなどでは問題なく使えるかもしれません。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?