首页 > 解决方案 > S3 存储桶策略 IAM 角色显示为 API 密钥

问题描述

我有一个 S3 存储桶,我正在尝试通过 CloudFormation 应用存储桶策略。我想允许两个 IAM 角色访问存储桶,通过在 CloudFormation 模板中的存储桶策略中指定角色的 ARN 来实现。以下是 CloudFormation 模板:

LandingBucketPolicy:
    Type: AWS::S3::BucketPolicy
    Properties:
      Bucket: !Ref LandingBucket
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          # yamllint disable-line rule:line-length
          - Sid: "Allow s3 permission"
            Action:
              - s3:PutObject
              - s3:GetObject
              - s3:ListBucket
            Effect: "Allow"
            Resource:
              - !GetAtt LandingBucket.Arn
              - !Sub "${LandingBucket.Arn}/*"
            Principal:
              AWS:
                - !Ref IamRoleArn1
                - !Ref IamRoleArn2

参数是:IamRoleArn1: arn:aws:iam::1234:role/xyz, IamRoleArn2: arn:aws:iam::1234:role/abc

控制台的最终策略如下所示

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "file drop permission",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::1234:role/xyz",
                    "AROxxIECxx"
                ]
            },
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

第一个 Principal 是一个 IAM 角色,然而,第二个看起来像一个 API 密钥,即使在 CloudFormation 模板中我已经提到了第二个 IAM 角色 ARN,就像第一个 IAM 角色一样。

为什么第二个角色 ARN 没有出现在存储桶策略中?

标签: amazon-web-servicesamazon-s3amazon-cloudformationamazon-iam

解决方案


这是该特定资源的唯一标识符。在这种情况下,它被称为RoleId,而 ARN 只是相同的可读格式。两种表示都指向 AWS 中的相同资源。尝试运行

 aws iam get-role --role-name "<you role here>"

此命令的输出将有一个名为 RoleId 的字段,它应该为您清除所有内容。

以AROA开头的唯一标识符表示它是与角色相关的资源。


推荐阅读