Используя AWS, я создаю облачное образование , определяющее стек:
- Управляемая политика с именем
MyPolicy
- Роль с именем
MyRole
это должно прикрепить эту политику
Стек будет создан администратором;и после создания цель состоит в том, чтобы позволить (извне стека) некоторым пользователям принять MyRole
.
Мой вопрос: Как определить роль для присоединения этой политики?
На странице справки AWS свойств роли предлагается использовать ManagedPolicyArns
, но я получаю различные ошибки в зависимости от того, как я ссылаюсь на MyPolicy
:
Если я использую функцию GetAtt
для получения политики arn
, я получаю сообщение об ошибке при проверке шаблона:
"ManagedPolicyArns": [ { "Fn::GetAtt" : [ "MyPolicy", "Arn" ] } ]
Ошибка шаблона: ресурс MyPolicy не поддерживает тип атрибутаАрн в Fn :: GetAtt
И если я использую функцию Join
для построения политики arn
, я получаю ошибку при создании роли.
"ManagedPolicyArns": [ { "Fn::Join" : [ "", [ "arn:aws:iam::", { "Ref": "AWS::AccountId" }, ":policy/", { "Ref": "MyPolicy" } ] ] } ]
ARN arn: aws: iam :: aws: policy / arn: aws: iam :: «my-account-id»: policy / MyPolicy недействителен.(Сервис: AmazonIdentityManagement; Код состояния: 400; Код ошибки: InvalidInput; Идентификатор запроса: «an-id»)
Ниже приведено определение стека с использованием формата JSON
:
{
"AWSTemplateFormatVersion" : "2010-09-09",
"Resources" : {
"MyPolicy" : {
"Type": "AWS::IAM::ManagedPolicy",
"Properties": {
"ManagedPolicyName" : "MyPolicy",
"PolicyDocument" : {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [ "s3:*" ],
"Resource": "arn:aws:s3:::the-bucket"
}
]
}
}
},
"MyRole" : {
"Type": "AWS::IAM::Role",
"RoleName": "MyRole",
"AssumeRolePolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "AWS": {"Fn::Join" : [ "", [ "arn:aws:iam::", { "Ref": "AWS::AccountId" }, ":root" ] ] } },,
"Action": [ "sts:AssumeRole" ]
}
]
},
"ManagedPolicyArns": [
{ "Fn::GetAtt" : [ "MyPolicy", "Arn" ] }
]
}
}
}