aws eks使用irsa代替ak/sk

0x00 TLNR;

在 AWS EKS 中,通過 Service Account(SA) 來代替使用 Access Key(AK)和 Secret Key(SK)是通過整合 IAM Roles for Service Accounts (IRSA) 來實現(xiàn)的恢总。這種方式允許 EKS Pod 使用關(guān)聯(lián)的 IAM Role 來訪問 AWS 資源肄鸽,而無需在代碼中硬編碼 AK/SK瘪弓,從而提高安全性。

0x01 啟用 IAM OIDC

通過EKS外部的OIDC 來綁定 sa 和 iam中的權(quán)限蒿赢〉佣剩 先確認下是否起用:

aws eks describe-cluster --name <your-cluster-name> --query "cluster.identity.oidc.issuer" --output text

沒有輸出的話颁督,啟用:

eksctl utils associate-iam-oidc-provider --cluster <your-cluster-name> --approve

0x02 創(chuàng)建S3桶的策略

1践啄、編寫S3 Policy文件

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::my-bucket-name"
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket-name/*"
        }
    ]
}

2、創(chuàng)建policy

aws iam create-policy --policy-name MyS3AccessPolicy --policy-document file://my-policy.json

正常時反饋:

{
    "Policy": {
        "PolicyName": "MyS3AccessPolicy",
        "PolicyId": "ANP****ULM",
        "Arn": "arn:aws:iam::{you_account_id}:policy/MyS3AccessPolicy",
        "Path": "/",
        "DefaultVersionId": "v1",
        "AttachmentCount": 0,
        "PermissionsBoundaryUsageCount": 0,
        "IsAttachable": true,
        "CreateDate": "2024-11-28T00:49:43Z",
        "UpdateDate": "2024-11-28T00:49:43Z"
    }
}

0x03 創(chuàng)建IAM Role 并綁定

1沉御、獲取OIDC的ARN,返回一個域名URL

aws eks describe-cluster --name <your-cluster-name> --query "cluster.identity.oidc.issuer" --output text

2屿讽、編寫信任關(guān)系文件

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::<account-id>:oidc-provider/<oidc-provider-url>"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "<oidc-provider-url>:sub": "system:serviceaccount:<namespace>:<service-account-name>"
                }
            }
        }
    ]
}

3、創(chuàng)建Role, 并綁定

aws iam create-role --role-name MyEKSRole --assume-role-policy-document file://trust-policy.json

aws iam attach-role-policy --role-name MyEKSRole --policy-arn arn:aws:iam::<account-id>:policy/MyS3AccessPolicy

0x04 創(chuàng)建 K8s SA并綁定IAM Role

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-service-account
  namespace: default
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::<account-id>:role/MyEKSRole

提交:
kubectl apply -f sa.yaml

0x05 部署一個應(yīng)用吠裆,使用創(chuàng)建的SA

apiVersion: v1
kind: Pod
metadata:
  name: awscli
  labels:
    app: awscli
spec:
  serviceAccountName: {sa-name}
  containers:
    - image: amazon/aws-cli
      command:
        - "sleep"
        - "604800"
      imagePullPolicy: IfNotPresent
      name: awscli
  restartPolicy: Always

0x06 驗證

# 確認env配置
kubectl exec -n YOUR_NAMESPACE awscli -- env | grep AWS

# 獲取 sts
kubectl exec -it awscli -n YOUR_NAMESPACE -- aws sts get-caller-identity

0x07 Spring Java 依賴

   <dependencies>
    <!-- IRSA基礎(chǔ)依賴   -->
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>auth</artifactId>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>sdk-core</artifactId>
    </dependency>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>sts</artifactId>
    </dependency>

    <!-- 業(yè)務(wù)依賴  -->
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>s3</artifactId>
    </dependency>
  </dependencies>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>bom</artifactId>
        <version>2.29.23</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

0x08 Java代碼示例

    @GetMapping("/get/{objectKey}")
    public String demo(@PathVariable("objectKey") String objectKey) {
        final S3Client s3client = S3Client.create();

        GetObjectRequest getObjectRequest = GetObjectRequest.builder()
                .bucket("my-bucket")
                .key(objectKey)
                .build();

        final ResponseBytes<GetObjectResponse> bytes = s3client.getObjectAsBytes(getObjectRequest);
        String objectContent = bytes.asUtf8String();

        log.info("received: {}", objectKey);
        return objectContent;
    }

0x09 參考:

curl http://169.254.169.254/latest/meta-data/iam/info

參考: https://repost.aws/knowledge-center/eks-pods-iam-role-service-accounts

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伐谈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子试疙,更是在濱河造成了極大的恐慌诵棵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祝旷,死亡現(xiàn)場離奇詭異非春,居然都是意外死亡柱徙,警方通過查閱死者的電腦和手機缓屠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門奇昙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人敌完,你說我怎么就攤上這事储耐。” “怎么了滨溉?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵什湘,是天一觀的道長。 經(jīng)常有香客問我晦攒,道長闽撤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任脯颜,我火速辦了婚禮哟旗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栋操。我一直安慰自己闸餐,他們只是感情好,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布矾芙。 她就那樣靜靜地躺著舍沙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪剔宪。 梳的紋絲不亂的頭發(fā)上拂铡,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音葱绒,去河邊找鬼感帅。 笑死,一個胖子當著我的面吹牛哈街,可吹牛的內(nèi)容都是我干的留瞳。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼骚秦,長吁一口氣:“原來是場噩夢啊……” “哼她倘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起作箍,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤硬梁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后胞得,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荧止,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了跃巡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片危号。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖素邪,靈堂內(nèi)的尸體忽然破棺而出外莲,到底是詐尸還是另有隱情,我是刑警寧澤兔朦,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布偷线,位于F島的核電站,受9級特大地震影響沽甥,放射性物質(zhì)發(fā)生泄漏声邦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一摆舟、第九天 我趴在偏房一處隱蔽的房頂上張望亥曹。 院中可真熱鬧,春花似錦盏檐、人聲如沸歇式。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽材失。三九已至,卻和暖如春硫豆,著一層夾襖步出監(jiān)牢的瞬間龙巨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工熊响, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旨别,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓汗茄,卻偏偏與公主長得像秸弛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洪碳,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容