LoginSignup
0
0

More than 3 years have passed since last update.

ConverTo-JsonしたポリシードキュメントがWrite-IAMGroupPolicy : The policy failed legacy parsing

Posted at

メモ。AWSのポリシードキュメントをハッシュから ConverTo-Json で生成するときは Version キーが最初に来るように注意する必要がある。

現象

PowerShellで次のようにポリシーを設定しようとすると...

PS> $policyDoc = ( @{
>>                 "Version" = "2012-10-17";
>>                 "Statement" = @{
>>                     "Effect" = "Allow";
>>                     "Action" = "sts:AssumeRole";
>>                     "Resource" = $RoleArn
>>                 }
>>             } | ConvertTo-Json )
PS> Write-IAMGroupPolicy -GroupName $GroupName -PolicyName $PolicyName -PolicyDocument $policyDoc

次のようなエラーになる。

Write-IAMGroupPolicy : The policy failed legacy parsing

原因

Version ポリシー要素が Statement 要素より前に来ないといけない。

Version ポリシー要素は、このポリシーを処理するために使用される言語構文ルールを指定します。ポリシーの使用可能なすべての機能を使用するには、すべてのポリシーの Statement 要素の前に以下の Version 要素を含めます。
IAM JSON ポリシーの要素:Version - AWS Identity and Access Management

ConvertTo-Json で生成されたポリシードキュメントでは Statement の方が先に来ていたため、エラーになっていた。

対策

元データを通常のハッシュではなく順序付きハッシュテーブルとして作成すればよい。つまり @{...} ではなく [ordered]{...} で生成する。

PS> $policyDoc = ( [ordered]@{
>>                 "Version" = "2012-10-17";
>>                 "Statement" = @{
>>                     "Effect" = "Allow";
>>                     "Action" = "sts:AssumeRole";
>>                     "Resource" = $RoleArn
>>                 }
>>             } | ConvertTo-Json )
PS> Write-IAMGroupPolicy -GroupName $GroupName -PolicyName $PolicyName -PolicyDocument $policyDoc

参照

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