[server] Cloudformation 기존 정책을 참조하는 새로운 역할을 만들 수 있습니까?

현재 다른 인스턴스의 특정 키 경로 (예 : 폴더)에 대한 특정 액세스 권한이있는 공유 S3 버킷이 있습니다. 새 역할로 인스턴스 프로파일을 생성하고 해당 폴더에 대한 액세스 제한 문제를 테스트 할 수 없었습니다.

내 문제는 정의 된 정책이있는 기존의 일반 역할이 있으며 각 스택에 대한 새 역할에 포함시킬 수 있다는 것입니다.

클라우드 형성에서 새로운 역할에 정책 문서를 재정의하지 않고도 한 역할에 정의 된 정책을 다른 역할에 포함시킬 수 있습니까?

다음과 같은 것 :

"AppTierS3AccessRole": {
        "Type": "AWS::IAM::Role",
        "Properties": {
            "AssumeRolePolicyDocument": {
                "Statement": [
                    {
                        "Effect": "Allow",
                        "Principal": {
                            "Service": [ "ec2.amazonaws.com" ]
                        },
                        "Action": [ "sts:AssumeRole" ]
                    }
                ]
            },
            "Path": "/",
            "Policies": [ { "Ref": "existing-policy" } ]
        }
    },

“기존 정책”은 여기서 중요한 부분입니다. 나는 시도하고 참조하기 위해 기존 정책의 비결을 찾으려고했지만 조금 붙어 있습니다.



답변

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


답변

관리 형 정책 을 사용하여이를 달성 할 수 있습니다 . 공유하려는 정의 된 정책을 고객 관리 형 정책에 넣은 다음 해당 정의 된 정책을 사용하려는 각 역할에 연결하십시오. 관리 형 정책에 대한 향후 변경 사항은 관리 형 정책이 연결된 모든 역할에 즉시 적용됩니다.

AWS :: IAM :: ManagedPolicy 리소스를 통해 CloudFormation에서 고객 관리 형 정책을 생성 하거나 기존 관리 형 정책을 첨부 할 수 있습니다.


답변

@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": [
        ...
      ]
    }
  }
}


답변

아니요, 현재 한 역할을 다른 역할에 포함시킬 수 없습니다. 내가 생각할 수있는 유일한 대안은 다음과 같습니다.

  • AWS :: IAM :: InstanceProfile을 사용하여 새 인스턴스 프로파일을 생성 하고 기존 일반 역할을 할당하십시오.
  • CloudFormation 스택을 생성하기 전에 일반 역할을 복제하는 스크립트를 실행하십시오. 예를 들어 새 역할을 생성하고 기존 일반 역할에 대한 모든 정책을 나열한 다음 새 역할에서 다시 생성합니다. 그런 다음 템플릿 의 새 AWS :: IAM :: InstanceProfile 리소스에 새 역할을 할당하고 EC2 인스턴스 또는 시작 구성에 사용할 수 있습니다.

답변