微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

S3 存储桶策略 IAM 角色显示为 API 密钥

如何解决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 没有出现在存储桶策略中?

解决方法

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

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

此命令的输出将包含一个名为 RoleId 的字段,这应该会为您解决问题。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。