【问题标题】:GetSecretValue operation is not authorized error with AWS Secrets ManagerGetSecretValue 操作未授权 AWS Secrets Manager 错误
【发布时间】:2021-06-19 18:23:05
【问题描述】:

我希望使用 AWS 机密管理器来存储我的 RDS 密码。我已经在没有任何旋转选项的秘密管理器中创建了我的数据库条目,现在我只想保存一个密码并从我的本地检索它,以便我可以使用它测试应用程序。我正在尝试使用以下代码检索密码

import boto3
import base64
from botocore.exceptions import ClientError

session = boto3.session.Session(aws_access_key_id,aws_secret_access_key)
client = session.client('secretsmanager', region_name='Region')
get_secret_value_response = client.get_secret_value(SecretId='DBName')

这会出现以下错误

 An error occurred (AccessDeniedException) when calling the GetSecretValue operation: User: arn:aws:iam::12345678910:user/user is not authorized to perform: secretsmanager:GetSecretValue on resource: DBName

我还尝试添加一个 IAM 策略,考虑可能会修复它但无法这样做,我不断收到“此策略包含语法错误”消息

{
    "Version":"2012-10-17",
    "Statement": [
        {
        "Action": "secretsmanager:GetSecretValue",
        "Resource": "arn:aws:secretsmanager:region:12345678910:secret:DatabaseSecret",
        "Effect": "Allow"
        }
    ]
}

我试图了解这里出了什么问题。感谢任何帮助。

【问题讨论】:

  • 秘密名称的后缀是否正确?我通常将arn:aws:secretsmanager:us-east-1: 12345678910:secret:DatabaseSecret-?????? 作为后缀有问号的资源名称

标签: amazon-web-services aws-secrets-manager


【解决方案1】:

Secret manager 资源名称应该有 6 个问号后缀,以匹配 Secrets Manager 分配的 6 个随机字符。

如果我们给DatabaseSecret作为资源名称,它会抛出未授权。

如果我们给DatabaseSecret-*,它将与其他秘密DatabaseSecret-<anything-here>a1b2c3匹配

因此,我们必须提供DatabaseSecret-??????,政策将类似于:

{
    "Version":"2012-10-17",
    "Statement": [
        {
        "Action": "secretsmanager:GetSecretValue",
        "Resource": "arn:aws:secretsmanager:region:12345678910:secret:DatabaseSecret-??????",
        "Effect": "Allow"
        }
    ]
}

更多详情here.

【讨论】:

  • 看起来 OP 正在尝试将此 JSON 添加到机密的“资源权限”字段中。它不起作用,因为需要在 IAM 中创建策略并附加到用户或角色。我在自己的答案中概述了完整的分步指南。
【解决方案2】:

问题是我使用的 IAM 用户没有附加 SecretsManager 执行策略。将该执行策略添加到用户后,它工作正常。

【讨论】:

  • 感谢这里的简短回答,我已经解决了我的问题。实际上,需要在 IAM 中创建策略并将其附加到用户或角色。 我在自己的回答中概述了完整的分步指南。
【解决方案3】:

需要在 IAM 中创建策略并将其附加到用户或角色。

  1. 通过在 AWS 搜索栏上搜索 IAM 打开 IAM 仪表板。

  2. 点击左侧的“用户”或“角色”。

  3. 搜索用户或角色并将其打开。

  4. 点击“添加权限”或“附加策略”。

  5. 对于用户,请单击“直接附加现有策略”。 (角色不需要这一步。)

  6. 如果您搜索并找不到合适的策略,请单击“创建策略”。

  7. 选择“Secrets Manager”作为服务,选择“GetSecretValue”作为操作(您可以在每个步骤中搜索这些。)

  8. 单击“资源”下的“添加 ARN”,然后输入区域代码以及带有 6 字符掩码的秘密 ID。预览 ARN 应反映您的完整 ARN:arn:aws:secretsmanager:region:12345678910:secret:DatabaseSecret-??????

  9. 点击“添加”,然后点击“下一步:标签”,然后点击“下一步:审核”。

  10. 在约束范围内输入名称,然后单击“创建策略”。

  11. 返回“附加策略”页面并单击“刷新”按钮(就在表格上方,右侧)。

  12. 搜索您的政策,点击复选框并点击“附加政策”。

  13. 再次测试您的应用程序。

【讨论】:

    【解决方案4】:

    即使您可能有策略,这里的真正问题是 getrandompassword 不能是资源特定的。检查 IAM UI 是否有错误。 你必须改变

    {
                "Effect": "Allow",
                "Action": [
                    "secretsmanager:GetRandomPassword",
                    "secretsmanager:GetSecretValue",
                    "secretsmanager:DescribeSecret",
                    "secretsmanager:PutSecretValue",
                    "secretsmanager:UpdateSecretVersionStage"
                ],
                "Resource": [
                    "arn:aws:secretsmanager:us-east-1:xxxxx:secret:yoursecret-zzzz"
                ]
            },
    

    {
                "Effect": "Allow",
                "Action": [
                    "secretsmanager:GetSecretValue",
                    "secretsmanager:DescribeSecret",
                    "secretsmanager:PutSecretValue",
                    "secretsmanager:UpdateSecretVersionStage"
                ],
                "Resource": [
                    "arn:aws:secretsmanager:us-east-1:xxxxx:secret:yoursecret-zzzz"
                ]
            },
        {
            "Effect": "Allow",
            "Action": "secretsmanager:GetRandomPassword",
            "Resource": "*"
        },
    

    在深入研究问题后发现更多项目不能是资源特定的,否则第一次轮换将失败,这在 aws 文章中有所记录: https://docs.aws.amazon.com/secretsmanager/latest/userguide/troubleshoot_rotation.html

    {
        "Effect": "Allow",
        "Action": [
            "secretsmanager:GetSecretValue",
            "secretsmanager:GetRandomPassword",
            "secretsmanager:DescribeSecret",
            "secretsmanager:PutSecretValue",
            "secretsmanager:UpdateSecretVersionStage"
        ],
        "Resource": "*"
    },
    

    【讨论】:

      猜你喜欢
      • 2020-01-29
      • 2019-11-28
      • 1970-01-01
      • 2021-10-08
      • 2020-08-23
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 2021-03-17
      相关资源
      最近更新 更多