【问题标题】:Are AWS ARN's secrets?AWS ARN 的秘密是什么?
【发布时间】:2021-09-13 21:02:36
【问题描述】:

我正在使用预签名的 URL 实现向 S3 的上传,但我遇到了疑问。

根据S3:PutObject docs,为了指定 SSE KMS 加密,我需要同时指定:

  • x-amz-server-side-encryption: aws:kms
  • x-amz-server-side-encryption-aws-kms-key-id: SSEKMSKeyId

特别是后一个记录为:

此标头指定 AWS Key Management Service 的 ID

在我当前的用例中,x-amz-server-side-encryption-aws-kms-key-id 的值必须是完整的 ARN,因为我正在处理跨账户存储桶访问。

我一直将任何内部标识符视为秘密,但这篇文档提出了以下问题:

  • 泄露的 ARN 有什么影响?
  • AWS ARN 的 SAFE 是否如文档所述包含在标头中?

作为额外(可能)有用的信息,我在调试模式下为此操作运行了一个等效的 AWSCLI 命令,这是完整输出的一部分:

2021-07-01 21:38:05,165 - ThreadPoolExecutor-0_0 - botocore.utils - DEBUG - Checking for DNS compatible bucket for: https://s3.%REGION%.amazonaws.com/%BUCKET_NAME%/sample_file.bin.2
2021-07-01 21:38:05,165 - ThreadPoolExecutor-0_0 - botocore.utils - DEBUG - Not changing URI, bucket is not DNS compatible: %BUCKET_NAME%
2021-07-01 21:38:05,166 - ThreadPoolExecutor-0_0 - botocore.auth - DEBUG - Calculating signature using v4 auth.
2021-07-01 21:38:05,166 - ThreadPoolExecutor-0_0 - botocore.auth - DEBUG - CanonicalRequest:
PUT /%BUCKET_NAME%/sample_file.bin.2

content-md5:XXXXXoXNw5aXreJi4EOxA==
content-type:application/octet-stream
host:s3.%REGION%.amazonaws.com
x-amz-acl:bucket-owner-full-control
x-amz-content-sha256:UNSIGNED-PAYLOAD
x-amz-date:%DATE%T193805Z
x-amz-server-side-encryption:aws:kms
x-amz-server-side-encryption-aws-kms-key-id:arn:aws:kms:%REGION:%ACCOUNT_NUMBER%:key/%KEY_ID%
content-md5;content-type;host;x-amz-acl;x-amz-content-sha256;x-amz-date;x-amz-server-side-encryption;x-amz-server-side-encryption-aws-kms-key-id
UNSIGNED-PAYLOAD
2021-07-01 21:38:05,166 - ThreadPoolExecutor-0_0 - botocore.auth - DEBUG - StringToSign:
AWS4-HMAC-SHA256
%DATE%T193805Z
%DATE%/%REGION%/s3/aws4_request
XXXXXXbdbe72de054b86a2ab9043d29132a37c10498546743fff9b941a325f89
2021-07-01 21:38:05,166 - ThreadPoolExecutor-0_0 - botocore.auth - DEBUG - Signature:
XXXXXXabd40e652756b2dfbc39a0b6c8f2a93fac6f6c8d0140829fb015ccad65
2021-07-01 21:38:05,166 - ThreadPoolExecutor-0_0 - botocore.hooks - DEBUG - Event request-created.s3.PutObject: calling handler <function signal_transferring at 0x7fc79472ebf8>
2021-07-01 21:38:05,166 - ThreadPoolExecutor-0_0 - botocore.endpoint - DEBUG - Sending http request: <AWSPreparedRequest stream_output=False, method=PUT, url=https://s3.%REGION%.amazonaws.com/%BUCKET_NAME%/sample_file.bin.2, headers={'x-amz-acl': b'bucket-owner-full-control', 'x-amz-server-side-encryption': b'aws:kms', 'x-amz-server-side-encryption-aws-kms-key-id': b'arn:aws:kms:%REGION:%ACCOUNT_NUMBER%:key/%KEY_ID%', 'Content-Type': b'application/octet-stream', 'User-Agent': b'aws-cli/1.16.261 Python/3.6.12 Linux/5.3.18-lp152.60-preempt botocore/1.15.38', 'Content-MD5': b'7XXXXXXNw5aXreJi4EOxA==', 'Expect': b'100-continue', 'X-Amz-Date': b'%DATE%T193805Z', 'X-Amz-Content-SHA256': b'UNSIGNED-PAYLOAD', 'Authorization': b'AWS4-HMAC-SHA256 Credential=XXXXXXXXXXXX/%DATE%/%REGION%/s3/aws4_request, SignedHeaders=content-md5;content-type;host;x-amz-acl;x-amz-content-sha256;x-amz-date;x-amz-server-side-encryption;x-amz-server-side-encryption-aws-kms-key-id, Signature=XXXXXXabd40e652756b2dfbc39a0b6c8f2a93fac6f6c8d0140829fb015ccad65', 'Content-Length': '1048576'}>

我可以在标题中看到完整的 KMS ID...

P.S.:我已经编辑了大多数元数据和标识符

【问题讨论】:

    标签: amazon-web-services security amazon-s3


    【解决方案1】:

    这绝对不是秘密。虽然我不会在街角分发我的 ARN,但它们可以安全地用于标题等。

    第三方可能会使用泄露的 ARN 来尝试对您的资源执行操作,但由于它们存在于资源的信任区域之外,因此默认情况下它们将被拒绝。改变这种情况的唯一方法是,如果您部署的资源策略明确授予对资源区域之外的主体的访问权限。

    在这种情况下,您尝试向其授予 s3:PutObject 的委托人需要知道适当的密钥名称/别名来指定加密,否则您最终会在存储桶中获得可以使用的对象' t 解密。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2013-09-15
      • 2020-02-07
      • 2016-04-29
      • 2017-08-07
      • 1970-01-01
      相关资源
      最近更新 更多