В данный момент у меня есть общий блок S3, который имеет определенный доступ к конкретным ключевым путям (т.е. папки) для различных экземпляров. Я смог создать профиль экземпляра со своей новой ролью и не протестировать ограничение задач доступом к той папке.
Моя проблема состоит в том, что существует существующая универсальная роль с определенными политиками, что я также хочу смочь включать в мою новую роль для каждого стека.
В cloudformation возможно включать политики, определенные в одну роль, которая будет включена в другую роль, не имея необходимость переопределять программный документ в новой роли?
Что-то как следующее:
"AppTierS3AccessRole": {
"Type": "AWS::IAM::Role",
"Properties": {
"AssumeRolePolicyDocument": {
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [ "ec2.amazonaws.com" ]
},
"Action": [ "sts:AssumeRole" ]
}
]
},
"Path": "/",
"Policies": [ { "Ref": "existing-policy" } ]
}
},
Причем "существующая политика" является важной частью здесь. Я попытался найти arn существующей политики попытаться сослаться на него, но я немного застреваю.
Нет, в настоящее время нельзя встраивать одну роль в другую. Единственные альтернативы, о которых я могу подумать:
Этого можно добиться, используя управляемые политики . Поместите определенную политику, которой вы хотите поделиться, в управляемую клиентом политику, затем прикрепите эту определенную политику к каждой роли, где вы хотите ее использовать. Любые будущие изменения в управляемой политике будут немедленно применены ко всем ролям, к которым прикреплена управляемая политика.
Вы можете создать управляемую клиентом политику в CloudFormation с помощью AWS :: IAM :: ManagedPolicy ] или прикрепите существующую управляемую политику.
Чтобы расширить ответ @ markusk на тему: Управляемые политики - да, это.
Пример:
"ManagedPolicy": {
"Type": "AWS::IAM::ManagedPolicy",
"Properties": {
"Description": "something descriptive",
"Groups": [ ... ref(s) for groups ... ],
"Roles: [{"Ref":"AppTierS3AccessRole"}],
"Users": [ ... ref(s) for users ... ],
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
...
]
}
}
}
src: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html
Типы AWS::IAM::Role
теперь имеют поле ManagedPolicyArns
, в котором вы можете установить это. Вам просто нужно взять ARN (легко захватываемый с консоли IAM) и поместить его в это поле. В примере ниже я создал роль, которая обеспечивает доступ к ECR только на чтение, чтобы мой образ мог вытаскивать контейнеры докера из ECR.
ecrRole:
Type: AWS::IAM::Role
Properties:
Path: "/"
ManagedPolicyArns:
- "arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly"
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- ec2.amazonaws.com
Action:
- sts:AssumeRole