当我试图在帐户B(111111111111(中创建此IAM策略,以便帐户A(2222222222222(中的角色可以访问特定的ECR存储库时,它会错误地声明主体无效。
Unsupported Principal: The policy type IDENTITY_POLICY does not support the Principal element. Remove the Principal element.
这是无效的政策,如果我取消了主要角色,我不完全明白我如何才能取得同样的结果。
{
"Version": "2012-10-17",
"Statement": [{
"Sid": "Sid0",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::2222222222222:role/role-name-1"
},
"Action": [
"ecr:DescribeImages",
"ecr:DescribeRepositories"
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:GetRepositoryPolicy",
"ecr:ListImages",
"ecr:BatchGetImage",
"ecr:GetAuthorizationToken"
],
"Resource": [
"arn:aws:ecr:us-west-1:111111111111:repository/ecr-name-1"
]
}]
}
使用基于身份的策略时,将策略附加到IAM用户或角色后,策略的Principal
将自动推断出来。在这种情况下,给定的用户/角色将成为Principal
。因此,您没有明确指定它。
相反,对于基于资源的策略,例如S3存储桶策略,您必须指定Principal
。这是因为这些策略绑定到资源,而不是任何IAM用户或角色。因此,您必须为它们显式地定义Principal
。
您似乎正在做的是IAM角色链接。
IAM策略不能有主体。只有资源策略(如S3存储桶策略(可以。IAM策略中的主体始终隐式地是进行API调用的标识,该调用将根据策略进行评估。
IAM角色具有定义必须满足哪些条件才能允许其他主体承担该角色的信任策略。你需要做两件事:
- 假定身份必须具有对要假定的角色执行AssuumeRole的权限(您可以在帐户A中IAM角色的策略中执行此操作(
- 要承担的角色必须允许承担的身份承担该角色(您在帐户B的信任策略中这样做(
有关更多信息,请参阅如何将信任策略与IAM角色一起使用。