Contoh kebijakan berbasis identitas Amazon API Gateway - Amazon API Gateway

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

Contoh kebijakan berbasis identitas Amazon API Gateway

Secara default, pengguna dan peran IAM tidak memiliki izin untuk membuat atau memodifikasi sumber daya API Gateway. Mereka juga tidak dapat melakukan tugas menggunakan AWS Management Console, AWS CLI, atau AWS SDKs. Administrator IAM harus membuat kebijakan IAM yang memberikan izin kepada pengguna dan peran untuk melakukan operasi API tertentu pada sumber daya yang diperlukan. Administrator kemudian harus melampirkan kebijakan tersebut ke pengguna IAM atau grup yang memerlukan izin tersebut.

Untuk informasi tentang cara membuat kebijakan IAM, lihat Membuat Kebijakan pada Tab JSON di Panduan Pengguna IAM. Untuk informasi tentang tindakan, sumber daya, dan kondisi khusus untuk API Gateway, lihat Kunci tindakan, sumber daya, dan kondisi untuk Manajemen dan Tindakan Amazon API Gateway, sumber daya, dan kunci kondisi untuk Amazon API Gateway Management V2.

Praktik terbaik kebijakan

Kebijakan berbasis identitas menentukan apakah seseorang dapat membuat, mengakses, atau menghapus sumber daya API Gateway di akun Anda. Tindakan ini membuat Akun AWS Anda dikenai biaya. Ketika Anda membuat atau mengedit kebijakan berbasis identitas, ikuti panduan dan rekomendasi ini:

  • Mulailah dengan kebijakan AWS terkelola dan beralih ke izin hak istimewa paling sedikit — Untuk mulai memberikan izin kepada pengguna dan beban kerja Anda, gunakan kebijakan AWS terkelola yang memberikan izin untuk banyak kasus penggunaan umum. Mereka tersedia di Anda Akun AWS. Kami menyarankan Anda mengurangi izin lebih lanjut dengan menentukan kebijakan yang dikelola AWS pelanggan yang khusus untuk kasus penggunaan Anda. Untuk informasi selengkapnya, lihat Kebijakan yang dikelola AWS atau Kebijakan yang dikelola AWS untuk fungsi tugas dalam Panduan Pengguna IAM.

  • Menerapkan izin dengan hak akses paling rendah – Ketika Anda menetapkan izin dengan kebijakan IAM, hanya berikan izin yang diperlukan untuk melakukan tugas. Anda melakukannya dengan mendefinisikan tindakan yang dapat diambil pada sumber daya tertentu dalam kondisi tertentu, yang juga dikenal sebagai izin dengan hak akses paling rendah. Untuk informasi selengkapnya tentang cara menggunakan IAM untuk mengajukan izin, lihat Kebijakan dan izin dalam IAM dalam Panduan Pengguna IAM.

  • Gunakan kondisi dalam kebijakan IAM untuk membatasi akses lebih lanjut – Anda dapat menambahkan suatu kondisi ke kebijakan Anda untuk membatasi akses ke tindakan dan sumber daya. Sebagai contoh, Anda dapat menulis kondisi kebijakan untuk menentukan bahwa semua permintaan harus dikirim menggunakan SSL. Anda juga dapat menggunakan ketentuan untuk memberikan akses ke tindakan layanan jika digunakan melalui yang spesifik Layanan AWS, seperti AWS CloudFormation. Untuk informasi selengkapnya, lihat Elemen kebijakan JSON IAM: Kondisi dalam Panduan Pengguna IAM.

  • Gunakan IAM Access Analyzer untuk memvalidasi kebijakan IAM Anda untuk memastikan izin yang aman dan fungsional – IAM Access Analyzer memvalidasi kebijakan baru dan yang sudah ada sehingga kebijakan tersebut mematuhi bahasa kebijakan IAM (JSON) dan praktik terbaik IAM. IAM Access Analyzer menyediakan lebih dari 100 pemeriksaan kebijakan dan rekomendasi yang dapat ditindaklanjuti untuk membantu Anda membuat kebijakan yang aman dan fungsional. Untuk informasi selengkapnya, lihat Validasi kebijakan dengan IAM Access Analyzer dalam Panduan Pengguna IAM.

  • Memerlukan otentikasi multi-faktor (MFA) - Jika Anda memiliki skenario yang mengharuskan pengguna IAM atau pengguna root di Anda, Akun AWS aktifkan MFA untuk keamanan tambahan. Untuk meminta MFA ketika operasi API dipanggil, tambahkan kondisi MFA pada kebijakan Anda. Untuk informasi selengkapnya, lihat Amankan akses API dengan MFA dalam Panduan Pengguna IAM.

Untuk informasi selengkapnya tentang praktik terbaik dalam IAM, lihat Praktik terbaik keamanan di IAM dalam Panduan Pengguna IAM.

Mengizinkan pengguna melihat izin mereka sendiri

Contoh ini menunjukkan cara membuat kebijakan yang mengizinkan pengguna IAM melihat kebijakan inline dan terkelola yang dilampirkan ke identitas pengguna mereka. Kebijakan ini mencakup izin untuk menyelesaikan tindakan ini di konsol atau menggunakan API atau secara terprogram. AWS CLI AWS

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ViewOwnUserInfo", "Effect": "Allow", "Action": [ "iam:GetUserPolicy", "iam:ListGroupsForUser", "iam:ListAttachedUserPolicies", "iam:ListUserPolicies", "iam:GetUser" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "NavigateInConsole", "Effect": "Allow", "Action": [ "iam:GetGroupPolicy", "iam:GetPolicyVersion", "iam:GetPolicy", "iam:ListAttachedGroupPolicies", "iam:ListGroupPolicies", "iam:ListPolicyVersions", "iam:ListPolicies", "iam:ListUsers" ], "Resource": "*" } ] }

Izin baca sederhana

Kebijakan contoh ini memberikan izin kepada pengguna untuk mendapatkan informasi tentang semua sumber daya HTTP atau WebSocket API dengan pengenal a123456789 di AWS Wilayah us-east-1. Sumber daya arn:aws:apigateway:us-east-1::/apis/a123456789/* mencakup semua sub-sumber daya API seperti otorisasi dan penerapan.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:GET" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis/a123456789/*" ] } ] }

Buat hanya REQUEST atau otorisasi JWT

Kebijakan contoh ini memungkinkan pengguna untuk membuat APIs dengan hanya REQUEST atau JWT otorisasi, termasuk melalui impor. Di Resource bagian kebijakan, arn:aws:apigateway:us-east-1::/apis/?????????? sumber daya harus memiliki maksimal 10 karakter, yang mengecualikan sub-sumber daya API. Contoh ini digunakan ForAllValues di Condition bagian karena pengguna dapat membuat beberapa otorisasi sekaligus dengan mengimpor API.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "OnlyAllowSomeAuthorizerTypes", "Effect": "Allow", "Action": [ "apigateway:PUT", "apigateway:POST", "apigateway:PATCH" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/??????????", "arn:aws:apigateway:us-east-1::/apis/*/authorizers", "arn:aws:apigateway:us-east-1::/apis/*/authorizers/*" ], "Condition": { "ForAllValues:StringEqualsIfExists": { "apigateway:Request/AuthorizerType": [ "REQUEST", "JWT" ] } } } ] }

Mengharuskan execute-api titik akhir default dinonaktifkan

Kebijakan contoh ini memungkinkan pengguna untuk membuat, memperbarui, atau mengimpor API, dengan persyaratan yang DisableExecuteApiEndpoint adatrue. DisableExecuteApiEndpointKapantrue, klien tidak dapat menggunakan execute-api titik akhir default untuk menjalankan API.

Kami menggunakan BoolIfExists kondisi untuk menangani panggilan untuk memperbarui API yang tidak memiliki kunci DisableExecuteApiEndpoint kondisi terisi. Saat pengguna mencoba membuat atau mengimpor API, kunci DisableExecuteApiEndpoint kondisi selalu diisi.

Karena apis/* sumber daya juga menangkap sub sumber daya seperti otorisasi atau metode, kami secara eksplisit mencakupnya hanya APIs dengan pernyataan. Deny

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DisableExecuteApiEndpoint", "Effect": "Allow", "Action": [ "apigateway:PATCH", "apigateway:POST", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/*" ], "Condition": { "BoolIfExists": { "apigateway:Request/DisableExecuteApiEndpoint": true } } }, { "Sid": "ScopeDownToJustApis", "Effect": "Deny", "Action": [ "apigateway:PATCH", "apigateway:POST", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis/*/*" ] } ] }

Izinkan pengguna untuk membuat atau memperbarui hanya REST pribadi APIs

Kebijakan contoh ini menggunakan kunci kondisi untuk mengharuskan pengguna membuat saja PRIVATE APIs, dan untuk mencegah pembaruan yang mungkin mengubah API dari PRIVATE tipe lain, sepertiREGIONAL.

Kami menggunakan ForAllValues untuk mewajibkan bahwa setiap EndpointType ditambahkan ke API adalahPRIVATE. Kami menggunakan kunci kondisi sumber daya untuk mengizinkan pembaruan apa pun ke API selama ituPRIVATE. ForAllValueshanya berlaku jika ada kunci kondisi.

Kami menggunakan non-greedy matcher (?) untuk secara eksplisit mencocokkan dengan API IDs untuk mencegah mengizinkan sumber daya non-API seperti otorisasi.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ScopePutToPrivateApis", "Effect": "Allow", "Action": [ "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/restapis", "arn:aws:apigateway:us-east-1::/restapis/??????????" ], "Condition": { "ForAllValues:StringEquals": { "apigateway:Resource/EndpointType": "PRIVATE" } } }, { "Sid": "ScopeToPrivateApis", "Effect": "Allow", "Action": [ "apigateway:DELETE", "apigateway:PATCH", "apigateway:POST" ], "Resource": [ "arn:aws:apigateway:us-east-1::/restapis", "arn:aws:apigateway:us-east-1::/restapis/??????????" ], "Condition": { "ForAllValues:StringEquals": { "apigateway:Request/EndpointType": "PRIVATE", "apigateway:Resource/EndpointType": "PRIVATE" } } }, { "Sid": "AllowResourcePolicyUpdates", "Effect": "Allow", "Action": [ "apigateway:UpdateRestApiPolicy" ], "Resource": [ "arn:aws:apigateway:us-east-1::/restapis/*" ] } ] }

Mengharuskan rute API memiliki otorisasi

Kebijakan ini menyebabkan upaya untuk membuat atau memperbarui rute (termasuk melalui impor) gagal jika rute tidak memiliki otorisasi. ForAnyValuemengevaluasi ke false jika kunci tidak ada, seperti ketika rute tidak sedang dibuat atau diperbarui. Kami menggunakan ForAnyValue karena beberapa rute dapat dibuat melalui impor.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowUpdatesOnApisAndRoutes", "Effect": "Allow", "Action": [ "apigateway:POST", "apigateway:PATCH", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/??????????", "arn:aws:apigateway:us-east-1::/apis/*/routes", "arn:aws:apigateway:us-east-1::/apis/*/routes/*" ] }, { "Sid": "DenyUnauthorizedRoutes", "Effect": "Deny", "Action": [ "apigateway:POST", "apigateway:PATCH", "apigateway:PUT" ], "Resource": [ "arn:aws:apigateway:us-east-1::/apis", "arn:aws:apigateway:us-east-1::/apis/*" ], "Condition": { "ForAnyValue:StringEqualsIgnoreCase": { "apigateway:Request/RouteAuthorizationType": "NONE" } } } ] }

Kebijakan ini mencegah pengguna membuat atau memperbarui tautan VPC. Tautan VPC memungkinkan Anda mengekspos sumber daya dalam VPC Amazon ke klien di luar VPC.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyVPCLink", "Effect": "Deny", "Action": [ "apigateway:POST", "apigateway:PUT", "apigateway:PATCH" ], "Resource": [ "arn:aws:apigateway:us-east-1::/vpclinks", "arn:aws:apigateway:us-east-1::/vpclinks/*" ] } ] }

Mencegah pengguna mengubah cara nama domain kustom merutekan permintaan

Kebijakan ini mencegah pengguna membuat atau memperbaruiBasePathMapping, ApiMapping atauRoutingRule. Semua sumber daya ini dapat mengubah cara permintaan rute nama domain kustom APIs.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAccessBasePathMappingsApiMappingsRoutingRules", "Effect": "Deny", "Action": "apigateway:*", "Resource": [ "arn:aws:apigateway:us-east-1::/domainnames/example.com/basepathmappings/*", "arn:aws:apigateway:us-east-1::/domainnames/example.com/apimappings/*", "arn:aws:apigateway:us-east-1:111122223333:/domainnames/example.com/routingrules/*" ] } ] }