View a markdown version of this page

Mengonfigurasi izin hak istimewa terkecil untuk sumber daya yang disediakan melalui CloudFormation - AWS Panduan Preskriptif

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

Mengonfigurasi izin hak istimewa terkecil untuk sumber daya yang disediakan melalui CloudFormation

AWS CloudFormation memungkinkan Anda untuk menyediakan berbagai jenis AWS sumber daya. Sumber daya yang disediakan memerlukan set izin mereka sendiri untuk berfungsi sebagaimana dimaksud dan untuk mengonfigurasi siapa yang memiliki akses ke sumber daya tersebut. Bab sebelumnya meninjau opsi untuk mengonfigurasi izin untuk mengakses dan menggunakan layanan. CloudFormation Bab ini mengulas bagaimana Anda dapat menerapkan prinsip hak istimewa terkecil pada sumber daya yang disediakan. CloudFormation

Dalam panduan ini, praktis tidak mungkin untuk meninjau rekomendasi keamanan dan praktik terbaik untuk setiap jenis AWS sumber daya yang dapat disediakan. CloudFormation Jika Anda memiliki pertanyaan terkait dengan layanan tertentu, kami sarankan Anda meninjau dokumentasi untuk layanan tersebut. Sebagian besar Layanan AWS dokumen berisi bagian keamanan dan informasi tentang izin yang diperlukan untuk menggunakan layanan tersebut. Untuk daftar lengkap Layanan AWS dokumentasi, lihat AWS Dokumentasi.

Berikut ini adalah langkah-langkah agnostik layanan tingkat tinggi yang dapat Anda ambil untuk membuat CloudFormation templat yang mematuhi prinsip hak istimewa paling rendah:

  1. Siapkan daftar sumber daya yang Anda rencanakan untuk disediakan dengan menggunakan CloudFormation.

  2. Lihat AWS Dokumentasi untuk layanan terkait dan tinjau bagian tentang keamanan dan manajemen akses. Ini membantu Anda memahami persyaratan dan rekomendasi khusus layanan.

  3. Gunakan informasi yang Anda kumpulkan di langkah sebelumnya untuk merancang CloudFormation templat dan kebijakan terkait yang hanya mengizinkan izin yang diperlukan dan menolak semua yang lain.

Selanjutnya, panduan ini mengulas contoh bagaimana Anda dapat menerapkan prinsip hak istimewa terkecil dalam CloudFormation templat, menggunakan kasus penggunaan dunia nyata.

Contoh: Bucket Amazon S3 untuk menyimpan artefak pipa

Contoh ini membuat bucket Amazon Simple Storage Service (Amazon S3) yang digunakan untuk AWS CodeBuildmenyimpan artefak proyek. AWS CodePipelinemenggunakan artefak yang disimpan ini. Anda dapat mengizinkan CodeBuild dan CodePipeline mengakses bucket S3 ini melalui peran layanan, dan Anda mengontrol akses tersebut dengan menggunakan kebijakan bucket Amazon S3. Berikut ini adalah nama sumber daya yang digunakan dalam contoh ini:

  • Deployfiles_buildadalah nama CodeBuild proyek.

  • Deployment-Pipelineadalah nama pipa di CodePipeline.

Tentukan bucket Amazon S3

Pertama, Anda menentukan bucket S3 dalam CloudFormation template, yang merupakan file teks berformat YAML.

amzn-s3-demo-bucket: Type: AWS::S3::Bucket Properties: PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true

Tentukan kebijakan bucket Amazon S3

Selanjutnya, di CloudFormation template, Anda membuat kebijakan bucket yang hanya mengizinkan Deployfiles_build proyek dan Deployment-Pipeline pipeline untuk mengakses bucket.

MyBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref amzn-s3-demo-bucket PolicyDocument: Version: "2012-10-17" Statement: - Sid: "S3ArtifactRepoAccess" Effect: Allow Action: - ‘s3:GetObject' - ‘s3:GetObjectVersion' - ‘s3:PutObject' - ‘s3:GetBucketVersioning' Resource: - !Sub ‘arn:aws:s3:::${amzn-s3-demo-bucket}' - !Sub ‘arn:aws:s3:::${amzn-s3-demo-bucket}/*' Principal: Service: - codebuild.amazonaws.com - codepipeline.amazonaws.com Condition: StringLike: ‘aws:SourceArn': - !Sub ‘arn:aws:codebuild:${AWS::Region}:${AWS::AccountId}:project/Deployfiles_build' - !Sub ‘arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:Deployment-Pipeline' - !Sub ‘arn:aws:codepipeline:${AWS::Region}:${AWS::AccountId}:Deployment-Pipeline/*'

Perhatikan hal berikut tentang kebijakan bucket ini:

  • ResourceElemen ini mencantumkan dua jenis sumber daya yang menggunakan format Amazon Resource Name (ARN) berikut:

    • Format ARN dari objek S3 adalah. arn:$<Partition>:s3:::$<BucketName>/$<ObjectName>

    • Format ARN dari bucket S3 adalah. arn:$<Partition>:s3:::$<BucketName>

    s3:GetObject,s3:GetObjectVersion, dan s3:PutObject memerlukan tipe sumber daya objek S3, dan s3:GetBucketVersioning memerlukan tipe sumber daya bucket S3. Untuk informasi selengkapnya tentang jenis sumber daya yang diperlukan untuk setiap tindakan, lihat Tindakan, sumber daya, dan kunci kondisi untuk Amazon S3.

  • PrincipalElemen mencantumkan entitas yang diizinkan untuk melakukan tindakan Amazon S3 yang ditentukan dalam pernyataan. Dalam hal ini, hanya CodeBuild dan CodePipeline diizinkan untuk melakukan tindakan ini.

  • ConditionElemen selanjutnya membatasi akses ke bucket S3 sehingga hanya Deployfiles_build CodeBuild proyek, Deployment-Pipeline CodePipeline pipeline, dan tindakan pipeline yang dapat mengakses bucket.

Buat peran layanan

Meskipun kebijakan bucket mengontrol akses ke bucket, kebijakan bucket tidak memberikan izin CodeBuild dan CodePipeline mengaksesnya. Untuk memberikan akses, Anda perlu membuat peran layanan untuk setiap layanan dan menambahkan pernyataan berikut ke masing-masing layanan. Layanan berperan CodeBuild dan CodePipeline memungkinkan layanan mengakses bucket S3 dan objeknya.

Sid: "ViewAccessToS3ArtifactRepo" Effect: Allow Action: - ‘s3:GetObject' - ‘s3:GetObjectVersion' - ‘s3:PutObject' - ‘s3:GetBucketVersioning' Resource: - !Sub ‘arn:aws:s3:::${BuildArtifactsBucket}' - !Sub ‘arn:aws:s3:::${BuildArtifactsBucket}/*'