如何在 AWS 帳戶之間共用 AWS Secrets Manager 機密?

2 分的閱讀內容
0

我想要與另一個 AWS 帳戶共用我的 AWS Secrets Manager 機密。

簡短描述

在此範例中,Security_Account 使用者管理帳戶 A 中的憑證,帳戶 B 中的開發人員會使用 Dev\ _Account 使用者。AWS Identity and Access Management (IAM) 使用者或應用程式在 Dev_Account 的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體中執行。此使用者或應用程式會擷取 Security_Account 使用者帳戶中的機密。

對機密使用以資源為基礎的政策可讓您將許可政策連接至機密。使用此政策可允許來自您 Dev_Account 中的 IAM 實體存取 Security_Account 中的機密。

使用 AWS Key Management Service (KMS) 金鑰 DevSecretKMS 對 Security_Account (帳戶 A) 中名為 DevSecret 的機密進行加密。然後,機密會與您的 Dev_Account (帳戶 B) 共用。

**注意:**您無法對該帳戶使用 AWS KMS 預設金鑰。AWS KMS 預設金鑰由在 AWS Key Management Service 上執行的 AWS 服務代表您建立、管理及使用。AWS KMS 預設金鑰對您的 AWS 帳戶和 AWS 區域而言是唯一。只有建立 AWS 受管金鑰的服務才能使用它。如需詳細資訊,請參閱 AWS KMS key

解決方法

設定 Security_Account (帳戶 A)

在您的機密所在區域的 Security_Account (帳戶 A) 中執行下列步驟。

1.    如果您沒有機密,請遵循建立機密的指示進行操作。在機密的 AWS KMS key ID 參數中指定 Amazon Resource Name (ARN)。

2.    如果您具有使用別名的現有機密,請遵循修改密碼的指示進行操作。在機密的 AWS KMS key ID 參數中指定 AWS KMS key ARN。

**注意:**您必須使用完整的 AWS KMS key ARN,才能從另一個 AWS 帳戶存取機密。

3.    在 AWS KMS key 的金鑰政策中授與許可。Secrets Manager 預設會對機密進行加密。擷取這些機密的身分識別需要存取權才能解密。由於 DevSecret 是使用 DevSecretKMS 加密的,因此您必須變更金鑰政策。為此,請新增下列許可

**注意:**將 your-region 取代為您的 AWS 區域

{  "Sid": "AllowUseOfTheKey",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"
  },
  "Action": [
    "kms:Decrypt"
  ],
  "Resource": "*",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": "secretsmanager.your-region.amazonaws.com"
    },
    "StringLike": {
      "kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"
    }
  }
}

此政策授與 Dev_Account (帳戶 B) 中的 SecretsUser 使用 Security_Account (帳戶 A) 中的 DevSecretKMS 許可。

4.    允許 IAM 實體許可存取機密。從 Security_Account,連接以資源為基礎的政策,該政策授與 SecretsUser 擷取 DevSecret 的許可。

注意: 將主體 ARN 取代為 IAM 使用者或角色的 ARN。

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::Dev_Account:user/SecretsUser"
      },
      "Action": "secretsmanager:GetSecretValue",
      "Resource": "*"
    }
  ]

設定 Dev_Account (帳戶 B)

在 Dev_Account (帳戶 B) 中完成下列步驟。

1.    將許可連接至您要擷取機密的 IAM 身分。使用類似下列內容的政策:

**注意:**將 your-region 取代為您的 AWS 區域

{  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowGetSecretValue",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue"
      ],
      "Resource": [
        "arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret-??????"
      ]
    },
    {
      "Sid": "AllowKMSDecrypt",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt"
      ],
      "Resource": [
        "arn:aws:kms:your-region:Security_Account:key/DevSecretKMS_id"
      ]
    }
  ]
}

若要讓 IAM 使用者 SecretsUser 在 Dev_Account 中擷取機密,SecretsUser 必須擁有 secretsmanager:GetSecretValue 的許可。SecretsUser 需要 AWS decrypt 許可,因為 DevSecret 使用 DevSecretKey 進行加密。

2.    以 SecretsUser 身分擷取機密,類似以下內容:

$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:your-region:Security_Account:secret:DevSecret --version-stage AWSCURRENT --region your-region

**注意:**將 your-region 取代為機密所在的 AWS 區域。

將這些指示用於所有 IAM 實體。例如,對於 Amazon EC2 執行個體設定檔或角色,請在資源政策中取代或新增 ARN。然後,編輯連接至 IAM 實體的許可。

相關資訊

如何透過連接以資源為基礎的政策跨 AWS 帳戶存取機密

如何解決存取加密的 AWS Secrets Manager 機密的問題?

對於不同帳戶中的使用者獲得 AWS Secrets Manager 機密的許可

AWS 官方
AWS 官方已更新 1 年前