Buat pipeline di CodePipeline yang menggunakan sumber daya dari yang lainAWSakun - AWS CodePipeline

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

Buat pipeline di CodePipeline yang menggunakan sumber daya dari yang lainAWSakun

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

catatan

Ketika Anda membuat saluran pipa dengan tindakan dari beberapa akun, Anda harus mengkonfigurasi tindakan Anda sehingga mereka masih dapat mengakses artefak dalam batasan jaringan pipa lintas akun. Pembatasan berikut berlaku untuk tindakan lintas akun:

  • Secara umum, tindakan hanya bisa mengkonsumsi artefak jika:

    • Tindakan tersebut berada di akun yang sama dengan akun alur ATAU

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

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

    Dengan kata lain, Anda tidak dapat melewati artefak dari satu akun ke akun lainnya jika akun tidak merupakan akun pipa.

  • Tindakan lintas akun tidak didukung untuk jenis tindakan berikut:

    • Jenkins membangun tindakan

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

catatan

Alias diakui hanya di akun yang menciptakan kunci KMS. Untuk tindakan lintas akun, Anda hanya dapat menggunakan ID kunci atau ARN kunci untuk mengidentifikasi kunci.

Dalam panduan ini dan contoh-contohnya,AccountAadalah akun yang awalnya digunakan untuk membuat pipa. Ini memiliki akses ke bucket Amazon S3 yang digunakan untuk menyimpan artefak pipa dan peran layanan yang digunakan olehAWS CodePipeline. AccountBadalah akun yang awalnya digunakan untuk membuat aplikasi CodeDeploy, grup penyebaran, dan peran layanan yang digunakan oleh CodeDeploy.

UntukAccountAuntuk mengedit pipa untuk menggunakan aplikasi CodeDeploy yang dibuat olehAccountB,AccountAharus:

  • Meminta ARN atau ID akunAccountB(Dalam panduan ini,AccountBID adalah012ID_ACCOUNT_B).

  • Membuat atau menggunakanAWS KMSkunci yang dikelola pelanggan di Wilayah untuk pipa, dan memberikan izin untuk menggunakan kunci tersebut untuk peran layanan (CodePipeline_service_role) danAccountB.

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

  • Membuat kebijakan yang memungkinkanAccountAuntuk mengsumsikan peran yang dikonfigurasiAccountB, dan lampirkan kebijakan tersebut ke peran layanan (CodePipeline_service_role).

  • Mengedit pipa untuk menggunakan pelanggan dikelolaAWS KMSkunci alih-alih kunci default.

UntukAccountBuntuk memungkinkan akses ke sumber dayanya ke pipa yang dibuat diAccountA,AccountBharus:

  • Meminta ARN atau ID akunAccountA(Dalam panduan ini,AccountAID adalah012ID_ACCOUNT_A).

  • Membuat kebijakan yang diterapkan padaPeran instans Amazon EC2dikonfigurasi untuk CodeDeploy yang memungkinkan akses ke bucket Amazon S3 (codepipeline-us-east-2-1234567890).

  • Membuat kebijakan yang diterapkan padaPeran instans Amazon EC2dikonfigurasi untuk CodeDeploy yang memungkinkan akses keAWS KMSkunci yang dikelola pelanggan yang digunakan untuk mengenkripsi artefak pipa diAccountA.

  • Konfigurasikan dan lampirkan peran IAM (Crossaccount_role) dengan kebijakan hubungan kepercayaan yang memungkinkanAccountAuntuk mengasumsikan peran.

  • Buat kebijakan yang memungkinkan akses ke sumber daya penyebaran yang diperlukan oleh pipa dan lampirkan keCrossaccount_role.

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

Prasyarat: MembuatAWS KMSkunci enkripsi

Kunci terkelola pelanggan khusus untuk Wilayah, seperti semuaAWS KMSkunci. Anda harus membuat terkelola pelangganAWS KMSkunci di Wilayah yang sama tempat alur dibuat (misalnya,us-east-2).

Untuk membuat kunci terkelola pelangganAWS KMS

  1. Masuk keAWS Management ConsolebersamaAccountAdan bukaAWS KMSkonsol.

  2. Di sebelah kiri, pilihKunci yang dikelola pelanggan.

  3. Pilih Buat kunci. MasukMengonfigurasi, tinggalkanSimetrisdefault dipilih dan pilihSelanjutnya.

  4. MasukAlias, masukkan alias yang akan digunakan untuk kunci ini (misalnya,Pipelinename-kunci). Secara opsional, berikan deskripsi dan tag untuk kunci ini, lalu pilihSelanjutnya.

  5. MasukTentukan Izin Administratif Kunci, pilih pengguna IAM Anda dan pengguna atau grup lain yang ingin Anda lakukan sebagai administrator untuk kunci ini, lalu pilihSelanjutnya.

  6. MasukTentukan Izin Penggunaan Kunci, di bawahAkun Ini, pilih nama peran layanan untuk pipeline (misalnya, CodePipeLine_Service_Role). Di bawahLainnyaAWSrekening, pilihTambahkan yang lainAWSakun. Masukkan ID akun untukAccountBuntuk menyelesaikan ARN, dan kemudian memilihSelanjutnya.

  7. MasukMeninjau dan mengedit kebijakan kunci, tinjau kebijakan, lalu pilihSelesai.

  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 membutuhkan ini ketika Anda mengedit pipa Anda dan mengkonfigurasi kebijakan.

Langkah 1: Menyiapkan kebijakan dan peran akun

Setelah Anda membuatAWS KMSkunci, Anda harus membuat dan melampirkan kebijakan yang akan memungkinkan akses lintas akun. Hal ini membutuhkan tindakan dari keduaAccountAdanAccountB.

Konfigurasikan kebijakan dan peran dalam akun yang akan membuat pipa (AccountA)

Untuk membuat pipa yang menggunakan sumber daya CodeDeploy yang terkait dengan yang lainAWSakun,AccountAharus mengonfigurasi kebijakan untuk bucket Amazon S3 yang digunakan untuk menyimpan artefak dan peran layanan untuk CodePipeline.

Untuk membuat kebijakan untuk bucket Amazon S3 yang memberikan akses ke AccountB (konsol)

  1. Masuk keAWS Management ConsolebersamaAccountAdan buka konsol Amazon S3 dihttps://console.aws.amazon.com/s3/.

  2. Dalam daftar bucket Amazon S3, pilih bucket Amazon S3 tempat artefak untuk jaringan pipa Anda disimpan. Ember ini diberi namacodepipeline-region-1234567EXAMPLE, tempatdaerahadalahAWSWilayah di mana Anda membuat pipa dan1234567CONTOHadalah nomor acak sepuluh digit yang memastikan nama bucket unik (misalnya,codepipeline-us-east-2-1234567890).

  3. Pada halaman detail bucket Amazon S3, pilihProperti.

  4. Di panel properti, memperluasIzin, dan kemudian pilihTambahkan kebijakan.

    catatan

    Jika kebijakan sudah dilampirkan ke bucket Amazon S3 Anda, pilihMengedit kebijakan. Anda kemudian dapat menambahkan pernyataan dalam contoh berikut ke kebijakan yang ada. Untuk menambahkan kebijakan baru, pilih tautan, lalu ikuti instruksi diAWSGenerator Kebijakan. Untuk informasi selengkapnya, lihatGambaran umum dari Kebijakan IAM.

  5. DiEditor Kebijakanjendela, ketik kebijakan berikut. Ini akan memungkinkanAccountBakses ke artefak pipa, dan akan memberikanAccountBkemampuan untuk menambahkan artefak keluaran jika tindakan, seperti sumber kustom atau membangun tindakan, menciptakan mereka.

    Dalam contoh berikut, ARN adalah untukAccountBadalah012ID_ACCOUNT_B. ARN untuk bucket Amazon S3codepipeline-us-east-2-1234567890. Ganti ARN ini dengan ARN untuk akun yang ingin Anda izinkan akses dan ARN untuk bucket Amazon S3:

    { "Version": "2012-10-17", "Id": "SSEAndSSLPolicy", "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } }, { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*", "Condition": { "Bool": { "aws:SecureTransport": false } } }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root" }, "Action": [ "s3:Get*", "s3:Put*" ], "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890" } ] }
  6. PilihSimpan, dan kemudian tutup editor kebijakan.

  7. PilihSimpanuntuk menyimpan izin untuk bucket Amazon S3.

Untuk membuat kebijakan untuk peran layanan untuk CodePipeline (konsol)

  1. Masuk keAWS Management ConsolebersamaAccountAdan buka konsol IAMhttps://console.aws.amazon.com/iam/.

  2. Di panel navigasi, pilih Peran.

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

  4. Pada tab Izin, pilih Tambahkan kebijakan inline.

  5. PilihJSONtab, dan masukkan kebijakan berikut untuk memungkinkanAccountBuntuk mengasumsikan peran. Pada contoh berikut,012ID_ACCOUNT_Badalah ARNAccountB:

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

  7. MasukNama, masukkan nama untuk kebijakan ini. Pilih Buat kebijakan.

Mengonfigurasikan kebijakan dan peran di akun yang memilikiAWSsumber daya (AccountB)

Saat Anda membuat grup aplikasi, penyebaran, dan penyebaran di CodeDeploy, Anda juga membuatPeran instans Amazon EC2. (Peran ini dibuat untuk Anda jika Anda menggunakan wizard Jalankan Deployment Walkthrough, tetapi Anda juga dapat membuatnya secara manual.) Untuk pipa yang dibuat diAccountAuntuk menggunakan sumber daya CodeDeploy yang dibuatAccountB, Anda harus:

  • Konfigurasikan kebijakan untuk peran instans yang memungkinkannya mengakses bucket Amazon S3 tempat artefak pipa disimpan.

  • Buat peran kedua diAccountBdikonfigurasi untuk akses lintas akun.

    Peran kedua ini tidak hanya memiliki akses ke bucket Amazon S3AccountA, itu juga harus berisi kebijakan yang memungkinkan akses ke sumber daya CodeDeploy dan kebijakan hubungan kepercayaan yang memungkinkanAccountAuntuk mengasumsikan peran.

    catatan

    Kebijakan ini khusus untuk menyiapkan sumber daya CodeDeploy untuk digunakan dalam pipa yang dibuat menggunakan yang berbedaAWSakun. LainnyaAWSsumber daya akan memerlukan kebijakan khusus untuk kebutuhan sumber daya mereka.

Untuk membuat kebijakan untuk peran instans Amazon EC2 yang dikonfigurasi untuk CodeDeploy (console)

  1. Masuk keAWS Management ConsolebersamaAccountBdan buka konsol IAM dihttps://console.aws.amazon.com/iam/.

  2. Di panel navigasi, pilih Peran.

  3. Dalam daftar peran, di bawahNama Peran, pilih nama peran layanan yang digunakan sebagai peran instans Amazon EC2 untuk aplikasi CodeDeploy. Nama peran ini dapat bervariasi, dan lebih dari satu peran instans dapat digunakan oleh grup penyebaran. Untuk informasi selengkapnya, lihatMembuat Profil Instans IAM Anda.

  4. Pada tab Izin, pilih Tambahkan kebijakan inline.

  5. PilihJSONtab, dan masukkan kebijakan berikut untuk memberikan akses ke bucket Amazon S3 yang digunakan olehAccountAuntuk menyimpan artefak untuk jaringan pipa (dalam contoh ini,codepipeline-us-east-2-1234567890):

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890" ] } ] }
  6. Pilih Tinjau kebijakan.

  7. MasukNama, masukkan nama untuk kebijakan ini. Pilih Buat kebijakan.

  8. Buat kebijakan kedua untukAWS KMSdi manaarn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLEadalah ARN dari kunci yang dikelola pelanggan yang dibuat diAccountAdan dikonfigurasi untuk memungkinkanAccountBuntuk menggunakannya:

    { "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:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE" ] } ] }
    penting

    Anda harus menggunakan ID akunAccountAdalam kebijakan ini sebagai bagian dari sumber daya ARN untukAWS KMSkunci, seperti yang ditunjukkan di sini, atau kebijakan tidak akan bekerja.

  9. Pilih Tinjau kebijakan.

  10. MasukNama, masukkan nama untuk kebijakan ini. Pilih Buat kebijakan.

Sekarang buat peran IAM untuk digunakan untuk akses lintas-akun, dan konfigurasikan sehinggaAccountAdapat mengasumsikan peran. Peran ini harus berisi kebijakan yang memungkinkan akses ke sumber daya CodeDeploy dan bucket Amazon S3 yang digunakan untuk menyimpan artefak diAccountA.

Untuk mengkonfigurasi peran lintas-akun di IAM

  1. Masuk keAWS Management ConsolebersamaAccountBdan buka konsol IAM dihttps://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 bawahTentukan akun yang dapat menggunakan peran ini, diID Akun, masukkanAWSID akun untuk akun yang akan membuat pipa di CodePipeline (AccountA), dan kemudian pilihSelanjutnya: Izin.

    catatan

    Langkah ini menciptakan kebijakan hubungan kepercayaan antaraAccountBdanAccountA.

  4. Di bawahMelampirkan kebijakan izin, pilihAmazonS3ReadOnlyAccess, dan kemudian pilihSelanjutnya: Tanda.

    catatan

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

  5. Pilih Berikutnya: Peninjauan. Ketikkan nama untuk peran iniNama peran(misalnya,Crossaccount_role). Anda dapat menyebutkan peran ini apa pun yang Anda inginkan selama mengikuti konvensi penamaan di IAM. Pertimbangkan untuk memberikan peran nama yang dengan jelas menyatakan tujuannya. Pilih Buat Peran.

  6. Dari daftar peran, pilih peran yang baru Anda buat (misalnya,Crossaccount_role) untuk membukaRingkasanhalaman untuk peran itu.

  7. Pada tab Izin, pilih Tambahkan kebijakan inline.

  8. PilihJSONtab, dan masukkan kebijakan berikut untuk mengizinkan akses ke sumber daya CodeDeploy:

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

  10. MasukNama, masukkan nama untuk kebijakan ini. Pilih Buat kebijakan.

  11. Pada tab Izin, pilih Tambahkan kebijakan inline.

  12. PilihJSONtab, dan masukkan kebijakan berikut untuk memungkinkan peran ini mengambil artefak masukan dari, dan memasukkan artefak keluaran ke dalam, bucket Amazon S3 diAccountA:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:PutObject", "s3:PutObjectAcl", "codecommit:ListBranches", "codecommit:ListRepositories" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890/*" ] } ] }
  13. Pilih Tinjau kebijakan.

  14. MasukNama, masukkan nama untuk kebijakan ini. Pilih Buat kebijakan.

  15. PadaIzintab, temukanAmazonS3ReadOnlyAccessdalam daftar kebijakan di bawahNama Kebijakan, dan pilih ikon hapus (X) di samping kebijakan. Saat diminta, pilihLepaskan.

Langkah 2: Mengedit pipa

Anda tidak dapat menggunakan konsol CodePipeline untuk membuat atau mengedit pipeline yang menggunakan sumber daya yang terkait dengan yang lainAWSakun. Namun, Anda dapat menggunakan konsol untuk membuat struktur umum pipa, dan kemudian menggunakanAWS CLIuntuk mengedit pipa 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 lainAWSakun (AWS CLI)

  1. Pada terminal (Linux, macOS, atau Unix) atau command prompt (Windows), jalankanget-pipelineperintah pada alur yang ingin Anda tambahkan sumber daya. Salin output perintah ke file JSON. Misalnya, untuk pipeline bernama MyFirstPipeline, Anda akan mengetik sesuatu yang serupa dengan yang berikut ini:

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

    Outputnya dikirim kepipeline.jsonberkas.

  2. Buka file JSON di editor teks biasa. Setelah"type": "S3"di toko artefak, tambahkan KMS encryptionKey, ID, dan ketik informasi di manacodepipeline-us-east-2-1234567890adalah nama bucket Amazon S3 yang digunakan untuk menyimpan artefak untuk alur danarn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLEadalah ARN 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 deploy dalam tahap untuk menggunakan sumber daya CodeDeploy yang terkait denganAccountB, termasukroleArnnilai untuk peran lintas-akun yang Anda buat (Crossaccount_role).

    Contoh berikut menunjukkan JSON yang menambahkan tindakan deploy bernamaExternalDeploy. Menggunakan sumber daya CodeDeploy dibuat diAccountBdalam tahapan bernamaPementasan. Pada contoh berikut, ARN untukAccountBadalah012ID_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 pipa, hanya struktur untuk tindakan dalam tahap.

  4. Anda harus menghapusmetadatabaris dari file sehinggaupdate-pipelineperintah dapat menggunakannya. Lepaskan bagian dari struktur pipa di file JSON (yang"metadata": { }garis dan"created","pipelineARN", dan"updated"kolom).

    Misalnya, hapus baris berikut dari struktur:

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

    Simpan file.

  5. Untuk menerapkan perubahan Anda, jalankanupdate-pipelineperintah, menentukan file JSON, yang serupa dengan yang berikut ini:

    penting

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

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

    Perintah ini mengembalikan seluruh struktur pipa diedit.

Untuk menguji pipa yang menggunakan sumber daya yang terkait dengan yang lainAWSakun

  1. Pada terminal (Linux, macOS, atau Unix) atau command prompt (Windows), jalankanstart-pipeline-executionperintah, menentukan nama alur, yang serupa dengan yang berikut ini:

    aws codepipeline start-pipeline-execution --name MyFirstPipeline

    Untuk informasi selengkapnya, lihat Memulai pipa secara manual.

  2. Masuk keAWS Management ConsolebersamaAccountAdan buka konsol CodePipeline dihttp://console.aws.amazon.com/codesuite/codepipeline/home.

    Nama-nama semua jaringan pipa yang terkait dengan AndaAWSakun ditampilkan.

  3. MasukNama, pilih nama alur yang baru Anda edit. Ini membuka tampilan rinci tentang pipa, termasuk keadaan setiap tindakan di setiap tahap pipa.

  4. Perhatikan kemajuan melalui pipa. Tunggu pesan sukses tentang tindakan yang menggunakan sumber daya yang terkait dengan yang lainAWSakun.

    catatan

    Anda akan menerima kesalahan jika Anda mencoba untuk melihat rincian untuk tindakan saat login denganAccountA. Keluar, dan kemudian masuk denganAccountBuntuk melihat detail penyebaran di CodeDeploy.