Tutorial IAM: Gunakan AWS CloudFormation template untuk membuat Penyedia Identitas SAMP (iDP) - 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 Penyedia Identitas SAMP (iDP)

Untuk mengatur federasi SAMP untuk AWS akun Anda, Anda perlu membuat Penyedia Identitas SAMP (IDP). Tutorial ini menunjukkan cara menggunakan AWS CloudFormation template untuk membuat IDP SAMP yang membangun kepercayaan AWS antara dan IDP eksternal Anda.

Template membuat IDP SAMP yang dikonfigurasi dengan dokumen metadata iDP Anda. Peran IAM federasi kemudian dapat mereferensikan IDP ini untuk memungkinkan pengguna yang diautentikasi dari iDP eksternal Anda mengakses sumber daya. AWS

Sumber daya yang digunakan terdiri dari IDP SAMP yang dikonfigurasi dengan dokumen metadata iDP Anda dan pengaturan enkripsi opsional.

Prasyarat

Tutorial ini mengasumsikan bahwa Anda telah melakukan hal berikut:

  • 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.

  • Sebuah dokumen metadata SAMP dari IDP eksternal Anda disimpan sebagai file XHTML.

Buat SAMP iDP menggunakan AWS CloudFormation

Untuk membuat SAMP iDP, Anda akan membuat template dan menggunakannya untuk CloudFormation membuat tumpukan yang berisi sumber daya iDP.

Buattemplat

Pertama, buat CloudFormation template.

  1. Di Templat bagian tersebut, 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 IdentityProviderName, Anda dapat membiarkan ini kosong untuk menghasilkan nama secara otomatis berdasarkan nama tumpukan, atau memasukkan nama khusus untuk IDP SAMP Anda. Nama kustom harus hanya berisi karakter alfanumerik, titik, garis bawah, dan tanda hubung.

    3. Untuk IdentityProviderSAMLMetadataDokumen, Anda perlu memformat file XMLSAM metadata Anda sebagai satu baris sebelum menempelkannya ke bidang ini. Ini diperlukan karena CloudFormation konsol memerlukan konten XMLuntuk diformat sebagai satu baris ketika melewati parameter konsol.

      Gunakan perintah Python berikut untuk memformat ulang file XMLmu:

      python3 -c "import sys, re; content=open(sys.argv[1]).read(); print(re.sub(r'>\s+<', '><', content.replace('\n', '').replace('\r', '').strip()))" saml-metadata.xml
      catatan

      Dokumen metadata SAMP iDP harus diformat sebagai satu baris untuk input parameter konsol. Perintah Python menghapus jeda baris dan spasi tambahan untuk membuat format yang diperlukan sambil mempertahankan semua konten dan struktur asli.

      Salin output dari perintah Python dan tempelkan ke bidang IdentityProviderSAMLMetadataDokumen.

      Contoh dokumen metadata SAMP yang diformat (disingkat):

      <?xml version="1.0" encoding="UTF-8"?><md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://portal.sso.example.com/saml/assertion/CompanyIdP"><md:IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"><md:KeyDescriptor use="signing"><ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:X509Data><ds:X509Certificate>MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiIMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV...</ds:X509Certificate></ds:X509Data></ds:KeyInfo></md:KeyDescriptor><md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://portal.sso.example.com/saml/logout/CompanyIdP"/><md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat><md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://portal.sso.example.com/saml/assertion/CompanyIdP"/></md:IDPSSODescriptor></md:EntityDescriptor>
    4. Untuk parameter lain, terima nilai default atau masukkan sendiri berdasarkan kebutuhan Anda:

      • IdentityProviderAddPrivateKey- Kunci pribadi opsional untuk mendekripsi pernyataan SAMP

      • IdentityProviderAssertionEncryptionMode- Opsional, mengatur mode enkripsi untuk pernyataan SAMP (Diizinkan, Diperlukan, atau kosong)

    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-nilai berikut, yang dapat Anda lihat di tab Output:

  • ProviderArn: ARN dari SAMP iDP yang dibuat (misalnya,). arn:aws:iam::123456789012:saml-provider/CompanyIdP Anda memerlukan ARN ini saat membuat peran yang mempercayai penyedia ini.

  • ProviderName: Nama SAMP iDP yang dibuat (misalnyaCompanyIdP, jika Anda menentukan nama kustom, my-saml-stack-saml-provider atau jika Anda menggunakan penamaan default).

Output ini juga diekspor, memungkinkan mereka untuk diimpor oleh AWS CloudFormation tumpukan lain menggunakan fungsi. Fn::ImportValue

Verifikasi IDP SAMP

Setelah IDP SAMP dibuat, Anda dapat memverifikasi konfigurasinya dan mencatat ARN untuk digunakan dengan peran federasi.

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

  2. Pada panel navigasi, silakan pilih Penyedia identitas.

    Anda akan melihat SAMP IDP yang baru dibuat dalam daftar.

  3. Pilih nama iDP untuk melihat detailnya.

    Pada halaman detail iDP, Anda dapat melihat dokumen metadata SAMP dan detail konfigurasi lainnya.

  4. Perhatikan Penyedia ARN ditampilkan di halaman detail.

    Anda akan membutuhkan ARN ini saat membuat peran IAM federasi yang mempercayai IDP ini.

  5. Tinjau dokumen metadata untuk memastikannya sesuai dengan apa yang Anda berikan dari iDP eksternal Anda.

IDP SAMP Anda sekarang siap digunakan oleh peran IAM federasi. Anda dapat membuat peran yang mempercayai IDP ini untuk memungkinkan pengguna yang diautentikasi dari iDP eksternal Anda untuk mengambil peran tersebut dan 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::SAMLProvider: IDP SAMP yang membangun kepercayaan AWS antara dan IDP eksternal Anda.

Konfigurasi

Template mencakup parameter yang dapat dikonfigurasi berikut:

  • IdentityProviderName- Nama untuk SAMP iDP Anda (biarkan kosong untuk nama yang dibuat secara otomatis)

    Contoh: CompanyIdP atau EnterpriseSSO

  • IdentityProviderSAMLMetadataDokumen - Dokumen metadata SAMP dari IDP eksternal Anda (diformat sebagai satu baris)

  • IdentityProviderAddPrivateKey- Kunci pribadi opsional untuk mendekripsi pernyataan SAMP

  • IdentityProviderAssertionEncryptionMode- Opsional, mengatur mode enkripsi untuk pernyataan SAMP

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-idp", "Parameters": { "IdentityProviderName": { "Type": "String", "Description": "Name of the SAML Identity Provider (leave empty for auto-generated name like '{StackName}-{UniqueId}')", "Default": "", "AllowedPattern": "^$|^[a-zA-Z0-9._-]+$", "ConstraintDescription": "Must be empty or contain only alphanumeric characters, periods, underscores, and hyphens" }, "IdentityProviderSAMLMetadataDocument": { "Type": "String", "Description": "SAML metadata document from identity provider" }, "IdentityProviderAddPrivateKey": { "Type": "String", "Description": "Optional private key for decrypting SAML assertions. The private key must be a .pem file that uses AES-GCM or AES-CBC encryption algorithm to decrypt SAML assertions.", "Default": "" }, "IdentityProviderAssertionEncryptionMode": { "Type": "String", "Description": "Optional, sets encryption mode for SAML assertions", "Default": "", "AllowedValues": ["", "Allowed", "Required"] } }, "Conditions": { "HasPrivateKey": {"Fn::Not": [{"Fn::Equals": [{"Ref": "IdentityProviderAddPrivateKey"}, ""]}]}, "HasEncryptionMode": {"Fn::Not": [{"Fn::Equals": [{"Ref": "IdentityProviderAssertionEncryptionMode"}, ""]}]}, "HasCustomName": {"Fn::Not": [{"Fn::Equals": [{"Ref": "IdentityProviderName"}, ""]}]} }, "Resources": { "SAMLProvider": { "Type": "AWS::IAM::SAMLProvider", "Properties": { "Name": {"Fn::If": ["HasCustomName", {"Ref": "IdentityProviderName"}, {"Ref": "AWS::NoValue"}]}, "SamlMetadataDocument": {"Ref": "IdentityProviderSAMLMetadataDocument"}, "Tags": [ { "Key": "Name", "Value": {"Fn::If": ["HasCustomName", {"Ref": "IdentityProviderName"}, {"Fn::Sub": "${AWS::StackName}-saml-provider"}]} } ], "AddPrivateKey": {"Fn::If": ["HasPrivateKey", {"Ref": "IdentityProviderAddPrivateKey"}, {"Ref": "AWS::NoValue"}]}, "AssertionEncryptionMode": {"Fn::If": ["HasEncryptionMode", {"Ref": "IdentityProviderAssertionEncryptionMode"}, {"Ref": "AWS::NoValue"}]} } } }, "Outputs": { "ProviderARN": { "Description": "ARN of the created SAML Identity Provider", "Value": {"Ref": "SAMLProvider"}, "Export": { "Name": {"Fn::Sub": "${AWS::StackName}-ProviderARN"} } }, "ProviderName": { "Description": "Name of the SAML Identity Provider", "Value": {"Fn::If": ["HasCustomName", {"Ref": "IdentityProviderName"}, {"Fn::Sub": "${AWS::StackName}-saml-provider"}]}, "Export": { "Name": {"Fn::Sub": "${AWS::StackName}-ProviderName"} } } } }
YAML
AWSTemplateFormatVersion: '2010-09-09' Description: '[AWSDocs] IAM: tutorial_saml-idp' Parameters: IdentityProviderName: Type: String Description: Name of the SAML Identity Provider (leave empty for auto-generated name like '{StackName}-{UniqueId}') Default: "" AllowedPattern: '^$|^[a-zA-Z0-9._-]+$' ConstraintDescription: 'Must be empty or contain only alphanumeric characters, periods, underscores, and hyphens' IdentityProviderSAMLMetadataDocument: Type: String Description: SAML metadata document from identity provider IdentityProviderAddPrivateKey: Type: String Description: Optional private key for decrypting SAML assertions. The private key must be a .pem file that uses AES-GCM or AES-CBC encryption algorithm to decrypt SAML assertions. Default: "" IdentityProviderAssertionEncryptionMode: Type: String Description: Optional, sets encryption mode for SAML assertions Default: "" AllowedValues: - "" - "Allowed" - "Required" Conditions: HasPrivateKey: !Not [!Equals [!Ref IdentityProviderAddPrivateKey, ""]] HasEncryptionMode: !Not [!Equals [!Ref IdentityProviderAssertionEncryptionMode, ""]] HasCustomName: !Not [!Equals [!Ref IdentityProviderName, ""]] Resources: SAMLProvider: Type: 'AWS::IAM::SAMLProvider' Properties: Name: !If - HasCustomName - !Ref IdentityProviderName - !Ref AWS::NoValue SamlMetadataDocument: !Ref IdentityProviderSAMLMetadataDocument Tags: - Key: Name Value: !If - HasCustomName - !Ref IdentityProviderName - !Sub '${AWS::StackName}-saml-provider' AddPrivateKey: !If - HasPrivateKey - !Ref IdentityProviderAddPrivateKey - !Ref AWS::NoValue AssertionEncryptionMode: !If - HasEncryptionMode - !Ref IdentityProviderAssertionEncryptionMode - !Ref AWS::NoValue Outputs: ProviderARN: Description: 'ARN of the created SAML Identity Provider' Value: !Ref SAMLProvider Export: Name: !Sub '${AWS::StackName}-ProviderARN' ProviderName: Description: 'Name of the SAML Identity Provider' Value: !If - HasCustomName - !Ref IdentityProviderName - !Sub '${AWS::StackName}-saml-provider' Export: Name: !Sub '${AWS::StackName}-ProviderName'