👾

CloudformationでIAM Roleを作成する際のDescriptionにはpattern制約がある

2022/06/06に公開

CloudFormationでIAMRoleを作成しようとした際、何も考えずDescriptionに任意のStringを定義しようとした際に、スタック生成時にエラーになってしまいました。

Descriptionには、定められたPatternが存在していたので、例とPatternについて説明します。

sample-iam-role.yml
AWSTemplateFormatVersion: "2010-09-09"
Description: A sample cloudformation template
Resources:
  SampleIamRole:
    Type: AWS::IAM::Role
    Properties: 
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: "Allow"
            Action: "sts:AssumeRole"
            Principal:
              Service:
                - "cloudformation.amazonaws.com"
      Description: this is the description
      ManagedPolicyArns: 
        - 'arn:aws:iam::aws:policy/AmazonS3FullAccess'
      RoleName: SampleIamRoleName

正常にIAM Roleが作成されると、下記画像のようにDescriptionが表示されます。

では、Descriptionを修正して、エラーを再現します。

iam-role-description-failed.yml
AWSTemplateFormatVersion: "2010-09-09"
Description: A sample cloudformation template
Resources:
  SampleIamRole:
    Type: AWS::IAM::Role
    Properties: 
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: "Allow"
            Action: "sts:AssumeRole"
            Principal:
              Service:
                - "cloudformation.amazonaws.com"
      Description: this is the あいあむろーる
      ManagedPolicyArns: 
        - 'arn:aws:iam::aws:policy/AmazonS3FullAccess'
      RoleName: SampleIamRoleName

差分はDescriptionの箇所です

- Description: this is the description
+ Description: this is the あいあむろーる

このiam-role-description-failed.ymlをテンプレートファイルに指定し、スタックを更新してみます。

下記画像のようにスタック更新時にエラーになってしまいました。

Value 'this is the ???????' at 'description' failed to satisfy constraint: Member must satisfy regular expression pattern: [\u0009\u000A\u000D\u0020-\u007E\u00A1-\u00FF]*

this is the ???????

Description: this is the あいあむろーる

あいあむろーるの部分を指しているように見えます。

ドキュメントにDescriptionについての言及がされていました。
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html

Description
A description of the role that you provide.
Required: No
Type: String
Maximum: 1000
Pattern: [\p{L}\p{M}\p{Z}\p{S}\p{N}\p{P}]*
Update requires: No interruption

Patternの箇所に注目します。

[\p{L}\p{M}\p{Z}\p{S}\p{N}\p{P}]*

https://www.php.net/manual/ja/regexp.reference.unicode.php
を参考にすると

Symbol meaning
L アルファベット (Letter)
M 記号 (Mark)
Z 区切り文字 (Separator)
S 記号 (Symbol)
N 数字 (Number)
P 句読記号 (Punctuation)

上記の対応表のようになり、このPatternに適用されるものしかDescriptionには設定できないとのことです。
iam-role-description-failed.ymlに定義したあいあむろーるの部分はこのPatternに違反するため、エラーになってしまうのでした。

Discussion