Cloudformation dapatkah saya membuat peran baru referensi kebijakan yang ada?

10

Saat ini saya memiliki bucket S3 bersama yang memiliki akses spesifik ke jalur kunci tertentu (yaitu folder) untuk berbagai instance. Saya dapat membuat profil instan dengan peran baru saya dan menguji tidak ada masalah yang membatasi akses ke folder itu.

Masalah saya adalah bahwa ada peran generik yang ada dengan kebijakan yang ditetapkan, yang saya juga ingin dapat memasukkan peran baru saya untuk setiap tumpukan.

Dalam cloudformation, mungkinkah untuk memasukkan kebijakan yang ditetapkan dalam satu peran untuk dimasukkan dalam peran lain tanpa harus mendefinisikan ulang dokumen kebijakan dalam peran baru?

Sesuatu seperti yang berikut ini:

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

"Kebijakan yang ada" menjadi bagian penting di sini. Saya telah mencoba menemukan arn dari kebijakan yang ada untuk mencoba dan referensi tetapi saya agak macet.

hughmcmanus
sumber
Solusi yang sama mungkin dapat diselesaikan dengan menambahkan beberapa peran ke profil instan, tetapi dari apa yang saya baca ada batasan bahwa Anda hanya dapat menentukan satu peran per profil instan.
hughmcmanus

Jawaban:

12

src: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html

The AWS::IAM::Rolejenis kini memiliki ManagedPolicyArnsbidang di mana Anda dapat mengatur ini. Anda hanya perlu mengambil ARN (mudah untuk mengambil dari IAM console) dan letakkan di bidang itu. Dalam contoh di bawah ini saya membuat peran yang menyediakan akses ECR hanya-baca sehingga gambar saya dapat menarik wadah buruh pelabuhan dari 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
John Eikenberry
sumber
4

Anda dapat mencapai ini dengan menggunakan kebijakan terkelola . Masukkan kebijakan yang ditentukan yang ingin Anda bagikan dalam kebijakan yang dikelola pelanggan, lalu lampirkan kebijakan yang telah ditentukan itu untuk setiap peran tempat Anda ingin menggunakannya. Setiap perubahan di masa depan terhadap kebijakan terkelola Anda akan segera diterapkan ke semua peran yang memiliki kebijakan terkelola terlampir.

Anda dapat membuat kebijakan yang dikelola pelanggan di CloudFormation, melalui sumber AWS :: IAM :: ManagedPolicy , atau melampirkan kebijakan terkelola yang ada.

markusk
sumber
3
Bisakah Anda menunjukkan caranya di Cloudformation?
lony
1

Untuk memperluas jawaban @ markusk kembali: Kebijakan Terkelola - ya, itu.

Contoh:

"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": [
        ...
      ]
    }
  }
}
Peter Mounce
sumber
-1

Tidak, Anda tidak dapat menyematkan satu peran ke peran lain saat ini. Satu-satunya alternatif yang dapat saya pikirkan adalah:

  • Buat profil contoh baru dengan AWS :: IAM :: InstanceProfile dan tetapkan peran generik yang ada padanya.
  • Sebelum membuat tumpukan CloudFormation Anda, jalankan skrip yang menduplikasi peran generik. mis. Ia menciptakan peran baru, mendaftar semua kebijakan untuk peran generik yang ada dan menciptakannya kembali dalam peran baru. Kemudian, Anda dapat menetapkan peran baru ke sumber AWS :: IAM :: InstanceProfile baru dalam template Anda dan menggunakannya untuk instance EC2 Anda atau meluncurkan konfigurasi.
dialt0ne
sumber
Saya akhirnya melakukan sesuatu yang mirip dengan saran kedua Anda. Saya memindahkan kebijakan dalam peran umum ke template cloudformation, lalu menambahkannya ke peran baru jika perlu dibuat.
hughmcmanus
Walaupun jawaban ini benar ketika ditulis, itu lebih lama, karena AWS telah memperkenalkan kebijakan terkelola sejak saat itu, memungkinkan Anda untuk menggunakan kembali kebijakan.
markusk