सॉफ़्टवेयर सप्लाई की सुरक्षा करना

1. खास जानकारी

Artifact Registry की मदद से, अलग-अलग तरह के आर्टफ़ैक्ट स्टोर किए जा सकते हैं. साथ ही, एक ही प्रोजेक्ट में एक से ज़्यादा डेटा स्टोर करने की जगहें बनाई जा सकती हैं. साथ ही, हर डेटा स्टोर करने की जगह के साथ किसी खास क्षेत्र या कई इलाकों को जोड़ा जा सकता है. रिपॉज़िटरी के कई मोड उपलब्ध हैं. हर मोड का अलग-अलग मकसद होता है. नीचे दिए गए डायग्राम में, डेटा स्टोर करने की जगहों को अलग-अलग मोड में एक साथ इस्तेमाल करने के कई संभावित तरीकों में से एक को दिखाया गया है. इस डायग्राम में, Google Cloud के दो प्रोजेक्ट के वर्कफ़्लो को दिखाया गया है. डेवलपमेंट प्रोजेक्ट में, डेवलपर एक Java ऐप्लिकेशन बनाते हैं. एक अलग रनटाइम प्रोजेक्ट में, दूसरा बिल्ड ऐप्लिकेशन के साथ एक कंटेनर इमेज बनाता है, ताकि Google Kubernetes Engine पर डिप्लॉयमेंट के लिए ऐप्लिकेशन का इस्तेमाल किया जा सके.

5af5e4da3ccfdff3.png

इस लैब में, आपको इन टास्क को करने का तरीका पता चलता है.

  • अपने निजी पैकेज डिप्लॉय करने के लिए, स्टैंडर्ड डेटा स्टोर करने की जगहों का इस्तेमाल करें
  • मेवन सेंट्रल पैकेज को कैश मेमोरी में सेव करने के लिए, रिमोट रिपॉज़िटरी का इस्तेमाल करना
  • एक से ज़्यादा अपस्ट्रीम डेटा को एक कॉन्फ़िगरेशन में जोड़ने के लिए, वर्चुअल डेटा स्टोर करने की जगह का इस्तेमाल करें

अपने हिसाब से एनवायरमेंट सेटअप करें

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे PROJECT_ID के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. इसके अलावा, खुद भी आज़माया जा सकता है और देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद इसे बदला नहीं जा सकता और प्रोजेक्ट के कुल समय तक बना रहेगा.
  • आपकी जानकारी के लिए, एक तीसरी वैल्यू यानी प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

Workspace का सेटअप

gcloud सेट अप करें

Cloud Shell में, अपना प्रोजेक्ट आईडी और प्रोजेक्ट नंबर सेट करें. उन्हें PROJECT_ID और PROJECT_NUMBER वैरिएबल के तौर पर सेव करें.

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

एपीआई चालू करें

gcloud services enable artifactregistry.googleapis.com

रेपो का क्लोन बनाएं

git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/container-registry/container-analysis

2. डेटा स्टोर करने की स्टैंडर्ड जगहें

स्टैंडर्ड रिपॉज़िटरी आपको निजी पैकेज सेव करने और उन्हें दूसरे ऐप्लिकेशन के साथ शेयर करने का तरीका बताता है

स्टैंडर्ड मेवन डेटा स्टोर करने की जगह बनाएं

Java आर्टफ़ैक्ट का डेटा स्टोर करने की जगह बनाने के लिए, Cloud Shell से यह कमांड चलाएं:

gcloud artifacts repositories create container-dev-java-repo \
    --repository-format=maven \
    --location=us-central1 \
    --description="Java package repository for Container Dev Workshop"

अगर Cloud Shell से अनुमति देने का अनुरोध दिखता है, तो 'अनुमति दें' पर क्लिक करें

Google Cloud Console - Artifact Registry - डेटा स्टोर करने की जगह पर जाएं और देखें कि container-dev-java-repo नाम का Maven रिपॉज़िटरी अभी बनाया गया है. इस पर क्लिक करने पर आपको लगेगा कि वह अभी खाली है.

gcloud artifacts repositories describe container-dev-java-repo \
    --location=us-central1

इससे मिलता-जुलता जवाब मिलना चाहिए

Encryption: Google-managed key
Repository Size: 0.000MB
createTime: '2023-03-21T19:01:45.461589Z'
description: Java package repository for Container Dev Workshop
format: MAVEN
mavenConfig: {}
mode: STANDARD_REPOSITORY
name: projects/qwiklabs-gcp-03-4304110dc461/locations/us-central1/repositories/container-dev-java-repo
updateTime: '2023-03-21T19:01:45.461589Z'

Artifact Registry के लिए, Maven को कॉन्फ़िगर करना

अपने Java प्रोजेक्ट में डेटा स्टोर करने की जगह का कॉन्फ़िगरेशन जोड़ने के लिए, यह कमांड चलाएं:

gcloud artifacts print-settings mvn \
    --repository=container-dev-java-repo \
    --location=us-central1

पिछला निर्देश आपके प्रोजेक्ट pom.xml में जोड़ने के लिए xml दिखाता है.

  • डेटा स्टोर करने की जगह सेक्शन से पता चलता है कि Maven, मौजूदा प्रोजेक्ट के लिए रिमोट आर्टफ़ैक्ट कहां से डाउनलोड कर सकता है.
  • distributionManagement सेक्शन से यह तय होता है कि डिप्लॉय किए जाने पर, प्रोजेक्ट किस रिमोट रिपॉज़िटरी (डेटा स्टोर करने की जगह) को पुश करेगा.
  • एक्सटेंशन सेक्शन, Artifregistry-maven-वैगन में जुड़ जाता है. यह आर्टफ़ैक्ट रजिस्ट्री से कनेक्ट करने के लिए ज़रूरी पुष्टि और ट्रांसपोर्ट लेयर को चालू करता है
  • ध्यान दें: pom.xml या extensions.xml में एक्सटेंशन मौजूद हो सकते हैं. ऐसे मामलों में जहां प्रोजेक्ट किसी पैरंट प्रोजेक्ट पर निर्भर होता है, वहां pom.xml की बाकी एंट्री के लोड होने से पहले उन डिपेंडेंसी को ऐक्सेस किया जाता है. यह पक्का करने के लिए कि पैरंट के पास एक्सटेंशन का ऐक्सेस है, उसे extensions.xml फ़ाइल में रखा जा सकता है. यह फ़ाइल pom.xml से पहले लोड होती है, ताकि यह पैरंट डिपेंडेंसी के लिए उपलब्ध हो सके.

तीन सेक्शन को कॉपी करें. इसके बाद, pom.xml को Cloud Shell Editor में खोलें और वापस लाई गई सेटिंग को फ़ाइल के निचले हिस्से में, क्लोज़िंग project टैग के अंदर जोड़ें.

सलाह: Cloud Shell में, मौजूदा डायरेक्ट्री में एडिटर खोलने के लिए टर्मिनल में यहां दिया गया कमांड चलाएं.

cloudshell workspace .

उदाहरण: (आपके यूआरएल में प्रोजेक्ट के नाम अलग होंगे)

  ...

  <distributionManagement>
    <snapshotRepository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </snapshotRepository>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </repository>
  </distributionManagement>

  <repositories>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <build>
    <extensions>
      <extension>
        <groupId>com.google.cloud.artifactregistry</groupId>
        <artifactId>artifactregistry-maven-wagon</artifactId>
        <version>2.2.0</version>
      </extension>
    </extensions>
  </build>

</project>

Artifact Registry में अपना Java पैकेज अपलोड करें

Maven में Artifact Registry को कॉन्फ़िगर करके, अब Artifact Registry का इस्तेमाल किया जा सकता है. इससे, आपके संगठन के अन्य प्रोजेक्ट में इस्तेमाल किए जाने वाले Java जार सेव किए जा सकेंगे.

Artifact Registry में अपना Java पैकेज अपलोड करने के लिए, नीचे दिया गया कमांड चलाएं:

mvn deploy -DskipTests

अगर आपको इस कमांड को फिर से चलाना है, तो पक्का करें कि pom.xml में वर्शन को बढ़ाया गया हो.

Artifact Registry में जाकर Java पैकेज देखें

Cloud Console - Artifact Registry - Repositories पर जाएं. container-dev-java-repo पर क्लिक करके देखें कि hello-world बाइनरी आर्टफ़ैक्ट तो नहीं है:

147eac5168648db1.png

3. डेटा स्टोर करने की रिमोट जगहें

रिमोट डेटा स्टोर करने की जगहें, तीसरे पक्ष के पैकेज को कैश मेमोरी में सेव करने की सुविधा देती हैं. इससे ऐप्लिकेशन को ज़्यादा भरोसेमंद और सुरक्षित बनाया जा सकता है.

रिमोट रिपॉज़िटरी बनाना

ध्यान दें: पुष्टि और कॉन्फ़िगरेशन की जानकारी के लिए, प्रॉडक्ट का दस्तावेज़ देखें.

Maven Central के आर्टफ़ैक्ट का रिमोट रिपॉज़िटरी बनाने के लिए, Cloud Shell से यह कमांड चलाएं:

gcloud artifacts repositories create maven-central-cache \
    --project=$PROJECT_ID \
    --repository-format=maven \
    --location=us-central1 \
    --description="Remote repository for Maven Central caching" \
    --mode=remote-repository \
    --remote-repo-config-desc="Maven Central" \
    --remote-mvn-repo=MAVEN-CENTRAL

कंसोल में, डेटा स्टोर करने की सुविधा की समीक्षा करें

Cloud Console - Artifact Registry - Repositories पर जाएं. maven-central-cache पर क्लिक करें और देखें कि उसे बना दिया गया है और फ़िलहाल वह खाली है

टर्मिनल में रेपो की समीक्षा करें

gcloud artifacts repositories describe maven-central-cache \
    --location=us-central1

डेटा स्टोर करने की जगह को अपने प्रोजेक्ट में इंटिग्रेट करें

अपने Java प्रोजेक्ट में डेटा स्टोर करने की जगह का कॉन्फ़िगरेशन जोड़ने के लिए, यह कमांड चलाएं:

gcloud artifacts print-settings mvn \
    --repository=maven-central-cache \
    --location=us-central1

अपने pom.xml में रिपॉज़िटरी सेक्शन जोड़ें. पक्का करें कि बाहरी <डेटा स्टोर करने की जगहों> को कॉपी न किया गया हो टैग लगाया जा सकता है.

जोड़ी गई नई रिपॉज़िटरी का आईडी बदलकर "सेंट्रल" करें ताकि यह पक्का किया जा सके कि डेटा स्टोर करने की हर एंट्री का यूनीक आईडी है.

उदाहरण: (आपके यूआरएल में प्रोजेक्ट के नाम अलग होंगे)

  ...

  <distributionManagement>
    <snapshotRepository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </snapshotRepository>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </repository>
  </distributionManagement>

  <repositories>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>

    <repository>
      <id>central</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/maven-central-cache</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>


  </repositories>

  <build>
    <extensions>
      <extension>
        <groupId>com.google.cloud.artifactregistry</groupId>
        <artifactId>artifactregistry-maven-wagon</artifactId>
        <version>2.2.0</version>
      </extension>
    </extensions>
  </build>

</project>

अपने प्रोजेक्ट के लिए extensions.xml बनाने के लिए, अपने टर्मिनल में नीचे दिए गए कमांड चलाएं. मुख्य एक्सटेंशन तकनीक का इस्तेमाल करके यह पक्का करें कि Maven, Artifact Registry से पैरंट या प्लगिन डिपेंडेंसी का समाधान कर सकता है.

mkdir .mvn 
cat > .mvn/extensions.xml << EOF
<extensions xmlns="http://maven.apache.org/EXTENSIONS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/EXTENSIONS/1.0.0 http://maven.apache.org/xsd/core-extensions-1.0.0.xsd">
  <extension>
    <groupId>com.google.cloud.artifactregistry</groupId>
    <artifactId>artifactregistry-maven-wagon</artifactId>
    <version>2.2.0</version>
  </extension>
</extensions>
EOF

रिमोट डेटा स्टोर करने की जगह से डिपेंडेंसी लेना

रिमोट डेटा स्टोर करने की जगह का इस्तेमाल करके अपने ऐप्लिकेशन को कंपाइल करने के लिए, नीचे दिया गया कमांड चलाएं:

rm -rf ~/.m2/repository 
mvn compile

कंसोल में मौजूद पैकेज की समीक्षा करें

Cloud Console - Artifact Registry - Repositories पर जाएं. maven-central-cache पर क्लिक करके देखें कि वहां बाइनरी आर्टफ़ैक्ट कैश किए गए हैं या नहीं:

9deea93caa5fefd7.png

4. वर्चुअल डेटा स्टोर करने की जगहें

वर्चुअल डेटा स्टोर करने की जगहें, डेटा स्टोर करने की एक से ज़्यादा जगहों के लिए इंटरफ़ेस के तौर पर काम करती हैं. इस इंटरफ़ेस को एक ही कॉन्फ़िगरेशन से ऐक्सेस किया जा सकता है. यह आपके आर्टफ़ैक्ट के उपभोक्ताओं के लिए क्लाइंट कॉन्फ़िगरेशन को आसान बनाता है और डिपेंडेंसी से जुड़े भ्रम के हमलों को कम करके सुरक्षा बढ़ाता है.

नीति फ़ाइल बनाएं

cat > ./policy.json << EOF
[
  {
    "id": "private",
    "repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/container-dev-java-repo",
    "priority": 100
  },
  {
    "id": "central",
    "repository": "projects/${PROJECT_ID}/locations/us-central1/repositories/maven-central-cache",
    "priority": 80
  }
]

EOF

वर्चुअल डेटा स्टोर करने की जगह बनाना

gcloud artifacts repositories create virtual-maven-repo \
    --project=${PROJECT_ID} \
    --repository-format=maven \
    --mode=virtual-repository \
    --location=us-central1 \
    --description="Virtual Maven Repo" \
    --upstream-policy-file=./policy.json

डेटा स्टोर करने की जगह को अपने प्रोजेक्ट में इंटिग्रेट करें

अपने Java प्रोजेक्ट में डेटा स्टोर करने की जगह का कॉन्फ़िगरेशन जोड़ने के लिए, यह कमांड चलाएं:

gcloud artifacts print-settings mvn \
    --repository=virtual-maven-repo \
    --location=us-central1

अपने pom के पूरे डेटा स्टोर करने की जगह के सेक्शन को, आउटपुट में मौजूद एक वर्चुअल डेटा स्टोर करने की जगह के सेक्शन से बदलें.

उदाहरण: (आपके यूआरएल में प्रोजेक्ट के नाम अलग होंगे)

  ...


  <distributionManagement>
    <snapshotRepository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </snapshotRepository>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/container-dev-java-repo</url>
    </repository>
  </distributionManagement>

  <repositories>
    <repository>
      <id>artifact-registry</id>
      <url>artifactregistry://us-central1-maven.pkg.dev/qwiklabs-gcp-04-3c51830ea757/virtual-maven-repo</url>
      <releases>
        <enabled>true</enabled>
      </releases>
      <snapshots>
        <enabled>true</enabled>
      </snapshots>
    </repository>
  </repositories>

  <build>
    <extensions>
      <extension>
        <groupId>com.google.cloud.artifactregistry</groupId>
        <artifactId>artifactregistry-maven-wagon</artifactId>
        <version>2.2.0</version>
      </extension>
    </extensions>
  </build>

</project>


वर्चुअल डेटा स्टोर करने की जगह से डिपेंडेंसी लेना

वर्चुअल डेटा स्टोर करने की जगह, एक पास थ्रू होती है और इसमें असल पैकेज सेव नहीं होते हैं. इसलिए, इस प्रोसेस को साफ़ तौर पर दिखाने के लिए आपको पहले बनाए गए मैवेन-सेंट्रल-कैश रेपो को मिटाना होगा और उसे फिर से बनाना होगा. ऐसा करने पर, एक खाली रिपॉज़िटरी के साथ फिर से शुरू किया जा सकता है

कैश मेमोरी का डेटा स्टोर करने की जगह फिर से बनाने के लिए, नीचे दिए गए निर्देशों का पालन करें

gcloud artifacts repositories delete maven-central-cache \
    --project=$PROJECT_ID \
    --location=us-central1 \
    --quiet

gcloud artifacts repositories create maven-central-cache \
    --project=$PROJECT_ID \
    --repository-format=maven \
    --location=us-central1 \
    --description="Remote repository for Maven Central caching" \
    --mode=remote-repository \
    --remote-repo-config-desc="Maven Central" \
    --remote-mvn-repo=MAVEN-CENTRAL

कंसोल में, खाली डेटा स्टोर करने की जगह की समीक्षा की जा सकती है. Cloud Console - Artifact Registry - डेटा स्टोर करने की जगहें पर जाएं

अब नीचे दिए गए कमांड की मदद से अपना प्रोजेक्ट बनाकर, वर्चुअल रिपॉज़िटरी का इस्तेमाल करें

rm -rf ~/.m2/repository 
mvn compile

कंसोल में मौजूद पैकेज की समीक्षा करें

Cloud Console - Artifact Registry - Repositories पर जाएं maven-central-cache पर क्लिक करें और देखें कि बाइनरी आर्टफ़ैक्ट को वर्चुअल रेपो से खींचने के लिए कॉन्फ़िगर किया गया है या नहीं, लेकिन आखिर में उसे maven-central-cache से लिया गया है:

9deea93caa5fefd7.png

5. बधाई हो!

बधाई हो, आपने कोडलैब पूरा कर लिया है!

आपने क्या कवर किया

  • आपके निजी पैकेज को डिप्लॉय करने के लिए, स्टैंडर्ड डेटा स्टोर करने की जगहों का इस्तेमाल किया गया
  • मेवन सेंट्रल पैकेज को कैश मेमोरी में सेव करने के लिए, रिमोट रिपॉज़िटरी का इस्तेमाल किया जाता है
  • कई अपस्ट्रीम डेटा को एक कॉन्फ़िगरेशन में जोड़ने के लिए, वर्चुअल डेटा स्टोर करने की जगह का इस्तेमाल किया गया

साफ़-सफ़ाई सेवा

प्रोजेक्ट मिटाने के लिए, यहां दिया गया कमांड चलाएं

gcloud projects delete ${PROJECT_ID}

पिछला अपडेट: 22/3/23