gpt4 book ai didi

amazon-web-services - 复制数据库快照的最小 KMS 权限

转载 作者:行者123 更新时间:2023-12-04 01:46:18 28 4
gpt4 key购买 nike

我正在尝试设置最小权限来做 aws rds copy-db-snapshot使用 KMS 加密 key :

$ aws rds copy-db-snapshot --source-db-snapshot-identifier rds-backup-share-
mysql --target-db-snapshot-identifier rds-backup-share-mysql-reencrypted --kms-key-id <kms-arn>

( <> 中的所有内容都被我剥离并包含有效值。)

不幸的是,我收到此错误:
An error occurred (KMSKeyNotAccessibleFault) when calling the CopyDBSnapshot operation: The target snapshot KMS key [<kms-arn>] does not exist, is not enabled or you do not have permissions to access it.

目前我允许这些操作:
  "Action": [
"kms:ReEncrypt*",
"kms:ListKeys",
"kms:ListAliases",
"kms:GenerateDataKey*",
"kms:Encrypt",
"kms:DescribeKey",
"kms:Decrypt"
],

如果我用 kms:*{code} 替换它,它会起作用,所以肯定是权限问题。

我试图找出 CloudTrail 的正确权限,但它只包含相同的无用错误消息。

所以我的实际问题:
  • CopyDBSnapshot 的最低 KMS 权限是多少?
  • 有没有通用的方法来确定所需的权限?通过谷歌搜索所需的权限来浪费我的时间总是很痛苦。

  • 编辑:这是日志输出的底部 --debug启用:
    2017-08-22 17:15:37,521 - MainThread - botocore.endpoint - DEBUG - Sending http request: <PreparedRequest [POST]>
    2017-08-22 17:15:37,522 - MainThread - botocore.vendored.requests.packages.urllib3.connectionpool - INFO - Starting new HTTPS connection (1): rds.eu-west-1.amazonaws.com
    2017-08-22 17:15:37,927 - MainThread - botocore.vendored.requests.packages.urllib3.connectionpool - DEBUG - "POST / HTTP/1.1" 400 437
    2017-08-22 17:15:37,934 - MainThread - botocore.parsers - DEBUG - Response headers: {'x-amzn-requestid': 'c097fe4e-874c-11e7-a56a-9d1acedaf516', 'content-type': 'text/xml', 'content-length': '437', 'date': 'Tue, 22 Aug 2017 15:15:37 GMT', 'connection': 'close'}
    2017-08-22 17:15:37,936 - MainThread - botocore.parsers - DEBUG - Response body:
    b'<ErrorResponse xmlns="http://rds.amazonaws.com/doc/2014-10-31/">\n <Error>\n <Type>Sender</Type>\n <Code>KMSKeyNotAccessibleFault</Code>\n <Message>The target snapshot KMS key [<kms-arn>] does not exist, is not enabled or you do not have permissions to access it. </Message>\n </Error>\n <RequestId>c097fe4e-874c-11e7-a56a-9d1acedaf516</RequestId>\n</ErrorResponse>\n'
    2017-08-22 17:15:37,938 - MainThread - botocore.hooks - DEBUG - Event needs-retry.rds.CopyDBSnapshot: calling handler <botocore.retryhandler.RetryHandler object at 0x7f9c7ce84860>
    2017-08-22 17:15:37,939 - MainThread - botocore.retryhandler - DEBUG - No retry needed.
    2017-08-22 17:15:37,952 - MainThread - awscli.clidriver - DEBUG - Exception caught in main()
    Traceback (most recent call last):
    File "/usr/lib/python3.6/site-packages/awscli/clidriver.py", line 200, in main
    return command_table[parsed_args.command](remaining, parsed_args)
    File "/usr/lib/python3.6/site-packages/awscli/clidriver.py", line 338, in __call__
    return command_table[parsed_args.operation](remaining, parsed_globals)
    File "/usr/lib/python3.6/site-packages/awscli/clidriver.py", line 508, in __call__
    call_parameters, parsed_globals)
    File "/usr/lib/python3.6/site-packages/awscli/clidriver.py", line 627, in invoke
    client, operation_name, parameters, parsed_globals)
    File "/usr/lib/python3.6/site-packages/awscli/clidriver.py", line 639, in _make_client_call
    **parameters)
    File "/usr/lib/python3.6/site-packages/botocore/client.py", line 310, in _api_call
    return self._make_api_call(operation_name, kwargs)
    File "/usr/lib/python3.6/site-packages/botocore/client.py", line 599, in _make_api_call
    raise error_class(parsed_response, operation_name)
    botocore.errorfactory.KMSKeyNotAccessibleFault: An error occurred (KMSKeyNotAccessibleFault) when calling the CopyDBSnapshot operation: The target snapshot KMS key [<kms-arn>] does not exist, is not enabled or you do not have permissions to access it.
    2017-08-22 17:15:37,955 - MainThread - awscli.clidriver - DEBUG - Exiting with rc 255

    An error occurred (KMSKeyNotAccessibleFault) when calling the CopyDBSnapshot operation: The target snapshot KMS key [<kms-arn>] does not exist, is not enabled or you do not have permissions to access it.

    FTR:我在 AWS 论坛上发了一个交叉帖子: https://forums.aws.amazon.com/thread.jspa?messageID=801745

    最佳答案

    现在,我通过反复试验弄清楚了。由于我不喜欢多次执行相同的任务,因此我将其自动化(请参阅下面的脚本)。

    这是复制 RDS 快照所需的权限:

    ["kms:CreateGrant","kms:DescribeKey"]

    这是我使用的脚本。也许它对其他有类似问题的人有用。它是一起破解的,所以不要指望它开箱即用。

    #!/bin/bash

    set -euo pipefail

    unknown=(
    kms:CancelKeyDeletion
    kms:CreateAlias
    kms:CreateAlias
    kms:CreateGrant
    kms:CreateKey
    kms:Decrypt
    kms:DeleteAlias
    kms:DeleteAlias
    kms:DescribeKey
    kms:DisableKey
    kms:DisableKeyRotation
    kms:EnableKey
    kms:EnableKeyRotation
    kms:Encrypt
    kms:GenerateRandom
    kms:GenerateDataKey
    kms:GenerateDataKeyWithoutPlaintext
    kms:GetKeyPolicy
    kms:GetKeyRotationStatus
    kms:ListAliases
    kms:ListGrants
    kms:ListKeyPolicies
    kms:ListKeys
    kms:ListRetirableGrants
    kms:PutKeyPolicy
    kms:ReEncryptFrom
    kms:ReEncryptTo
    kms:RetireGrant
    kms:RevokeGrant
    kms:ScheduleKeyDeletion
    kms:UpdateAlias
    kms:UpdateAlias
    kms:UpdateKeyDescription
    )
    required=()

    KEY_ID=86a6300d-38f9-4892-b7a1-d8f821e8438c
    export AWS_DEFAULT_OUTPUT=json

    function check_copy {
    permissions=$( echo -n "${required[*]} ${unknown[*]}" | jq -R -s 'split(" ")' )

    policy=$( aws kms \
    get-key-policy \
    --key-id ${KEY_ID} \
    --policy-name default \
    | jq ".Policy" -r \
    | jq ".Statement[1].Action |= ${permissions}"
    )

    aws kms \
    put-key-policy \
    --key-id ${KEY_ID} \
    --policy-name default \
    --policy "${policy}"

    aws rds \
    delete-db-snapshot \
    --db-snapshot-identifier rds-backup-share-mysql-reencrypted \
    || true

    (
    set -x
    AWS_ACCESS_KEY_ID=XXX \
    AWS_SECRET_ACCESS_KEY=XXX \
    aws rds \
    copy-db-snapshot \
    --source-db-snapshot-identifier rds-backup-share-mysql \
    --target-db-snapshot-identifier rds-backup-share-mysql-reencrypted \
    --kms-key-id alias/rds-snapshot-share \
    || return 1

    aws rds \
    wait db-snapshot-completed \
    --db-snapshot-identifier rds-backup-share-mysql-reencrypted
    ) || return 1

    return 0
    }

    check_copy
    while [ ${#unknown[@]} -gt 0 ]
    do
    removed=${unknown[0]}
    unknown=(${unknown[@]:1})

    if ! check_copy
    then
    required+=($removed)
    fi

    echo "Required permissions so far: ${required[*]}"
    echo "Unknown permissions so far: ${unknown[*]}"
    done

    echo -n "Minimal permissions: "
    echo -n "${required[*]}" | jq -R -s -c 'split(" ")'

    关于amazon-web-services - 复制数据库快照的最小 KMS 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45821144/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com