Buat alur 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 alur di CodePipeline yang menggunakan sumber daya dari yang lainAWSakun

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

catatan

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

  • Secara umum, tindakan hanya dapat mengkonsumsi artefak jika:

    • Tindakan tersebut ada dalam akun yang sama dengan akun Pipeline

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

    • Artefak itu diproduksi oleh tindakan sebelumnya dalam akun yang sama dengan aksi

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

  • Tindakan lintas akun tidak didukung untuk jenis tindakan berikut:

    • Tindakan membangun Jenkins

Untuk contoh ini, Anda harus membuatAWS Key Management Service(AWS KMS) kunci untuk menggunakan, menambahkan kunci ke pipeline, 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. Tindakan lintas akun melibatkan penggunaan peran dari akun lain (AccountB), sehingga menentukan ID kunci akan menggunakan kunci dari akun lain (AccountB).

Dalam panduan ini dan contohnya,AccountAadalah 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 olehAWS CodePipeline. AccountBadalah akun yang awalnya digunakan untuk membuat CodeDeploy aplikasi, grup penyebaran, dan peran layanan yang digunakan oleh CodeDeploy.

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

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

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

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

  • Membuat kebijakan yang memungkinkanAccountAuntuk mengambil peran yang dikonfigurasi olehAccountB, dan lampirkan kebijakan tersebut ke peran layanan (CodePipeline_Service_Peran).

  • Edit pipeline untuk menggunakan pelanggan yang dikelolaAWS KMSkunci bukan kunci default.

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

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

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

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

  • Konfigurasikan dan lampirkan peran IAM (CrossAccount_Peran) dengan kebijakan hubungan kepercayaan yang memungkinkanAccountAuntuk mengambil peran.

  • Buat kebijakan yang memungkinkan akses ke sumber daya penyebaran yang diperlukan oleh pipeline dan lampirkanCrossAccount_Peran.

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

Prasyarat: BuatAWS KMSkunci enkripsi

Kunci yang dikelola pelanggan khusus untuk Wilayah, seperti halnyaAWS KMSkunci. Anda harus membuat pelanggan Anda dikelolaAWS KMSkunci di Wilayah yang sama di mana Pipeline dibuat (misalnya,us-east-2).

Untuk membuat kunci terkelola pelangganAWS KMS

  1. Masuk keAWS Management ConsolebersamaAccountAdan membukaAWS KMSkonsol.

  2. Di sebelah kiri, pilihKunci yang dikelola pelanggan.

  3. Pilih Buat kunci. MasukMengonfigurasi kuncitinggalkanSimetrisdefault dipilih dan pilihSelanjutnya.

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

  5. MasukTentukan Izin Administratif Utama, pilih pengguna IAM Anda dan pengguna lain yang ingin Anda bertindak 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, lalu pilihSelanjutnya.

  7. MasukMeninjau dan mengedit kebijakan kunci, tinjau kebijakan, kemudian 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 memerlukannya saat mengedit pipeline dan mengonfigurasi kebijakan.

Langkah 1: Menyiapkan kebijakan dan peran akun

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

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

Untuk membuat alur yang menggunakan CodeDeploy sumber daya yang terkait dengan yang lainAWSakun,AccountAharus mengonfigurasi kebijakan untuk bucket Amazon S3 yang digunakan untuk menyimpan artefak dan peran layanan 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. Bucket ini dinamaicodepipeline-region-1234567EXAMPLE, tempatdaerahadalahAWSWilayah di mana Anda membuat pipa dan1234567CONTOHadalah angka acak sepuluh digit yang memastikan nama bucket unik (misalnya,codepipeline-us-east-2-1234567890).

  3. Pada halaman detail untuk bucket Amazon S3, pilihProperti.

  4. Di panel properti, luaskanIzin, dan kemudian pilihTambahkan kebijakan bucket.

    catatan

    Jika kebijakan sudah dilampirkan ke bucket Amazon S3 Anda, pilihMengedit kebijakan bucket. 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 Kebijakan emberwindow, ketik kebijakan berikut. Ini akan memungkinkanAccountBakses ke artefak pipa, dan akan memberikanAccountBkemampuan untuk menambahkan artefak keluaran jika tindakan, seperti sumber kustom atau tindakan build, membuatnya.

    Pada contoh berikut, ARN adalah untukAccountBadalah012ID_ACCOUNT_B. ARN untuk bucket Amazon S3 adalahcodepipeline-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 IAM dihttps://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 mengizinkanAccountBuntuk mengambil peran. Pada contoh berikut,012ID_ACCOUNT_Badalah ARN untukAccountB:

    { "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.

Mengonfigurasi kebijakan dan peran di akun yang memilikiAWSSumber Daya (AccountB)

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

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

  • Buat peran kedua diAccountBdikonfigurasi untuk akses lintas akun.

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

    catatan

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

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

  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 CodeDeploy aplikasi. Nama peran ini dapat bervariasi, dan lebih dari satu peran instans dapat digunakan oleh grup penyebaran. Untuk informasi selengkapnya, lihatMembuat Profil Instans IAM untuk Instans Amazon EC2.

  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 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 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 pipeline di CodePipeline(AccountA), dan kemudian pilihSelanjutnya: Izin.

    catatan

    Langkah ini menciptakan kebijakan hubungan kepercayaan antaraAccountBdanAccountA.

  4. Di bawahLampirkan 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_Peran). Anda dapat menamai peran ini apa pun yang Anda inginkan selama 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 Anda buat (misalnya,CrossAccount_Peran) untuk membukaRingkasanhalaman untuk peran itu.

  7. Pada tab Izin, pilih Tambahkan kebijakan inline.

  8. PilihJSONtab, dan masukkan kebijakan berikut untuk mengizinkan akses CodeDeploy Sumber Daya:

    { "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 sebelah kebijakan. Saat diminta, pilihLepaskan.

Langkah 2: Mengedit ALUr

Anda tidak dapat menggunakan CodePipeline konsol 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 pipeline dan menambahkan sumber daya tersebut. Atau, Anda dapat menggunakan struktur pipa yang ada dan menambahkan sumber daya secara manual ke dalamnya.

Untuk menambahkan sumber daya yang terkait dengan yang lainAWSakun (AWS CLI)

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

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

    Output dikirim kepipeline.jsonberkas.

  2. Buka file JSON dalam 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 Pipeline danarn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLEadalah 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 deploy dalam tahap untuk menggunakan CodeDeploy sumber daya yang terkait denganAccountB, termasukroleArnnilai untuk peran lintas akun yang Anda buat (CrossAccount_Peran).

    Contoh berikut menunjukkan JSON yang menambahkan tindakan penyebaran bernamaExternalDeploy. Menggunakan CodeDeploy sumber daya yang 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 di panggung.

  4. Anda harus menghapusmetadatabaris dari file sehinggaupdate-pipelineperintah dapat menggunakannya. Hapus bagian dari struktur pipeline di file JSON ("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 tersebut.

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

    penting

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

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

    Perintah ini mengembalikan seluruh struktur pipa diedit.

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

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

    aws codepipeline start-pipeline-execution --name MyFirstPipeline

    Untuk informasi selengkapnya, lihat Memulai pipa secara manual.

  2. Masuk keAWS Management ConsolebersamaAccountAdan membuka CodePipelinekonsol 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 saja Anda edit. Ini membuka pandangan 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, lalu masuk denganAccountBuntuk melihat rincian penyebaran di CodeDeploy.