クロスアカウントの読み取り専用アクセスを許可するIAMロールのCloudformationテンプレートに取り組んでいます。読み取り専用アクセスにも管理ポリシーを使用します。これまでにいくつかのエラーを解決しましたが、テンプレートを検証しようとすると、「null」の値はテンプレートでは許可されていません」というエラーが発生します。スペースや構文の問題だと思いますが、最初からcloudformationテンプレートを作成してYAMLを使用するのは初めてなので、確信が持てません。
AWSTemplateFormatVersion: '2010-09-09'
Description: AWS CloudFormation template IAM Role for New Relic to have read access to AWS account
Resources:
NewRelicInfrastructure-IntegrationsRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
Effect: Allow
Principal:
AWS: 11111111
Action: sts:AssumeRole
Condition:
StringEquals:
sts:ExternalId: '11111'
Path: '/'
ManagedPolicyArns: arn:aws:iam::aws:policy/ReadOnlyAccess
RoleName: NewRelicInfrastructure-Integrations2
インデントが修正されました。AssumeRolePolicyDocumentで何かを指定していましたが、YAMLシンタックは正しくありませんでした。これは機能しました:
AWSTemplateFormatVersion: '2010-09-09'
Description: AWS CloudFormation template IAM Role for New Relic to have read access to AWS account
Resources:
NewRelicInfrastructureIntegrationsRole:
Type: AWS::IAM::Role
Properties:
Path: '/managed/'
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/ReadOnlyAccess'
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
-
Action: sts:AssumeRole
Effect: Allow
Principal:
AWS: 1111111111111
Condition:
StringEquals:
sts:ExternalId: '11111'
RoleName: NewRelicInfrastructureIntegrationsRole
問題はAssumeRolePolicyDocument:
にあります。必須ですが、空のままにしました。 Path
ではなくManagedPolicyArns
の下にRoleName
、Resources
、Properties
があるインデントの問題もあります。
試してください:
AWSTemplateFormatVersion: '2010-09-09'
Description: AWS CloudFormation template IAM Role for New Relic to have read access to AWS account
Resources:
NewRelicInfrastructure-IntegrationsRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
Effect: Allow
Principal:
AWS: 11111111
Action: sts:AssumeRole
Condition:
StringEquals:
sts:ExternalId: '11111'
Path: '/'
ManagedPolicyArns: arn:aws:iam::aws:policy/ReadOnlyAccess
RoleName: NewRelicInfrastructure-Integrations2
YAMLインタープリターをオンラインで使用して、yamlファイルでnull値を取得している可能性がある場所を示します。間違ったインデントがnull値になる可能性があるため、それらを見つけるのは困難です。yamlインタープリターは、jsonでその値を取得している場所を示します。