调用 EnableAWSServiceAccess 操作时:您指定了无法识别的服务主体

when calling the EnableAWSServiceAccess operation: You specified an unrecognized service principal

C:\>aws organizations enable-aws-service-access --service-principal cloudformation.amazonaws.com

调用 EnableAWSServiceAccess 操作时发生错误 (InvalidInputException):您指定了无法识别的服务主体。

C:\>aws organizations enable-aws-service-access --service-principal "cloudformation.amazonaws.com"

调用 EnableAWSServiceAccess 操作时发生错误 (InvalidInputException):您指定了无法识别的服务主体。

C:\>aws organizations enable-aws-service-access --service-principal 'cloudformation.amazonaws.com'

调用 EnableAWSServiceAccess 操作时发生错误 (InvalidInputException):您提供的值与所需模式不匹配。

知道哪里出了问题吗?

根据文档 here

--服务主体(字符串) 您要为其启用与组织集成的 AWS 服务的服务主体名称。这通常采用 URL 的形式,例如 service-abbreviation.amazonaws.com .

我试过

"s3.amazonaws.com"
"ec2.amazonaws.com"
"elasticbeanstalk.amazonaws.com"
"autoscaling.amazonaws.com"

作为服务主体。但是都报同样的错误。

虽然它在控制台中有效。 AWS 控制台 -> CloudFormation -> StackSets -> 启用可信访问。

EnableAWSServiceAccess 用于:

When you enable integration, you allow the specified service to create a service-linked role in all the accounts in your organization. This allows the service to perform operations on your behalf in your organization and its accounts.

我认为它失败的原因是 CloudFormation 确实支持服务相关角色。您可以在 tablehttps://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html.

中验证

它也适用于控制台,因为您是为 StackSets 而不是 CloudFormation 本身启用它。 docs 中所列,CloudFormation 不支持您的组织 的可信访问。只有 AWS CloudFormation Stacksets 支持它。

而且它只有效 though console:

You can enable trusted access using either the AWS CloudFormation console or the AWS Organizations console.

您不能使用 CLI 或 SDK 执行此操作。

您可以使用以下方式 aws organizations enable-aws-service-access --service-principal member.org.stacksets.cloudformation.amazonaws.com