Tutorial IAM: Gunakan AWS CloudFormation template untuk membuat peran IAM federasi SAMP - AWS Identity and Access Management

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Tutorial IAM: Gunakan AWS CloudFormation template untuk membuat peran IAM federasi SAMP

Jika Anda memiliki Penyedia Identitas SAMP (IDP) yang sudah dikonfigurasi di akun AWS Anda, Anda dapat membuat peran IAM federasi yang mempercayai IDP tersebut. Tutorial ini menunjukkan cara menggunakan AWS CloudFormation template untuk membuat peran IAM federasi SAMP yang dapat diasumsikan oleh pengguna yang diautentikasi melalui IDP eksternal Anda.

Template membuat peran IAM federasi dengan kebijakan kepercayaan yang memungkinkan IDP SAMP Anda untuk mengambil peran tersebut. Pengguna yang diautentikasi oleh iDP eksternal Anda dapat mengambil peran ini untuk AWS mengakses sumber daya berdasarkan izin yang dilampirkan pada peran tersebut.

Sumber daya yang digunakan terdiri dari yang berikut:

  • Peran IAM federasi yang mempercayai IDP SAMP Anda yang ada.

  • Kebijakan terkelola yang dapat dikonfigurasi yang dapat dilampirkan ke peran untuk memberikan izin tertentu.

  • Pengaturan batas izin opsional dan durasi sesi.

Prasyarat

Tutorial ini mengasumsikan bahwa Anda telah melakukan hal berikut:

  • IDP SAMP yang sudah ada dikonfigurasi di AWS akun Anda. Jika Anda tidak memilikinya, Anda dapat membuatnya menggunakan Tutorial IAM: Gunakan AWS CloudFormation template untuk membuat Penyedia Identitas SAMP (iDP) tutorial.

  • ARN dari SAMP iDP Anda, yang harus Anda tentukan sebagai parameter saat membuat tumpukan.

  • Python 3.6 atau yang lebih baru diinstal pada mesin lokal Anda untuk menjalankan perintah Python yang digunakan dalam tutorial ini untuk memformat file XHTML metadata SAMP IDP Anda.

Buat peran federasi SAMP menggunakan AWS CloudFormation

Untuk membuat peran federasi SAMP, Anda akan membuat CloudFormation template dan menggunakannya untuk membuat tumpukan yang berisi peran.

Buattemplat

Pertama, buat CloudFormation template.

  1. Di Templat bagian ini, klik ikon salin pada tab JSON atau YAMAL untuk menyalin konten templat.

  2. Tempelkan konten template ke file baru.

  3. Simpan file secara lokal.

Buat tumpukan

Selanjutnya, gunakan template yang telah Anda simpan untuk menyediakan CloudFormation tumpukan.

  1. Buka AWS CloudFormation konsol di https://console.aws.amazon.com/cloudformation.

  2. Pada halaman Stacks, dari menu Create stack, pilih dengan sumber daya baru (standar).

  3. Tentukan template:

    1. Di bawah Prasyarat, pilih Pilih templat yang ada.

    2. Di bawah Tentukan templat, pilih Unggah file templat.

    3. Pilih Pilih file, navigasikan ke file template, dan pilih.

    4. Pilih Berikutnya.

  4. Tentukan detail tumpukan berikut:

    1. Masukkan nama tumpukan.

    2. Untuk SAMLProviderARN, masukkan ARN dari IDP SAMP Anda yang ada. Ini harus dalam formatarn:aws:iam::123456789012:saml-provider/YourProviderName.

      Contoh: arn:aws:iam::123456789012:saml-provider/CompanyIdP

      catatan

      Jika Anda membuat SAMP IDP Anda menggunakan Tutorial IAM: Gunakan AWS CloudFormation template untuk membuat Penyedia Identitas SAMP (iDP) tutorial, Anda dapat menemukan penyedia ARN di tab Output dari tumpukan itu. CloudFormation

    3. Untuk RoleName, Anda dapat membiarkan ini kosong untuk menghasilkan nama secara otomatis berdasarkan nama tumpukan, atau memasukkan nama khusus untuk peran IAM.

      Contoh: SAML-Developer-Access atau SAML-ReadOnly-Role

    4. Untuk parameter lain, terima nilai default atau masukkan sendiri berdasarkan kebutuhan Anda:

      • RoleSessionDuration- Durasi sesi maksimum dalam hitungan detik (3600-43200, default 7200)

        Contoh: 14400 (4 jam)

      • RolePermissionsBoundary- ARN opsional dari kebijakan batas izin

        Contoh: arn:aws:iam::123456789012:policy/DeveloperBoundary

      • RolePath- Jalur untuk peran IAM (defaultnya adalah/)

        Contoh: /saml-roles/

      • ManagedPolicy1-5 - Opsional ARNs hingga 5 kebijakan terkelola untuk dilampirkan

        Contoh untuk ManagedPolicy 1: arn:aws:iam::aws:policy/ReadOnlyAccess

        Contoh untuk ManagedPolicy 2: arn:aws:iam::123456789012:policy/CustomPolicy

    5. Pilih Berikutnya.

  5. Konfigurasikan opsi tumpukan:

    1. Di bawah Opsi kegagalan tumpukan, pilih Hapus semua sumber daya yang baru dibuat.

      catatan

      Memilih opsi ini mencegah Anda dari kemungkinan ditagih untuk sumber daya yang kebijakan penghapusan menentukan mereka dipertahankan bahkan jika pembuatan tumpukan gagal.

    2. Terima semua nilai default lainnya.

    3. Di bawah Kemampuan, centang kotak untuk mengetahui bahwa CloudFormation mungkin membuat sumber daya IAM di akun Anda.

    4. Pilih Berikutnya.

  6. Tinjau detail tumpukan dan pilih Kirim.

AWS CloudFormation menciptakan tumpukan. Setelah pembuatan tumpukan selesai, sumber daya tumpukan siap digunakan. Anda dapat menggunakan tab Sumber Daya di halaman detail tumpukan untuk melihat sumber daya yang disediakan di akun Anda.

Tumpukan akan menampilkan nilai berikut, yang dapat Anda lihat di tab Output:

  • roLearn: ARN dari peran IAM yang dibuat (misalnya, arn:aws:iam::123456789012:role/SAML-Developer-Access atau arn:aws:iam::123456789012:role/stack-name-a1b2c3d4 jika menggunakan nama yang dibuat secara otomatis).

Anda akan memerlukan ARN peran ini saat mengonfigurasi IDP Anda untuk mengirim atribut SAMP yang sesuai untuk asumsi peran.

Uji peran federasi SAMP

Setelah peran federasi SAMP dibuat, Anda dapat memverifikasi konfigurasinya dan menguji pengaturan federasi.

  1. Buka konsol IAM di https://console.aws.amazon.com/iam/.

  2. Di panel navigasi, pilih Peran.

  3. Temukan dan pilih peran federasi Anda yang baru dibuat.

    Jika Anda memberikan nama peran khusus, cari nama itu. Jika Anda membiarkan RoleName parameter kosong, peran akan memiliki nama yang dibuat secara otomatis berdasarkan nama tumpukan dan pengidentifikasi unik.

  4. Pilih tab Hubungan kepercayaan untuk meninjau kebijakan kepercayaan.

    Kebijakan kepercayaan harus menunjukkan bahwa IDP SAMP Anda dipercaya untuk mengambil peran ini dengan syarat bahwa audiens SAML:aud SAMP () cocok. https://signin.aws.amazon.com/saml

  5. Pilih tab Izin untuk meninjau kebijakan terlampir.

    Anda dapat melihat kebijakan terkelola apa pun yang dilampirkan pada peran selama pembuatan.

  6. Perhatikan ARN Peran yang ditampilkan di halaman ringkasan peran.

    Anda akan memerlukan ARN ini untuk mengonfigurasi iDP eksternal Anda agar pengguna dapat mengambil peran ini.

Peran federasi SAMP Anda sekarang siap digunakan. Konfigurasikan IDP eksternal Anda untuk menyertakan ARN peran ini dalam pernyataan SAMP, dan pengguna yang diautentikasi akan dapat mengambil peran ini untuk mengakses sumber daya. AWS

Bersihkan: hapus sumber daya

Sebagai langkah terakhir, Anda akan menghapus tumpukan dan sumber daya yang dikandungnya.

  1. Buka AWS CloudFormation konsol.

  2. Pada halaman Stacks, pilih tumpukan yang dibuat dari templat, lalu pilih Hapus, lalu konfirmasikan Hapus.

    CloudFormation memulai penghapusan tumpukan dan semua sumber daya yang disertakan.

CloudFormation rincian template

Sumber daya

AWS CloudFormation Template untuk tutorial ini akan membuat sumber daya berikut di akun Anda:

  • AWS::IAM::Role: Peran IAM federasi yang dapat diasumsikan oleh pengguna yang diautentikasi melalui SAMP iDP Anda.

Konfigurasi

Template mencakup parameter yang dapat dikonfigurasi berikut:

  • RoleName- Nama Peran IAM (biarkan kosong untuk nama yang dihasilkan secara otomatis)

  • SAMLProviderARN - ARN dari SAMP iDP (wajib)

  • RoleSessionDuration- Durasi sesi maksimum dalam hitungan detik (3600-43200, default 7200)

  • RolePermissionsBoundary- ARN opsional kebijakan batas izin

  • RolePath- Jalur untuk peran IAM (default/)

  • ManagedPolicy1-5 - Opsional ARNs hingga 5 kebijakan terkelola untuk dilampirkan

CloudFormation Template

Simpan kode JSON atau YAMAL berikut sebagai file terpisah untuk digunakan sebagai CloudFormation template untuk tutorial ini.

JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "[AWSDocs] IAM: tutorial_saml-federated-role", "Parameters": { "RoleName": { "Type": "String", "Description": "Name of the IAM Role (leave empty for auto-generated name like '{StackName}-{UniqueId}')", "Default": "", "AllowedPattern": "^$|^[\\w+=,.@-]{1,64}$", "ConstraintDescription": "Must be empty or 1-64 characters and can contain alphanumeric characters and +=,.@-" }, "SAMLProviderARN": { "Type": "String", "Description": "ARN of the SAML Identity Provider", "AllowedPattern": "^arn:aws:iam::\\d{12}:saml-provider/[a-zA-Z0-9._-]+$", "ConstraintDescription": "Must be a valid SAML provider ARN" }, "RoleSessionDuration": { "Type": "Number", "Description": "The maximum session duration (in seconds) that you want to set for the specified role (3600-43200)", "MinValue": 3600, "MaxValue": 43200, "Default": 7200 }, "RolePermissionsBoundary": { "Type": "String", "Description": "Optional ARN of the permissions boundary policy (leave empty for none)", "Default": "" }, "RolePath": { "Type": "String", "Description": "Path for the IAM role (must start and end with /)", "Default": "/", "AllowedPattern": "^\/.*\/$|^\/$", "ConstraintDescription": "Role path must start and end with forward slash (/)" }, "RoleManagedPolicy1": { "Type": "String", "Description": "Optional managed policy ARN 1", "Default": "" }, "RoleManagedPolicy2": { "Type": "String", "Description": "Optional managed policy ARN 2", "Default": "" }, "RoleManagedPolicy3": { "Type": "String", "Description": "Optional managed policy ARN 3", "Default": "" }, "RoleManagedPolicy4": { "Type": "String", "Description": "Optional managed policy ARN 4", "Default": "" }, "RoleManagedPolicy5": { "Type": "String", "Description": "Optional managed policy ARN 5", "Default": "" } }, "Conditions": { "HasCustomRoleName": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleName"}, ""]}]}, "HasPermissionsBoundary": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RolePermissionsBoundary"}, ""]}]}, "HasPolicy1": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy1"}, ""]}]}, "HasPolicy2": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy2"}, ""]}]}, "HasPolicy3": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy3"}, ""]}]}, "HasPolicy4": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy4"}, ""]}]}, "HasPolicy5": {"Fn::Not": [{"Fn::Equals": [{"Ref": "RoleManagedPolicy5"}, ""]}]} }, "Resources": { "SAMLFederatedRole": { "Type": "AWS::IAM::Role", "Properties": { "RoleName": {"Fn::If": ["HasCustomRoleName", {"Ref": "RoleName"}, {"Ref": "AWS::NoValue"}]}, "Description": "IAM role with SAML provider trust", "MaxSessionDuration": {"Ref": "RoleSessionDuration"}, "PermissionsBoundary": {"Fn::If": ["HasPermissionsBoundary", {"Ref": "RolePermissionsBoundary"}, {"Ref": "AWS::NoValue"}]}, "Path": {"Ref": "RolePath"}, "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": {"Ref": "SAMLProviderARN"} }, "Action": "sts:AssumeRoleWithSAML", "Condition": { "StringEquals": { "SAML:aud": "https://signin.aws.amazon.com/saml" } } } ] }, "ManagedPolicyArns": { "Fn::Split": [ ",", { "Fn::Join": [ ",", [ {"Fn::If": ["HasPolicy1", {"Ref": "RoleManagedPolicy1"}, {"Ref": "AWS::NoValue"}]}, {"Fn::If": ["HasPolicy2", {"Ref": "RoleManagedPolicy2"}, {"Ref": "AWS::NoValue"}]}, {"Fn::If": ["HasPolicy3", {"Ref": "RoleManagedPolicy3"}, {"Ref": "AWS::NoValue"}]}, {"Fn::If": ["HasPolicy4", {"Ref": "RoleManagedPolicy4"}, {"Ref": "AWS::NoValue"}]}, {"Fn::If": ["HasPolicy5", {"Ref": "RoleManagedPolicy5"}, {"Ref": "AWS::NoValue"}]} ] ] } ] } } } }, "Outputs": { "RoleARN": { "Description": "ARN of the created IAM Role", "Value": {"Fn::GetAtt": ["SAMLFederatedRole", "Arn"]}, "Export": { "Name": {"Fn::Sub": "${AWS::StackName}-RoleARN"} } } } }
YAML
AWSTemplateFormatVersion: '2010-09-09' Description: '[AWSDocs] IAM: tutorial_saml-federated-role' Parameters: RoleName: Type: String Description: 'Name of the IAM Role (leave empty for auto-generated name like ''{StackName}-{UniqueId}'')' Default: "" AllowedPattern: '^$|^[\w+=,.@-]{1,64}$' ConstraintDescription: 'Must be empty or 1-64 characters and can contain alphanumeric characters and +=,.@-' SAMLProviderARN: Type: String Description: 'ARN of the SAML Identity Provider' AllowedPattern: '^arn:aws:iam::\d{12}:saml-provider/[a-zA-Z0-9._-]+$' ConstraintDescription: 'Must be a valid SAML provider ARN' RoleSessionDuration: Type: Number Description: 'The maximum session duration (in seconds) that you want to set for the specified role (3600-43200)' MinValue: 3600 MaxValue: 43200 Default: 7200 RolePermissionsBoundary: Type: String Description: Optional ARN of the permissions boundary policy (leave empty for none) Default: "" RolePath: Type: String Description: 'Path for the IAM role (must start and end with /)' Default: "/" AllowedPattern: '^\/.*\/$|^\/$' ConstraintDescription: 'Role path must start and end with forward slash (/)' RoleManagedPolicy1: Type: String Description: Optional managed policy ARN 1 Default: "" RoleManagedPolicy2: Type: String Description: Optional managed policy ARN 2 Default: "" RoleManagedPolicy3: Type: String Description: Optional managed policy ARN 3 Default: "" RoleManagedPolicy4: Type: String Description: Optional managed policy ARN 4 Default: "" RoleManagedPolicy5: Type: String Description: Optional managed policy ARN 5 Default: "" Conditions: HasCustomRoleName: !Not [!Equals [!Ref RoleName, ""]] HasPermissionsBoundary: !Not [!Equals [!Ref RolePermissionsBoundary, ""]] HasPolicy1: !Not [!Equals [!Ref RoleManagedPolicy1, ""]] HasPolicy2: !Not [!Equals [!Ref RoleManagedPolicy2, ""]] HasPolicy3: !Not [!Equals [!Ref RoleManagedPolicy3, ""]] HasPolicy4: !Not [!Equals [!Ref RoleManagedPolicy4, ""]] HasPolicy5: !Not [!Equals [!Ref RoleManagedPolicy5, ""]] Resources: SAMLFederatedRole: Type: 'AWS::IAM::Role' Properties: RoleName: !If - HasCustomRoleName - !Ref RoleName - !Ref AWS::NoValue Description: 'IAM role with SAML provider trust' MaxSessionDuration: !Ref RoleSessionDuration PermissionsBoundary: !If - HasPermissionsBoundary - !Ref RolePermissionsBoundary - !Ref AWS::NoValue Path: !Ref RolePath AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Federated: !Ref SAMLProviderARN Action: 'sts:AssumeRoleWithSAML' Condition: StringEquals: 'SAML:aud': 'https://signin.aws.amazon.com/saml' ManagedPolicyArns: !Split - ',' - !Join - ',' - - !If [HasPolicy1, !Ref RoleManagedPolicy1, !Ref 'AWS::NoValue'] - !If [HasPolicy2, !Ref RoleManagedPolicy2, !Ref 'AWS::NoValue'] - !If [HasPolicy3, !Ref RoleManagedPolicy3, !Ref 'AWS::NoValue'] - !If [HasPolicy4, !Ref RoleManagedPolicy4, !Ref 'AWS::NoValue'] - !If [HasPolicy5, !Ref RoleManagedPolicy5, !Ref 'AWS::NoValue'] Outputs: RoleARN: Description: 'ARN of the created IAM Role' Value: !GetAtt SAMLFederatedRole.Arn Export: Name: !Sub '${AWS::StackName}-RoleARN'