如何在 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 機密的許可