Cloudformation я могу создать новую роль, ссылающуюся на существующую политику?

В данный момент у меня есть общий блок 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 существующей политики попытаться сослаться на него, но я немного застреваю.

8
задан 3 July 2014 в 03:44
4 ответа

Нет, в настоящее время нельзя встраивать одну роль в другую. Единственные альтернативы, о которых я могу подумать:

  • Создайте новый профиль экземпляра с помощью AWS::IAM::InstanceProfile и присвойте ему существующую общую роль.
  • Перед созданием стека CloudFormation запустите скрипт, дублирующий общую роль. Например, он создает новую роль, перечисляет все политики для существующей общей роли и воссоздаёт их в новой роли. Затем, вы можете назначить новую роль новому ресурсу AWS::IAM::InstanceProfile в вашем шаблоне и использовать его для вашего EC2 экземпляра(ов) или запустить конфигурацию(ы).
-1
ответ дан 2 December 2019 в 22:50

Этого можно добиться, используя управляемые политики . Поместите определенную политику, которой вы хотите поделиться, в управляемую клиентом политику, затем прикрепите эту определенную политику к каждой роли, где вы хотите ее использовать. Любые будущие изменения в управляемой политике будут немедленно применены ко всем ролям, к которым прикреплена управляемая политика.

Вы можете создать управляемую клиентом политику в CloudFormation с помощью AWS :: IAM :: ManagedPolicy ] или прикрепите существующую управляемую политику.

4
ответ дан 2 December 2019 в 22:50

Чтобы расширить ответ @ 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": [
        ...
      ]
    }
  }
}
1
ответ дан 2 December 2019 в 22:50

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
11
ответ дан 2 December 2019 в 22:50

Теги

Похожие вопросы