# Serverless.com Security
{{#include ../banners/hacktricks-training.md}}
## Basic Information
### Organization
An **Organization** is the highest-level entity within the Serverless Framework ecosystem. It represents a **kikundi cha pamoja**, such as a company, department, or any large entity, that encompasses multiple projects, teams, and applications.
### Team
The **Team** are the users with access inside the organization. Teams help in organizing members based on roles. **`Collaborators`** can view and deploy existing apps, while **`Admins`** can create new apps and manage organization settings.
### Application
An **App** is a logical grouping of related services within an Organization. It represents a complete application composed of multiple serverless services that work together to provide a cohesive functionality.
### **Services**
A **Service** is the core component of a Serverless application. It represents your entire serverless project, encapsulating all the functions, configurations, and resources needed. It's typically defined in a `serverless.yml` file, a service includes metadata like the service name, provider configurations, functions, events, resources, plugins, and custom variables.
```yaml
service: my-service
provider:
name: aws
runtime: nodejs14.x
functions:
hello:
handler: handler.hello
```
Function
A **Function** inawakilisha kazi moja isiyo na seva, kama kazi ya AWS Lambda. Inajumuisha msimbo unaotekelezwa kama jibu kwa matukio.
Imeainishwa chini ya sehemu ya `functions` katika `serverless.yml`, ikitaja mpangilio, mazingira ya utekelezaji, matukio, mabadiliko ya mazingira, na mipangilio mingine.
```yaml
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
```
Event
**Matukio** ni vichocheo vinavyosababisha kazi zako zisizo na seva. Vinabainisha jinsi na lini kazi inapaswa kutekelezwa.
Aina za matukio za kawaida ni pamoja na maombi ya HTTP, matukio ya ratiba (kazi za cron), matukio ya hifadhidata, upakuaji wa faili, na mengineyo.
```yaml
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
- schedule:
rate: rate(10 minutes)
```
Rasilimali
**Rasilimali** zinakuwezesha kufafanua rasilimali za ziada za wingu ambazo huduma yako inategemea, kama vile hifadhidata, ndoo za hifadhi, au majukumu ya IAM.
Zinabainishwa chini ya sehemu ya `resources`, mara nyingi kwa kutumia sintaksia ya CloudFormation kwa AWS.
```yaml
resources:
Resources:
MyDynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
TableName: my-table
AttributeDefinitions:
- AttributeName: id
AttributeType: S
KeySchema:
- AttributeName: id
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
```
Mtoa huduma
The **Provider** object specifies the cloud service provider (e.g., AWS, Azure, Google Cloud) and contains configuration settings relevant to that provider.
Inajumuisha maelezo kama vile runtime, eneo, hatua, na akreditivu.
```yaml
yamlCopy codeprovider:
name: aws
runtime: nodejs14.x
region: us-east-1
stage: dev
```
Hatua na Eneo
Hatua inawakilisha mazingira tofauti (kwa mfano, maendeleo, uanzishaji, uzalishaji) ambapo huduma yako inaweza kuwekwa. Inaruhusu usanidi na uwekaji wa mazingira maalum.
```yaml
provider:
stage: dev
```
Mkoa unaelezea eneo la kijiografia ambapo rasilimali zako zitawekwa. Ni muhimu kwa sababu za ucheleweshaji, kufuata sheria, na upatikanaji.
```yaml
provider:
region: us-west-2
```
Plugins
**Plugins** huongeza uwezo wa Serverless Framework kwa kuongeza vipengele vipya au kuunganishwa na zana na huduma nyingine. Zimefafanuliwa chini ya sehemu ya `plugins` na zinawekwa kupitia npm.
```yaml
plugins:
- serverless-offline
- serverless-webpack
```
Tabaka
**Tabaka** zinakuwezesha kufunga na kusimamia msimbo au utegemezi wa pamoja tofauti na kazi zako. Hii inakuza matumizi tena na kupunguza ukubwa wa pakiti za kutekeleza. Zin定义在`layers` sehemu na kutajwa na kazi.
```yaml
layers:
commonLibs:
path: layer-common
functions:
hello:
handler: handler.hello
layers:
- { Ref: CommonLibsLambdaLayer }
```
Variables and Custom Variables
**Variables** zinawezesha usanidi wa dinamik kwa kuruhusu matumizi ya nafasi za kubadilisha ambazo zinatatuliwa wakati wa kutekeleza.
- **Syntax:** `${variable}` syntax inaweza kurejelea mazingira ya mazingira, maudhui ya faili, au vigezo vingine vya usanidi.
```yaml
functions:
hello:
handler: handler.hello
environment:
TABLE_NAME: ${self:custom.tableName}
```
* **Custom Variables:** Sehemu ya `custom` inatumika kufafanua vigezo na usanidi maalum wa mtumiaji ambavyo vinaweza kutumika tena katika `serverless.yml`.
```yaml
custom:
tableName: my-dynamodb-table
stage: ${opt:stage, 'dev'}
```
Outputs
**Outputs** zinafafanua thamani ambazo zinarejeshwa baada ya huduma kutekelezwa, kama vile ARNs za rasilimali, maeneo ya mwisho, au taarifa nyingine muhimu. Zinabainishwa chini ya sehemu ya `outputs` na mara nyingi hutumiwa kufichua taarifa kwa huduma nyingine au kwa ufikiaji rahisi baada ya kutekelezwa.
```yaml
¡outputs:
ApiEndpoint:
Description: "API Gateway endpoint URL"
Value:
Fn::Join:
- ""
- - "https://"
- Ref: ApiGatewayRestApi
- ".execute-api."
- Ref: AWS::Region
- ".amazonaws.com/"
- Ref: AWS::Stage
```
IAM Roles and Permissions
**IAM Roles and Permissions** zinaelezea sifa za usalama na haki za ufikiaji kwa kazi zako na rasilimali nyingine. Zinapaswa kusimamiwa chini ya mipangilio ya `provider` au mipangilio ya kazi binafsi ili kubainisha ruhusa zinazohitajika.
```yaml
provider:
[...]
iam:
role:
statements:
- Effect: 'Allow'
Action:
- 'dynamodb:PutItem'
- 'dynamodb:Get*'
- 'dynamodb:Scan*'
- 'dynamodb:UpdateItem'
- 'dynamodb:DeleteItem'
Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
```
Vigezo vya Mazingira
**Vigezo** vinakuruhusu kupitisha mipangilio na siri kwa kazi zako bila kuzihardcode. Vimewekwa chini ya sehemu ya `environment` kwa mtoa huduma au kazi binafsi.
```yaml
provider:
environment:
STAGE: ${self:provider.stage}
functions:
hello:
handler: handler.hello
environment:
TABLE_NAME: ${self:custom.tableName}
```
Dependencies
**Dependencies** husimamia maktaba na moduli za nje ambazo kazi zako zinahitaji. Kwa kawaida zinashughulikiwa kupitia wasimamizi wa pakiti kama npm au pip, na kufungwa na kifurushi chako cha kutekeleza kwa kutumia zana au nyongeza kama `serverless-webpack`.
```yaml
plugins:
- serverless-webpack
```
Hooks
**Hooks** hukuruhusu kuendesha skripti au amri maalum katika hatua maalum za mzunguko wa maisha ya kutekeleza. Zinapangwa kwa kutumia plugins au ndani ya `serverless.yml` ili kutekeleza vitendo kabla au baada ya kutekeleza.
```yaml
custom:
hooks:
before:deploy:deploy: echo "Starting deployment..."
```
### Tutorial
Hii ni muhtasari wa mafunzo rasmi [**kutoka kwenye hati**](https://www.serverless.com/framework/docs/tutorial):
1. Unda akaunti ya AWS (Serverless.com inaanza katika miundombinu ya AWS)
2. Unda akaunti katika serverless.com
3. Unda programu:
```bash
# Create temp folder for the tutorial
mkdir /tmp/serverless-tutorial
cd /tmp/serverless-tutorial
# Install Serverless cli
npm install -g serverless
# Generate template
serverless #Choose first one (AWS / Node.js / HTTP API)
## Indicate a name like "Tutorial"
## Login/Register
## Create A New App
## Indicate a name like "tutorialapp)
```
Hii inapaswa kuwa imetengeneza **app** inayoitwa `tutorialapp` ambayo unaweza kuangalia katika [serverless.com](serverless.com-security.md) na folda inayoitwa `Tutorial` yenye faili **`handler.js`** inayokuwa na baadhi ya msimbo wa JS wenye msimbo wa `helloworld` na faili **`serverless.yml`** ikitangaza kazi hiyo:
{{#tabs }}
{{#tab name="handler.js" }}
```javascript
exports.hello = async (event) => {
return {
statusCode: 200,
body: JSON.stringify({
message: "Go Serverless v4! Your function executed successfully!",
}),
}
}
```
{{#endtab }}
{{#tab name="serverless.yml" }}
```yaml
# "org" ensures this Service is used with the correct Serverless Framework Access Key.
org: testing12342
# "app" enables Serverless Framework Dashboard features and sharing them with other Services.
app: tutorialapp
# "service" is the name of this project. This will also be added to your AWS resource names.
service: Tutorial
provider:
name: aws
runtime: nodejs20.x
functions:
hello:
handler: handler.hello
events:
- httpApi:
path: /
method: get
```
{{#endtab }}
{{#endtabs }}
4. Unda mtoa huduma wa AWS, ukitembea kwenye **dashibodi** katika `https://app.serverless.com//settings/providers?providerId=new&provider=aws`.
1. Ili kutoa `serverless.com` ufikiaji wa AWS itahitaji kuendesha stack ya cloudformation ikitumia faili hii ya usanidi (wakati wa kuandika hii): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml)
2. Kiolezo hiki kinaunda jukumu linaloitwa **`SFRole-`** lenye **`arn:aws:iam::aws:policy/AdministratorAccess`** juu ya akaunti yenye Kitambulisho cha Kuamini kinachoruhusu akaunti ya `Serverless.com` ya AWS kufikia jukumu hilo.
Yaml roleTemplate
```yaml
Description: This stack creates an IAM role that can be used by Serverless Framework for use in deployments.
Resources:
SFRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
AWS: arn:aws:iam::486128539022:root
Action:
- sts:AssumeRole
Condition:
StringEquals:
sts:ExternalId: !Sub "ServerlessFramework-${OrgUid}"
Path: /
RoleName: !Ref RoleName
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
ReporterFunction:
Type: Custom::ServerlessFrameworkReporter
Properties:
ServiceToken: "arn:aws:lambda:us-east-1:486128539022:function:sp-providers-stack-reporter-custom-resource-prod-tmen2ec"
OrgUid: !Ref OrgUid
RoleArn: !GetAtt SFRole.Arn
Alias: !Ref Alias
Outputs:
SFRoleArn:
Description: "ARN for the IAM Role used by Serverless Framework"
Value: !GetAtt SFRole.Arn
Parameters:
OrgUid:
Description: Serverless Framework Org Uid
Type: String
Alias:
Description: Serverless Framework Provider Alias
Type: String
RoleName:
Description: Serverless Framework Role Name
Type: String
```
Uhusiano wa Kuamini
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::486128539022:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "ServerlessFramework-7bf7ddef-e1bf-43eb-a111-4d43e0894ccb"
}
}
}
]
}
```
5. Mafunzo yanahitaji kuunda faili `createCustomer.js` ambayo kimsingi itaunda kiunganishi kipya cha API kinachoshughulikiwa na faili mpya ya JS na yanahitaji kubadilisha faili `serverless.yml` ili kufanya iweze kuunda **meza mpya ya DynamoDB**, kufafanua **kigezo cha mazingira**, jukumu ambalo litakuwa likitumia lambdas zilizozalishwa.
{{#tabs }}
{{#tab name="createCustomer.js" }}
```javascript
"use strict"
const AWS = require("aws-sdk")
module.exports.createCustomer = async (event) => {
const body = JSON.parse(Buffer.from(event.body, "base64").toString())
const dynamoDb = new AWS.DynamoDB.DocumentClient()
const putParams = {
TableName: process.env.DYNAMODB_CUSTOMER_TABLE,
Item: {
primary_key: body.name,
email: body.email,
},
}
await dynamoDb.put(putParams).promise()
return {
statusCode: 201,
}
}
```
{{#endtab }}
{{#tab name="serverless.yml" }}
```yaml
# "org" ensures this Service is used with the correct Serverless Framework Access Key.
org: testing12342
# "app" enables Serverless Framework Dashboard features and sharing them with other Services.
app: tutorialapp
# "service" is the name of this project. This will also be added to your AWS resource names.
service: Tutorial
provider:
name: aws
runtime: nodejs20.x
environment:
DYNAMODB_CUSTOMER_TABLE: ${self:service}-customerTable-${sls:stage}
iam:
role:
statements:
- Effect: "Allow"
Action:
- "dynamodb:PutItem"
- "dynamodb:Get*"
- "dynamodb:Scan*"
- "dynamodb:UpdateItem"
- "dynamodb:DeleteItem"
Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
functions:
hello:
handler: handler.hello
events:
- httpApi:
path: /
method: get
createCustomer:
handler: createCustomer.createCustomer
events:
- httpApi:
path: /
method: post
resources:
Resources:
CustomerTable:
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
- AttributeName: primary_key
AttributeType: S
BillingMode: PAY_PER_REQUEST
KeySchema:
- AttributeName: primary_key
KeyType: HASH
TableName: ${self:service}-customerTable-${sls:stage}
```
{{#endtab }}
{{#endtabs }}
6. Tumia **`serverless deploy`**
1. Utekelezaji utafanywa kupitia CloudFormation Stack
2. Kumbuka kwamba **lambdas zinapatikana kupitia API gateway** na si kupitia URLs za moja kwa moja
7. **Jaribu**
1. Hatua ya awali itachapisha **URLs** ambapo kazi za lambda za mwisho wa API zako zimewekwa
## Mapitio ya Usalama wa Serverless.com
### **Mifumo na Ruhusa za IAM Zilizokosewa**
Mifumo ya IAM iliyo na ruhusa nyingi inaweza kutoa ufikiaji usioidhinishwa kwa rasilimali za wingu, na kusababisha uvujaji wa data au upotoshaji wa rasilimali.
Wakati hakuna ruhusa zilizotajwa kwa kazi ya Lambda, mfumo wenye ruhusa za kuzalisha tu kumbukumbu utaundwa, kama:
Ruhusa za chini za lambda
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogStream",
"logs:CreateLogGroup",
"logs:TagResource"
],
"Resource": [
"arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/jito-cranker-scripts-dev*:*"
],
"Effect": "Allow"
},
{
"Action": ["logs:PutLogEvents"],
"Resource": [
"arn:aws:logs:us-east-1:123456789012:log-group:/aws/lambda/jito-cranker-scripts-dev*:*:*"
],
"Effect": "Allow"
}
]
}
```
#### **Mikakati ya Kupunguza**
- **Kanuni ya Haki Ndogo:** Panga ruhusa zinazohitajika tu kwa kila kazi.
```yaml
provider:
[...]
iam:
role:
statements:
- Effect: 'Allow'
Action:
- 'dynamodb:PutItem'
- 'dynamodb:Get*'
- 'dynamodb:Scan*'
- 'dynamodb:UpdateItem'
- 'dynamodb:DeleteItem'
Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-customerTable-${sls:stage}
```
- **Tumia Majukumu Mbalimbali:** Tofautisha majukumu kulingana na mahitaji ya kazi.
---
### **Siri zisizo Salama na Usimamizi wa Mipangilio**
Kuhifadhi taarifa nyeti (mfano, funguo za API, akidi za database) moja kwa moja katika **`serverless.yml`** au msimbo kunaweza kusababisha kufichuliwa ikiwa hifadhi zitashambuliwa.
Njia **iliyopendekezwa** ya kuhifadhi mabadiliko ya mazingira katika faili ya **`serverless.yml`** kutoka serverless.com (wakati wa kuandika hii) ni kutumia watoa huduma wa `ssm` au `s3`, ambao unaruhusu kupata **maadili ya mazingira kutoka vyanzo hivi wakati wa kutekeleza** na **kuunda** mabadiliko ya mazingira ya **lambdas** na **maandishi yasiyo na maadili**!
> [!CAUTION]
> Hivyo, mtu yeyote mwenye ruhusa ya kusoma mipangilio ya lambdas ndani ya AWS ataweza **kufikia mabadiliko haya yote ya mazingira kwa maandiko wazi!**
Kwa mfano, mfano ufuatao utatumia SSM kupata mabadiliko ya mazingira:
```yaml
provider:
environment:
DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true}
```
And even if this prevents hardcoding the environment variable value in the **`serverless.yml`** file, the value will be obtained at deployment time and will be **added in clear text inside the lambda environment variable**.
> [!TIP]
> Njia inayopendekezwa ya kuhifadhi mabadiliko ya mazingira kwa kutumia serveless.com ingekuwa **kuhifadhi katika siri ya AWS** na kuhifadhi tu jina la siri katika mabadiliko ya mazingira na **kodhi ya lambda inapaswa kukusanya hiyo**.
#### **Mikakati ya Kupunguza**
- **Ushirikiano wa Meneja wa Siri:** Tumia huduma kama **AWS Secrets Manager.**
- **Mabadiliko Yaliyosimbwa:** Tumia vipengele vya usimbaji vya Serverless Framework kwa data nyeti.
- **Udhibiti wa Ufikiaji:** Punguza ufikiaji wa siri kulingana na majukumu.
---
### **Msimbo na Kazi Zenye Ukatili**
Kazi au utegemezi zisizokuwa na usalama zinaweza kuleta udhaifu, wakati usimamizi mbaya wa ingizo unaweza kusababisha mashambulizi ya kuingiza msimbo.
#### **Mikakati ya Kupunguza**
- **Usimamizi wa Utegemezi:** Sasisha mara kwa mara utegemezi na scan kwa udhaifu.
```yaml
plugins:
- serverless-webpack
- serverless-plugin-snyk
```
- **Uthibitishaji wa Ingizo:** Tekeleza uthibitishaji mkali na usafi wa ingizo zote.
- **Mapitio ya Msimbo:** Fanya mapitio ya kina ili kubaini kasoro za usalama.
- **Analizi ya Kijamii:** Tumia zana kugundua udhaifu katika msingi wa msimbo.
---
### **Kukosa Kurekodi na Kufuata**
Bila kurekodi na kufuatilia vizuri, shughuli za uhalifu zinaweza kukosa kugunduliwa, kuchelewesha majibu ya tukio.
#### **Mikakati ya Kupunguza**
- **Kurekodi Kati:** Punguza kumbukumbu kwa kutumia huduma kama **AWS CloudWatch** au **Datadog**.
```yaml
plugins:
- serverless-plugin-datadog
```
- **Washa Kurekodi Kwa Kina:** Pata taarifa muhimu bila kufichua data nyeti.
- **Weka Arifa:** Sanidi arifa kwa shughuli au tofauti za kushangaza.
- **Kufuata Mara kwa Mara:** Fuata mara kwa mara kumbukumbu na vipimo kwa matukio ya usalama yanayoweza kutokea.
---
### **Mikakati ya API Gateway Isiyo Salama**
APIs zilizo wazi au zisizo salama zinaweza kutumika kwa ufikiaji usioidhinishwa, mashambulizi ya Denial of Service (DoS), au mashambulizi ya tovuti.
#### **Mikakati ya Kupunguza**
- **Uthibitishaji na Uidhinishaji:** Tekeleza mifumo thabiti kama OAuth, funguo za API, au JWT.
```yaml
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
authorizer: aws_iam
```
- **Kukataza Kiwango na Kuchelewesha:** Zuia matumizi mabaya kwa kupunguza viwango vya maombi.
```yaml
provider:
apiGateway:
throttle:
burstLimit: 200
rateLimit: 100
```
- **Sanidi CORS Salama:** Punguza asili, mbinu, na vichwa vinavyoruhusiwa.
```yaml
functions:
hello:
handler: handler.hello
events:
- http:
path: hello
method: get
cors:
origin: https://yourdomain.com
headers:
- Content-Type
```
- **Tumia Firewalls za Programu za Mtandao (WAF):** Chuja na fuatilia maombi ya HTTP kwa mifumo ya uhalifu.
---
### **Kukosa Kutengwa kwa Kazi**
Rasilimali zinazoshirikiwa na kutengwa kwa kutosha kunaweza kusababisha kupanda kwa mamlaka au mwingiliano usio na makusudi kati ya kazi.
#### **Mikakati ya Kupunguza**
- **Tenga Kazi:** Panga rasilimali tofauti na majukumu ya IAM ili kuhakikisha uendeshaji huru.
- **Kugawanya Rasilimali:** Tumia hifadhidata tofauti au ndoo za kuhifadhi kwa kazi tofauti.
- **Tumia VPCs:** Weka kazi ndani ya Mifumo ya Kibinafsi ya Mtandao kwa kutengwa kwa mtandao iliyoimarishwa.
```yaml
provider:
vpc:
securityGroupIds:
- sg-xxxxxxxx
subnetIds:
- subnet-xxxxxx
```
- **Punguza Ruhusa za Kazi:** Hakikisha kazi haziwezi kufikia au kuingilia rasilimali za kila mmoja isipokuwa inahitajika wazi.
---
### **Kukosa Ulinzi wa Data**
Data isiyosimbwa katika hali ya kupumzika au katika usafiri inaweza kufichuliwa, ikisababisha uvunjaji wa data au uharibifu.
#### **Mikakati ya Kupunguza**
- **Simbua Data Katika Hali ya Kupumzika:** Tumia vipengele vya usimbaji vya huduma za wingu.
```yaml
resources:
Resources:
MyDynamoDBTable:
Type: AWS::DynamoDB::Table
Properties:
SSESpecification:
SSEEnabled: true
```
- **Simbua Data Katika Usafiri:** Tumia HTTPS/TLS kwa usafiri wote wa data.
- **Wasiliana kwa API Salama:** Lazimisha itifaki za usimbaji na kuthibitisha vyeti.
- **Simamisha Funguo za Usimbaji kwa Usalama:** Tumia huduma za funguo zinazodhibitiwa na kubadilisha funguo mara kwa mara.
---
### **Kukosa Usimamizi wa Makosa Sahihi**
Ujumbe wa makosa wa kina unaweza kufichua taarifa nyeti kuhusu miundombinu au msingi wa msimbo, wakati makosa yasiyoshughulikiwa yanaweza kusababisha kuanguka kwa programu.
#### **Mikakati ya Kupunguza**
- **Ujumbe wa Makosa ya Jumla:** Epuka kufichua maelezo ya ndani katika majibu ya makosa.
```javascript
javascriptCopy code// Mfano katika Node.js
exports.hello = async (event) => {
try {
// Mantiki ya kazi
} catch (error) {
console.error(error);
return {
statusCode: 500,
body: JSON.stringify({ message: 'Internal Server Error' }),
};
}
};
```
- **Usimamizi wa Makosa Kati:** Simamia na safisha makosa kwa njia ya kawaida katika kazi zote.
- **Fuatilia na Kurekodi Makosa:** Fuata na changanua makosa ndani bila kufichua maelezo kwa watumiaji wa mwisho.
---
### **Mikakati ya Utekelezaji Isiyo Salama**
Mikakati ya utekelezaji iliyofichuliwa au ufikiaji usioidhinishwa kwa mabomba ya CI/CD inaweza kusababisha utekelezaji wa msimbo wa uhalifu au mipangilio isiyo sahihi.
#### **Mikakati ya Kupunguza**
- **Salama Mabomba ya CI/CD:** Tekeleza udhibiti mkali wa ufikiaji, uthibitishaji wa hatua nyingi (MFA), na ukaguzi wa mara kwa mara.
- **Hifadhi Mipangilio kwa Usalama:** Hifadhi faili za utekelezaji bila siri zilizofichwa na data nyeti.
- **Tumia Zana za Usalama za Miundombinu kama Msimbo (IaC):** Tumia zana kama **Checkov** au **Terraform Sentinel** kutekeleza sera za usalama.
- **Utekelezaji Usio Badilika:** Zuia mabadiliko yasiyoidhinishwa baada ya utekelezaji kwa kupitisha mazoea ya miundombinu isiyobadilika.
---
### **Udhaifu katika Plugins na Nyongeza**
Kutumia plugins za tatu zisizokaguliwa au zenye uhalifu kunaweza kuleta udhaifu katika programu zako za serverless.
#### **Mikakati ya Kupunguza**
- **Kagua Plugins kwa Kina:** Kadiria usalama wa plugins kabla ya kuingizwa, ukipendelea zile kutoka vyanzo vinavyoaminika.
- **Punguza Matumizi ya Plugins:** Tumia tu plugins zinazohitajika ili kupunguza uso wa shambulio.
- **Fuatilia Sasisho za Plugins:** Hifadhi plugins zikiwa na sasisho ili kufaidika na patches za usalama.
- **Tenga Mazingira ya Plugins:** Endesha plugins katika mazingira yaliyotengwa ili kudhibiti hatari zinazoweza kutokea.
---
### **Kufichua kwa Mipangilio Nyeti**
Kazi zinazopatikana kwa umma au APIs zisizo na mipaka zinaweza kutumika kwa shughuli zisizoidhinishwa.
#### **Mikakati ya Kupunguza**
- **Punguza Ufikiaji wa Kazi:** Tumia VPCs, vikundi vya usalama, na sheria za moto ili kupunguza ufikiaji kwa vyanzo vinavyoaminika.
- **Tekeleza Uthibitishaji Thabiti:** Hakikisha kwamba mipangilio yote iliyofichuliwa inahitaji uthibitishaji na uidhinishaji sahihi.
- **Tumia Mabango ya API kwa Usalama:** Sanidi Mabango ya API kutekeleza sera za usalama, ikiwa ni pamoja na uthibitishaji wa ingizo na kukataza kiwango.
- **Zima Mipangilio Isiyotumika:** Kagua mara kwa mara na zima mipangilio yoyote ambayo haitumiki tena.
---
### **Ruhusa Kupita Kiasi kwa Wajumbe wa Timu na Washirikishi wa Nje**
Kutoa ruhusa kupita kiasi kwa wajumbe wa timu na washirikishi wa nje kunaweza kusababisha ufikiaji usioidhinishwa, uvunjaji wa data, na matumizi mabaya ya rasilimali. Hatari hii inaongezeka katika mazingira ambapo watu wengi wana viwango tofauti vya ufikiaji, ikiongeza uso wa shambulio na uwezekano wa vitisho vya ndani.
#### **Mikakati ya Kupunguza**
- **Kanuni ya Ruhusa Ndogo:** Hakikisha kwamba wajumbe wa timu na washirikishi wana ruhusa tu zinazohitajika kutekeleza majukumu yao.
---
### **Usalama wa Funguo za Ufikiaji na Funguo za Leseni**
**Funguo za Ufikiaji** na **Funguo za Leseni** ni ithibati muhimu zinazotumika kuthibitisha na kuidhinisha mwingiliano na CLI ya Serverless Framework.
- **Funguo za Leseni:** Ni vitambulisho vya kipekee vinavyohitajika kwa uthibitishaji wa ufikiaji kwa Serverless Framework Toleo la 4 ambalo linaruhusu kuingia kupitia CLI.
- **Funguo za Ufikiaji:** Ithibati zinazoruhusu CLI ya Serverless Framework kuthibitisha na Dashibodi ya Serverless Framework. Wakati wa kuingia na `serverless` cli funguo ya ufikiaji itaundwa na **kuhifadhiwa kwenye laptop**. Unaweza pia kuiseti kama mabadiliko ya mazingira yanayoitwa `SERVERLESS_ACCESS_KEY`.
#### **Hatari za Usalama**
1. **Kufichuliwa Kupitia Hifadhi za Msimbo:**
- Kuweka au kwa bahati mbaya kupeleka Funguo za Ufikiaji na Funguo za Leseni kwenye mifumo ya kudhibiti toleo kunaweza kusababisha ufikiaji usioidhinishwa.
2. **Hifadhi Isiyo Salama:**
- Kuhifadhi funguo katika maandiko wazi ndani ya mabadiliko ya mazingira au faili za mipangilio bila usimbaji sahihi kunaongeza uwezekano wa kufichuliwa.
3. **Usambazaji Mbaya:**
- Kushiriki funguo kupitia njia zisizo salama (k.m., barua pepe, gumzo) kunaweza kusababisha kukamatwa na wahalifu.
4. **Kukosa Mzunguko:**
- Kutokuzungusha funguo mara kwa mara kunaongeza kipindi cha kufichuliwa ikiwa funguo zitavunjwa.
5. **Ruhusa Kupita Kiasi:**
- Funguo zenye ruhusa pana zinaweza kutumika kufanya vitendo visivyoidhinishwa katika rasilimali nyingi.
{{#include ../banners/hacktricks-training.md}}