View a markdown version of this page

Buat pipeline CodePipeline yang menggunakan sumber daya dari yang lain AWS akun - AWS CodePipeline

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

Buat pipeline CodePipeline yang menggunakan sumber daya dari yang lain AWS akun

Anda mungkin ingin membuat pipeline yang menggunakan sumber daya yang dibuat atau dikelola oleh AWS akun lain. Misalnya, Anda mungkin ingin menggunakan satu akun untuk pipeline Anda dan yang lain untuk CodeDeploy sumber daya Anda.

catatan

Saat Anda membuat pipeline dengan tindakan dari beberapa akun, Anda harus mengonfigurasi tindakan agar tindakan tersebut masih dapat mengakses artefak dalam batasan pipeline lintas akun. Batasan berikut berlaku untuk tindakan lintas akun:

  • Secara umum, suatu tindakan hanya dapat mengkonsumsi artefak jika:

    • Tindakan berada di akun yang sama dengan akun pipeline ATAU

    • Artefak dibuat di akun pipeline untuk tindakan di akun lain ATAU

    • Artefak dihasilkan oleh tindakan sebelumnya di akun yang sama dengan tindakan

    Dengan kata lain, Anda tidak dapat meneruskan artefak dari satu akun ke akun lain jika tidak ada akun yang merupakan akun pipeline.

  • Cross-account tindakan tidak didukung untuk jenis tindakan berikut:

    • Jenkins membangun tindakan

Untuk contoh ini, Anda harus membuat kunci AWS Key Management Service (AWS KMS) untuk digunakan, menambahkan kunci ke pipeline, dan mengatur kebijakan dan peran akun untuk mengaktifkan akses lintas akun. Untuk kunci AWS KMS, Anda dapat menggunakan ID kunci, kunci ARN, atau alias ARN.

catatan

Alias hanya dikenali di akun yang membuat kunci KMS. Untuk tindakan lintas akun, Anda hanya dapat menggunakan ID kunci atau kunci ARN untuk mengidentifikasi kunci. Cross-account tindakan melibatkan penggunaan peran dari akun lain (accountB), jadi menentukan ID kunci akan menggunakan kunci dari akun lain (accountB).

Dalam panduan ini dan contohnya, AccountA adalah akun yang awalnya digunakan untuk membuat pipeline. Ini memiliki akses ke bucket Amazon S3 yang digunakan untuk menyimpan artefak pipeline dan peran layanan yang digunakan oleh AWS CodePipeline. AccountBadalah akun yang awalnya digunakan untuk membuat CodeDeploy aplikasi, grup penerapan, dan peran layanan yang digunakan oleh CodeDeploy.

AccountAUntuk mengedit pipeline untuk menggunakan CodeDeploy aplikasi yang dibuat olehAccountB, AccountA harus:

  • Minta ARN atau ID akun AccountB (dalam panduan ini, AccountB ID-nya adalah012ID_ACCOUNT_B).

  • Buat atau gunakan kunci yang dikelola AWS KMS pelanggan di Wilayah untuk pipeline, dan berikan izin untuk menggunakan kunci tersebut ke peran layanan (CodePipeline_Service_Role) danAccountB.

  • Buat kebijakan bucket Amazon S3 yang memberikan AccountB akses ke bucket Amazon S3 (misalnya,codepipeline-us-east-2-1234567890).

  • Buat kebijakan yang memungkinkan AccountA untuk mengambil peran yang dikonfigurasi olehAccountB, dan melampirkan kebijakan tersebut ke peran layanan (CodePipeline_Service_Role).

  • Edit pipeline untuk menggunakan AWS KMS kunci yang dikelola pelanggan alih-alih kunci default.

AccountBUntuk mengizinkan akses ke sumber dayanya ke pipeline yang dibuat diAccountA, AccountB harus:

  • Minta ARN atau ID akun AccountA (dalam panduan ini, AccountA ID-nya adalah012ID_ACCOUNT_A).

  • Buat kebijakan yang diterapkan ke peran instans Amazon EC2 CodeDeploy yang dikonfigurasi untuk memungkinkan akses ke bucket Amazon S3 (codepipeline-us-east-2-1234567890).

  • Buat kebijakan yang diterapkan ke peran instans Amazon EC2 yang dikonfigurasi untuk memungkinkan akses ke kunci CodeDeploy yang dikelola AWS KMS pelanggan yang digunakan untuk mengenkripsi artefak pipeline diAccountA.

  • Konfigurasikan dan lampirkan peran IAM (CrossAccount_Role) dengan kebijakan hubungan kepercayaan yang memungkinkan peran CodePipeline layanan AccountA untuk mengambil peran tersebut.

  • Buat kebijakan yang memungkinkan akses ke sumber daya penerapan yang diperlukan oleh pipeline dan lampirkan keCrossAccount_Role.

  • Buat kebijakan yang memungkinkan akses ke bucket Amazon S3 (codepipeline-us-east-2-1234567890) dan lampirkan keCrossAccount_Role.

Prasyarat: Buat AWS KMS kunci enkripsi

Customer-managed kunci khusus untuk Wilayah, seperti semua AWS KMS kunci. Anda harus membuat AWS KMS kunci yang dikelola pelanggan di Wilayah yang sama tempat pipeline dibuat (misalnya,us-east-2).

Untuk membuat kunci yang dikelola pelanggan di AWS KMS
  1. Masuk ke Konsol Manajemen AWS dengan AccountA dan buka AWS KMS konsol.

  2. Di sebelah kiri, pilih kunci yang dikelola pelanggan.

  3. Pilih Buat kunci. Di tombol Konfigurasi, biarkan default Sim etris dipilih dan pilih Ber ikutnya.

  4. Di Alias, masukkan alias untuk digunakan untuk kunci ini (misalnya,PipelineName-Key). Secara opsional, berikan deskripsi dan tag untuk kunci ini, lalu pilih Ber ikutnya.

  5. Di Tentukan Izin Administratif Utama, pilih peran atau peran yang ingin Anda lakukan sebagai administrator untuk kunci ini, lalu pilih Ber ikutnya.

  6. Di Tentukan Izin Penggunaan Kunci , di bawah Akun Ini, pilih nama peran layanan untuk pipeline (misalnya, CodePipeline _Service_Role). Di bawah AWS Akun lain, pilih Tambahkan AWS akun lain. Masukkan ID akun AccountB untuk melengkapi ARN, lalu pilih Ber ikutnya.

  7. Di Tinjau dan edit kebijakan utama, tinjau kebijakan, lalu pilih Sel esai.

  8. Dari daftar kunci, pilih alias kunci Anda dan salin ARN-nya (misalnya,arn:aws:kms:us-east-2:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE). Anda akan memerlukan ini saat mengedit pipeline dan mengonfigurasi kebijakan.

Langkah 1: Siapkan kebijakan dan peran akun

Setelah membuat AWS KMS kunci, Anda harus membuat dan melampirkan kebijakan yang akan mengaktifkan akses lintas akun. Ini membutuhkan tindakan dari keduanya AccountA danAccountB.

Konfigurasikan kebijakan dan peran dalam akun yang akan membuat pipeline (AkunA)

Untuk membuat pipeline yang menggunakan CodeDeploy sumber daya yang terkait dengan AWS akun lain, AccountA harus mengonfigurasi kebijakan untuk bucket Amazon S3 yang digunakan untuk menyimpan artefak dan peran layanan untuk CodePipeline.

Cara membuat kebijakan untuk bucket Amazon S3 yang memberikan akses ke AccountB (konsol)
  1. Masuk ke Konsol Manajemen AWS dengan AccountA dan buka konsol Amazon S3 di https://console.aws.amazon.com/s3/.

  2. Dalam daftar bucket Amazon S3, pilih bucket Amazon S3 tempat artefak untuk pipeline Anda disimpan. Bucket ini diberi namacodepipeline-region-1234567EXAMPLE, di mana region adalah Wil AWS ayah tempat Anda membuat pipeline dan 1234567EXAMPLE merupakan angka acak sepuluh digit yang memastikan nama bucket unik (misalnya,codepipeline-us-east-2-1234567890).

  3. Pada halaman detail untuk bucket Amazon S3, pilih Proper ties.

  4. Di panel properti, perluas Izin, lalu pilih Tam bah kebijakan bucket.

    catatan

    Jika kebijakan sudah dilampirkan ke bucket Amazon S3 Anda, pilih Edit kebijakan bucket. Anda kemudian dapat menambahkan pernyataan dalam contoh berikut ke kebijakan yang ada. Untuk menambahkan kebijakan baru, pilih tautan, dan ikuti petunjuk di Pem AWS buat Kebijakan. Untuk informasi selengkapnya, lihat I khtisar Kebijakan IAM.

  5. Di jendela Editor Kebijakan Bucket, buat kebijakan yang akan memungkinkan AccountB akses ke artefak pipeline, dan akan memberikan AccountB kemampuan untuk menambahkan artefak keluaran jika tindakan, seperti sumber kustom atau tindakan build, membuatnya.

  6. Pilih Simpan, lalu tutup editor kebijakan.

  7. Pilih S impan untuk menyimpan izin untuk bucket Amazon S3.

Untuk membuat kebijakan untuk peran layanan untuk CodePipeline (konsol)
  1. Masuk ke Konsol Manajemen AWS dengan AccountA dan buka konsol IAM di https://console.aws.amazon.com/iam/.

  2. Di panel navigasi, pilih Peran.

  3. Dalam daftar peran, di bawah Nama Peran, pilih nama peran layanan untuk CodePipeline.

  4. Pada tab Izin, pilih Tambahkan kebijakan inline.

  5. Pilih tab JSON, dan masukkan kebijakan berikut untuk memungkinkan AccountB untuk mengambil peran. Dalam contoh berikut, 012ID_ACCOUNT_B adalah ARN untukAccountB:

    JSON
    { "Version":"2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::111122223333:role/*" ] } }
  6. Pilih Tinjau kebijakan.

  7. Di Nama, masukkan nama untuk kebijakan ini. Pilih Buat kebijakan.

Konfigurasikan kebijakan dan peran dalam akun yang memiliki AWS sumber daya (AkunTB)

Saat membuat grup aplikasi, penerapan, dan penerapan di CodeDeploy, Anda juga membuat peran instans Amazon EC2. (Peran ini dibuat untuk Anda jika Anda menggunakan panduan Run Deployment Walkthrough, tetapi Anda juga dapat membuatnya secara manual.) Agar pipeline yang dibuat AccountA menggunakan CodeDeploy sumber daya yang dibuat diAccountB, Anda harus:

  • Konfigurasikan kebijakan untuk peran instance yang memungkinkannya mengakses bucket Amazon S3 tempat artefak pipeline disimpan.

  • Buat peran kedua dalam AccountB konfigurasi untuk akses lintas akun.

    Peran kedua ini tidak hanya harus memiliki akses ke bucket Amazon S3AccountA, tetapi juga harus berisi kebijakan yang memungkinkan akses ke CodeDeploy sumber daya dan kebijakan hubungan kepercayaan yang memungkinkan peran CodePipeline layanan AccountA untuk mengambil peran tersebut.

    catatan

    Kebijakan ini khusus untuk menyiapkan CodeDeploy sumber daya yang akan digunakan dalam pipeline yang dibuat menggunakan AWS akun yang berbeda. Sumber AWS daya lain akan memerlukan kebijakan khusus untuk kebutuhan sumber daya mereka.

Untuk membuat kebijakan untuk peran instans Amazon EC2 yang dikonfigurasi untuk CodeDeploy (konsol)
  1. Masuk ke Konsol Manajemen AWS dengan AccountB dan buka konsol IAM di https://console.aws.amazon.com/iam/.

  2. Di panel navigasi, pilih Peran.

  3. Dalam daftar peran, di bawah Nama Per an, pilih nama peran layanan yang digunakan sebagai peran instans Amazon EC2 untuk CodeDeploy aplikasi. Nama peran ini dapat bervariasi, dan lebih dari satu peran instance dapat digunakan oleh grup penerapan. Untuk informasi selengkapnya, lihat Membuat Profil Instans IAM untuk Instans Amazon EC2 Anda.

  4. Pada tab Izin, pilih Tambahkan kebijakan inline.

  5. Pilih tab JSON, dan masukkan kebijakan berikut untuk memberikan akses ke bucket Amazon S3 yang digunakan AccountA untuk menyimpan artefak untuk pipeline (dalam contoh ini,codepipeline-us-east-2-1234567890):

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket" ] } ] }
  6. Pilih Tinjau kebijakan.

  7. Di Nama, masukkan nama untuk kebijakan ini. Pilih Buat kebijakan.

  8. Buat kebijakan kedua untuk AWS KMS di arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE mana ARN dari kunci yang dikelola pelanggan dibuat AccountA dan dikonfigurasi untuk mengiz AccountB inkan penggunaannya:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:111122223333:key/2222222-3333333-4444-556677EXAMPLE" ] } ] }
    penting

    Anda harus menggunakan ID akun AccountA dalam kebijakan ini sebagai bagian dari ARN sumber daya untuk AWS KMS kunci, seperti yang ditunjukkan di sini, atau kebijakan tidak akan berfungsi.

  9. Pilih Tinjau kebijakan.

  10. Di Nama, masukkan nama untuk kebijakan ini. Pilih Buat kebijakan.

Sekarang buat peran IAM untuk digunakan untuk akses lintas akun, dan konfigurasikan sehingga peran CodePipeline layanan AccountA dapat mengambil peran tersebut. Peran ini harus berisi kebijakan yang memungkinkan akses ke CodeDeploy sumber daya dan bucket Amazon S3 yang digunakan untuk menyimpan artefakAccountA.

Untuk mengkonfigurasi peran lintas akun di IAM
  1. Masuk ke Konsol Manajemen AWS dengan AccountB dan buka konsol IAM di https://console.aws.amazon.com/iam.

  2. Di panel navigasi, pilih Peran. Pilih Buat peran.

  3. Di Pilih tipe entitas terpercaya, pilih Akun AWS lain. Di bawah T entukan akun yang dapat menggunakan peran ini , di ID Akun, AWS masukkan ID akun untuk akun yang akan membuat pipeline di CodePipeline (AccountA), lalu pilih Ber ikutnya: Izin.

    penting

    Langkah ini menciptakan kebijakan hubungan kepercayaan antara AccountB danAccountA. Namun, ini memberikan akses tingkat root ke akun, dan CodePipeline merekomendasikan untuk mencakupnya ke peran CodePipeline layanan di AccountA dalamnya. Ikuti langkah 16 untuk membatasi izin.

  4. Di bawah Lamp irkan kebijakan izin AmazonS3ReadOnlyAccess, pilih, lalu pilih Ber ikutnya: Tag.

    catatan

    Ini bukan kebijakan yang akan Anda gunakan. Anda harus memilih kebijakan untuk menyelesaikan wizard.

  5. Pilih Berikutnya: Tinjauan. Ketik nama untuk peran ini di Nama Per an (misalnya,CrossAccount_Role). Anda dapat menamai peran ini apa pun yang Anda inginkan asalkan mengikuti konvensi penamaan di IAM. Pertimbangkan untuk memberi peran nama yang dengan jelas menyatakan tujuannya. Pilih Buat Peran.

  6. Dari daftar peran, pilih peran yang baru saja Anda buat (misalnya,CrossAccount_Role) untuk membuka halaman Ringkasan untuk peran tersebut.

  7. Pada tab Izin, pilih Tambahkan kebijakan inline.

  8. Pilih tab JSON, dan masukkan kebijakan berikut untuk mengizinkan akses ke CodeDeploy sumber daya:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetDeployment", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision" ], "Resource": "*" } ] }
  9. Pilih Tinjau kebijakan.

  10. Di Nama, masukkan nama untuk kebijakan ini. Pilih Buat kebijakan.

  11. Pada tab Izin, pilih Tambahkan kebijakan inline.

  12. Pilih tab JSON, dan masukkan kebijakan berikut untuk mengizinkan peran ini mengambil artefak masukan dari, dan memasukkan artefak keluaran ke dalam, bucket Amazon S3 diAccountA:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ] } ] }
  13. Pilih Tinjau kebijakan.

  14. Di Nama, masukkan nama untuk kebijakan ini. Pilih Buat kebijakan.

  15. Pada tab Izin, cari AmazonS3ReadOnlyAccess di daftar kebijakan di bawah Nama Kebijakan, dan pilih ikon hapus (X) di sebelah kebijakan. Saat diminta, pilih L epaskan.

  16. Pilih tab Relasi Kepercayaan, lalu pilih Edit kebijakan kepercayaan. Pilih opsi Tambahkan prinsip di kolom kiri. Untuk tipe Principal, pilih Peran IAM, lalu berikan ARN untuk peran CodePipeline layanan diAccountA. Hapus arn:aws:iam::Account_A:root dari daftar untuk AWS Kepala Sekolah, lalu pilih Per barui kebijakan.

Langkah 2: Edit pipa

Anda tidak dapat menggunakan CodePipeline konsol untuk membuat atau mengedit pipeline yang menggunakan sumber daya yang terkait dengan AWS akun lain. Namun, Anda dapat menggunakan konsol untuk membuat struktur umum pipeline, dan kemudian menggunakan AWS CLI untuk mengedit pipeline dan menambahkan sumber daya tersebut. Atau, Anda dapat menggunakan struktur pipa yang ada dan secara manual menambahkan sumber daya ke dalamnya.

Untuk menambahkan sumber daya yang terkait dengan yang lain AWS akun (AWS CLI)
  1. Di terminal (Linux, macOS, atau Unix) atau command prompt (Windows), jalankan get-pipeline perintah pada pipeline yang ingin Anda tambahkan sumber daya. Salin output perintah ke file JSON. Misalnya, untuk pipeline bernama MyFirstPipeline, Anda akan mengetikkan sesuatu yang mirip dengan berikut ini:

    aws codepipeline get-pipeline --name MyFirstPipeline >pipeline.json

    Output dikirim ke pipeline.json file.

  2. Buka file JSON di editor teks biasa apa pun. Setelah "type": "S3" berada di penyimpanan artefak, tambahkan informasi KMS EncryptionKey, ID, dan tipe di mana codepipeline-us-east-2-1234567890 nama bucket Amazon S3 yang digunakan untuk menyimpan artefak untuk pipeline dan arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE merupakan ARN dari kunci yang dikelola pelanggan yang baru saja Anda buat:

    { "artifactStore": { "location": "codepipeline-us-east-2-1234567890", "type": "S3", "encryptionKey": { "id": "arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE", "type": "KMS" } },
  3. Tambahkan tindakan penerapan dalam tahap untuk menggunakan CodeDeploy sumber daya yang terkaitAccountB, termasuk roleArn nilai untuk peran lintas akun yang Anda buat (CrossAccount_Role).

    Contoh berikut menunjukkan JSON yang menambahkan tindakan penerapan bernamaExternalDeploy. Ini menggunakan CodeDeploy sumber daya yang dibuat AccountB dalam tahap bernamaStaging. Dalam contoh berikut, ARN untuk AccountB adalah012ID_ACCOUNT_B:

    , { "name": "Staging", "actions": [ { "inputArtifacts": [ { "name": "MyAppBuild" } ], "name": "ExternalDeploy", "actionTypeId": { "category": "Deploy", "owner": "AWS", "version": "1", "provider": "CodeDeploy" }, "outputArtifacts": [], "configuration": { "ApplicationName": "AccountBApplicationName", "DeploymentGroupName": "AccountBApplicationGroupName" }, "runOrder": 1, "roleArn": "arn:aws:iam::012ID_ACCOUNT_B:role/CrossAccount_Role" } ] }
    catatan

    Ini bukan JSON untuk seluruh pipeline, hanya struktur untuk tindakan dalam suatu tahap.

  4. Anda harus menghapus metadata baris dari file sehingga update-pipeline perintah dapat menggunakannya. Hapus bagian dari struktur pipeline dalam file JSON ("metadata": { }baris dan"created","pipelineARN", dan "updated" bidang).

    Misalnya, hapus baris berikut dari struktur:

    "metadata": { "pipelineArn": "arn:aws:codepipeline:region:account-ID:pipeline-name", "created": "date", "updated": "date" }

    Simpan file tersebut.

  5. Untuk menerapkan perubahan Anda, jalankan update-pipeline perintah, tentukan file JSON pipeline, mirip dengan yang berikut:

    penting

    Pastikan untuk menyertakan file:// sebelum nama file. Diperlukan dalam perintah ini.

    aws codepipeline update-pipeline --cli-input-json file://pipeline.json

    Perintah ini mengembalikan seluruh struktur pipa yang diedit.

Untuk menguji pipeline yang menggunakan sumber daya yang terkait dengan yang lain AWS akun
  1. Di terminal (Linux, macOS, atau Unix) atau command prompt (Windows), jalankan start-pipeline-execution perintah, tentukan nama pipeline, mirip dengan yang berikut:

    aws codepipeline start-pipeline-execution --name MyFirstPipeline

    Untuk informasi selengkapnya, lihat Mulai pipa secara manual.

  2. Masuk ke Konsol Manajemen AWS dengan AccountA dan buka CodePipeline konsol di http://console.aws.amazon.com/codesuite/codepipeline/home.

    Nama-nama semua pipeline yang terkait dengan AWS akun Anda ditampilkan.

  3. Di Nama, pilih nama pipeline yang baru saja Anda edit. Ini membuka tampilan rinci dari pipa, termasuk keadaan setiap tindakan di setiap tahap pipa.

  4. Perhatikan kemajuan melalui pipa. Tunggu pesan sukses pada tindakan yang menggunakan sumber daya yang terkait dengan AWS akun lain.

    catatan

    Anda akan menerima kesalahan jika mencoba melihat detail tindakan saat masuk denganAccountA. Keluar, lalu masuk dengan AccountB untuk melihat detail penerapan CodeDeploy.